diff --git a/.gitignore b/.gitignore index 387fd413f941de9a0f6120766293a7c5124371ab..d4a07aa04bc5622381a08bdafe7a1ce511e4e5ef 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ *.o *.bin *.elf - +core diff --git a/code/asm/header.mk b/code/asm/header.mk new file mode 100644 index 0000000000000000000000000000000000000000..64aa72d3a54a100f903a621d9681da3f33c4e87a --- /dev/null +++ b/code/asm/header.mk @@ -0,0 +1,35 @@ +CROSS_COMPILE = riscv64-unknown-elf- +CFLAGS = -nostdlib -fno-builtin -march=rv32ima -mabi=ilp32 -g -Wall + +QEMU = qemu-system-riscv32 +QFLAGS = -nographic -smp 1 -machine virt -bios none + +CC_LIST := riscv64-unknown-elf- riscv64-linux-gnu- +CROSS_COMPILE := $(shell for cc in $(CC_LIST); do which $${cc}gcc >/dev/null 2>&1 && echo $${cc} && break; done) + +ifneq ($(CROSS_COMPILE),) + GCC = ${CROSS_COMPILE}gcc + ifeq ($(CROSS_COMPILE),riscv64-linux-gnu-) + # make sure PIE disabled for kernel-like binaries + CFLAGS += -fno-PIE -mcmodel=medany + endif + + GDB_LIST = ${CROSS_COMPILE}gdb gdb-multiarch + GDB = $(shell for gdb in $(GDB_LIST); do which $${gdb} >/dev/null 2>&1 && echo $${gdb} && break; done) +endif + +CC = $(GCC) +OBJCOPY = $(CROSS_COMPILE)objcopy +OBJDUMP = $(CROSS_COMPILE)objdump + +ifeq ($(GCC),) + $(error Please install one of $(addsuffix gcc,$(CC_LIST))) +else + ifeq ($(GDB),) + $(error Please install one of $(GDB_LIST)) + endif +endif + +ifneq ($(shell which $(QEMU) >/dev/null 2>&1; echo $$?),0) + $(error Please install $(QEMU)) +endif diff --git a/code/asm/rule.mk b/code/asm/rule.mk index 6d73fac1049b8d3ee20831b8ea5dbe2d6bb742bb..6270ebca4176bc0308e4aa42011c8620af9ee335 100644 --- a/code/asm/rule.mk +++ b/code/asm/rule.mk @@ -1,15 +1,9 @@ -CROSS_COMPILE = riscv64-unknown-elf- -CFLAGS = -nostdlib -fno-builtin -march=rv32ima -mabi=ilp32 -g -Wall - -QEMU = qemu-system-riscv32 -QFLAGS = -nographic -smp 1 -machine virt -bios none - -GDB = ${CROSS_COMPILE}gdb +include ../header.mk .DEFAULT_GOAL := all all: - @$(CROSS_COMPILE)gcc $(CFLAGS) ${SRC} -Ttext=0x80000000 -o $(EXEC).elf - @$(CROSS_COMPILE)objcopy -O binary $(EXEC).elf $(EXEC).bin + @$(GCC) $(CFLAGS) ${SRC} -Ttext=0x80000000 -o $(EXEC).elf + @$(OBJCOPY) -O binary $(EXEC).elf $(EXEC).bin .PHONY : run run: all @@ -27,7 +21,7 @@ debug: all .PHONY : code code: all - @$(CROSS_COMPILE)objdump -S $(EXEC).elf | less + @$(OBJDUMP) -S $(EXEC).elf | less .PHONY : hex hex: all diff --git a/code/os/00-bootstrap/Makefile b/code/os/00-bootstrap/Makefile index f5dbaa72331bc7db9715520ce97819826edfeafa..de8c770f851981a4d4282174a6a014971a8e87a6 100644 --- a/code/os/00-bootstrap/Makefile +++ b/code/os/00-bootstrap/Makefile @@ -1,13 +1,4 @@ -CROSS_COMPILE = riscv64-unknown-elf- -CFLAGS = -nostdlib -fno-builtin -march=rv32ima -mabi=ilp32 -g -Wall - -QEMU = qemu-system-riscv32 -QFLAGS = -nographic -smp 1 -machine virt -bios none - -GDB = ${CROSS_COMPILE}gdb -CC = ${CROSS_COMPILE}gcc -OBJCOPY = ${CROSS_COMPILE}objcopy -OBJDUMP = ${CROSS_COMPILE}objdump +include ../header.mk SRCS_ASM = \ start.S \ diff --git a/code/os/01-helloRVOS/Makefile b/code/os/01-helloRVOS/Makefile index 288c3198f759180ee564c34e76466f04dd369567..f900cccf156d5f5b1346c5fd95fd236f2b2e8c81 100644 --- a/code/os/01-helloRVOS/Makefile +++ b/code/os/01-helloRVOS/Makefile @@ -1,13 +1,4 @@ -CROSS_COMPILE = riscv64-unknown-elf- -CFLAGS = -nostdlib -fno-builtin -march=rv32ima -mabi=ilp32 -g -Wall - -QEMU = qemu-system-riscv32 -QFLAGS = -nographic -smp 1 -machine virt -bios none - -GDB = ${CROSS_COMPILE}gdb -CC = ${CROSS_COMPILE}gcc -OBJCOPY = ${CROSS_COMPILE}objcopy -OBJDUMP = ${CROSS_COMPILE}objdump +include ../header.mk SRCS_ASM = \ start.S \ diff --git a/code/os/02-memanagement/Makefile b/code/os/02-memanagement/Makefile index 26d9b3a04504f70ee691ef4043b5baf5caa42701..bf9b32ef01aef0af36a6dfe045babf2d38fe8602 100644 --- a/code/os/02-memanagement/Makefile +++ b/code/os/02-memanagement/Makefile @@ -1,17 +1,7 @@ -CROSS_COMPILE = riscv64-unknown-elf- -CFLAGS = -nostdlib -fno-builtin -march=rv32ima -mabi=ilp32 -g -Wall - -QEMU = qemu-system-riscv32 -QFLAGS = -nographic -smp 1 -machine virt -bios none - -GDB = ${CROSS_COMPILE}gdb -CC = ${CROSS_COMPILE}gcc -OBJCOPY = ${CROSS_COMPILE}objcopy -OBJDUMP = ${CROSS_COMPILE}objdump +include ../header.mk SRCS_ASM = \ - start.S \ - mem.S \ + start.S SRCS_C = \ kernel.c \ diff --git a/code/os/02-memanagement/mem.S b/code/os/02-memanagement/mem.S deleted file mode 100644 index 93ba0d6ba725cfa3f1382e8c7d7d825c2158c87b..0000000000000000000000000000000000000000 --- a/code/os/02-memanagement/mem.S +++ /dev/null @@ -1,30 +0,0 @@ -.section .rodata -.global HEAP_START -HEAP_START: .word _heap_start - -.global HEAP_SIZE -HEAP_SIZE: .word _heap_size - -.global TEXT_START -TEXT_START: .word _text_start - -.global TEXT_END -TEXT_END: .word _text_end - -.global DATA_START -DATA_START: .word _data_start - -.global DATA_END -DATA_END: .word _data_end - -.global RODATA_START -RODATA_START: .word _rodata_start - -.global RODATA_END -RODATA_END: .word _rodata_end - -.global BSS_START -BSS_START: .word _bss_start - -.global BSS_END -BSS_END: .word _bss_end diff --git a/code/os/02-memanagement/mem.h b/code/os/02-memanagement/mem.h new file mode 100644 index 0000000000000000000000000000000000000000..fa90666132f25b63d26528dd7515016e5afe0a62 --- /dev/null +++ b/code/os/02-memanagement/mem.h @@ -0,0 +1,25 @@ +/* + * Following global vars are provided by os.ld + */ + +extern uint32_t _heap_start; +extern uint32_t _heap_size; +extern uint32_t _text_start; +extern uint32_t _text_end; +extern uint32_t _data_start; +extern uint32_t _data_end; +extern uint32_t _rodata_start; +extern uint32_t _rodata_end; +extern uint32_t _bss_start; +extern uint32_t _bss_end; + +#define HEAP_START ((uint32_t)&_heap_start) +#define HEAP_SIZE ((uint32_t)&_heap_size) +#define TEXT_START ((uint32_t)&_text_start) +#define TEXT_END ((uint32_t)&_text_end) +#define DATA_START ((uint32_t)&_data_start) +#define DATA_END ((uint32_t)&_data_end) +#define RODATA_START ((uint32_t)&_rodata_start) +#define RODATA_END ((uint32_t)&_rodata_end) +#define BSS_START ((uint32_t)&_bss_start) +#define BSS_END ((uint32_t)&_bss_end) diff --git a/code/os/02-memanagement/page.c b/code/os/02-memanagement/page.c index addf097162e713b62d27cd6d737120fc19b550e1..2c1d0245eed506c7c1f955a55a2a113df921496b 100644 --- a/code/os/02-memanagement/page.c +++ b/code/os/02-memanagement/page.c @@ -1,18 +1,5 @@ #include "os.h" - -/* - * Following global vars are defined in mem.S - */ -extern uint32_t TEXT_START; -extern uint32_t TEXT_END; -extern uint32_t DATA_START; -extern uint32_t DATA_END; -extern uint32_t RODATA_START; -extern uint32_t RODATA_END; -extern uint32_t BSS_START; -extern uint32_t BSS_END; -extern uint32_t HEAP_START; -extern uint32_t HEAP_SIZE; +#include "mem.h" /* * _alloc_start points to the actual start address of heap pool diff --git a/code/os/03-contextswitch/Makefile b/code/os/03-contextswitch/Makefile index 40800aba1ba0bc5f952fb3ac328308b323761d92..5b89dad3dbcd979cb42544f0444542c0f9a021d7 100644 --- a/code/os/03-contextswitch/Makefile +++ b/code/os/03-contextswitch/Makefile @@ -1,17 +1,7 @@ -CROSS_COMPILE = riscv64-unknown-elf- -CFLAGS = -nostdlib -fno-builtin -march=rv32ima -mabi=ilp32 -g -Wall - -QEMU = qemu-system-riscv32 -QFLAGS = -nographic -smp 1 -machine virt -bios none - -GDB = ${CROSS_COMPILE}gdb -CC = ${CROSS_COMPILE}gcc -OBJCOPY = ${CROSS_COMPILE}objcopy -OBJDUMP = ${CROSS_COMPILE}objdump +include ../header.mk SRCS_ASM = \ start.S \ - mem.S \ entry.S \ SRCS_C = \ diff --git a/code/os/03-contextswitch/mem.S b/code/os/03-contextswitch/mem.S deleted file mode 100644 index 93ba0d6ba725cfa3f1382e8c7d7d825c2158c87b..0000000000000000000000000000000000000000 --- a/code/os/03-contextswitch/mem.S +++ /dev/null @@ -1,30 +0,0 @@ -.section .rodata -.global HEAP_START -HEAP_START: .word _heap_start - -.global HEAP_SIZE -HEAP_SIZE: .word _heap_size - -.global TEXT_START -TEXT_START: .word _text_start - -.global TEXT_END -TEXT_END: .word _text_end - -.global DATA_START -DATA_START: .word _data_start - -.global DATA_END -DATA_END: .word _data_end - -.global RODATA_START -RODATA_START: .word _rodata_start - -.global RODATA_END -RODATA_END: .word _rodata_end - -.global BSS_START -BSS_START: .word _bss_start - -.global BSS_END -BSS_END: .word _bss_end diff --git a/code/os/03-contextswitch/mem.h b/code/os/03-contextswitch/mem.h new file mode 100644 index 0000000000000000000000000000000000000000..fa90666132f25b63d26528dd7515016e5afe0a62 --- /dev/null +++ b/code/os/03-contextswitch/mem.h @@ -0,0 +1,25 @@ +/* + * Following global vars are provided by os.ld + */ + +extern uint32_t _heap_start; +extern uint32_t _heap_size; +extern uint32_t _text_start; +extern uint32_t _text_end; +extern uint32_t _data_start; +extern uint32_t _data_end; +extern uint32_t _rodata_start; +extern uint32_t _rodata_end; +extern uint32_t _bss_start; +extern uint32_t _bss_end; + +#define HEAP_START ((uint32_t)&_heap_start) +#define HEAP_SIZE ((uint32_t)&_heap_size) +#define TEXT_START ((uint32_t)&_text_start) +#define TEXT_END ((uint32_t)&_text_end) +#define DATA_START ((uint32_t)&_data_start) +#define DATA_END ((uint32_t)&_data_end) +#define RODATA_START ((uint32_t)&_rodata_start) +#define RODATA_END ((uint32_t)&_rodata_end) +#define BSS_START ((uint32_t)&_bss_start) +#define BSS_END ((uint32_t)&_bss_end) diff --git a/code/os/03-contextswitch/page.c b/code/os/03-contextswitch/page.c index addf097162e713b62d27cd6d737120fc19b550e1..2c1d0245eed506c7c1f955a55a2a113df921496b 100644 --- a/code/os/03-contextswitch/page.c +++ b/code/os/03-contextswitch/page.c @@ -1,18 +1,5 @@ #include "os.h" - -/* - * Following global vars are defined in mem.S - */ -extern uint32_t TEXT_START; -extern uint32_t TEXT_END; -extern uint32_t DATA_START; -extern uint32_t DATA_END; -extern uint32_t RODATA_START; -extern uint32_t RODATA_END; -extern uint32_t BSS_START; -extern uint32_t BSS_END; -extern uint32_t HEAP_START; -extern uint32_t HEAP_SIZE; +#include "mem.h" /* * _alloc_start points to the actual start address of heap pool diff --git a/code/os/04-multitask/Makefile b/code/os/04-multitask/Makefile index 6f150064dfa36e2ce1b85c4016f2fd42ce6256a2..7dce82bcc6d1424d134fccd43d92e27240513073 100644 --- a/code/os/04-multitask/Makefile +++ b/code/os/04-multitask/Makefile @@ -1,17 +1,7 @@ -CROSS_COMPILE = riscv64-unknown-elf- -CFLAGS = -nostdlib -fno-builtin -march=rv32ima -mabi=ilp32 -g -Wall - -QEMU = qemu-system-riscv32 -QFLAGS = -nographic -smp 1 -machine virt -bios none - -GDB = ${CROSS_COMPILE}gdb -CC = ${CROSS_COMPILE}gcc -OBJCOPY = ${CROSS_COMPILE}objcopy -OBJDUMP = ${CROSS_COMPILE}objdump +include ../header.mk SRCS_ASM = \ start.S \ - mem.S \ entry.S \ SRCS_C = \ diff --git a/code/os/04-multitask/mem.S b/code/os/04-multitask/mem.S deleted file mode 100644 index 93ba0d6ba725cfa3f1382e8c7d7d825c2158c87b..0000000000000000000000000000000000000000 --- a/code/os/04-multitask/mem.S +++ /dev/null @@ -1,30 +0,0 @@ -.section .rodata -.global HEAP_START -HEAP_START: .word _heap_start - -.global HEAP_SIZE -HEAP_SIZE: .word _heap_size - -.global TEXT_START -TEXT_START: .word _text_start - -.global TEXT_END -TEXT_END: .word _text_end - -.global DATA_START -DATA_START: .word _data_start - -.global DATA_END -DATA_END: .word _data_end - -.global RODATA_START -RODATA_START: .word _rodata_start - -.global RODATA_END -RODATA_END: .word _rodata_end - -.global BSS_START -BSS_START: .word _bss_start - -.global BSS_END -BSS_END: .word _bss_end diff --git a/code/os/04-multitask/mem.h b/code/os/04-multitask/mem.h new file mode 100644 index 0000000000000000000000000000000000000000..fa90666132f25b63d26528dd7515016e5afe0a62 --- /dev/null +++ b/code/os/04-multitask/mem.h @@ -0,0 +1,25 @@ +/* + * Following global vars are provided by os.ld + */ + +extern uint32_t _heap_start; +extern uint32_t _heap_size; +extern uint32_t _text_start; +extern uint32_t _text_end; +extern uint32_t _data_start; +extern uint32_t _data_end; +extern uint32_t _rodata_start; +extern uint32_t _rodata_end; +extern uint32_t _bss_start; +extern uint32_t _bss_end; + +#define HEAP_START ((uint32_t)&_heap_start) +#define HEAP_SIZE ((uint32_t)&_heap_size) +#define TEXT_START ((uint32_t)&_text_start) +#define TEXT_END ((uint32_t)&_text_end) +#define DATA_START ((uint32_t)&_data_start) +#define DATA_END ((uint32_t)&_data_end) +#define RODATA_START ((uint32_t)&_rodata_start) +#define RODATA_END ((uint32_t)&_rodata_end) +#define BSS_START ((uint32_t)&_bss_start) +#define BSS_END ((uint32_t)&_bss_end) diff --git a/code/os/04-multitask/page.c b/code/os/04-multitask/page.c index addf097162e713b62d27cd6d737120fc19b550e1..2c1d0245eed506c7c1f955a55a2a113df921496b 100644 --- a/code/os/04-multitask/page.c +++ b/code/os/04-multitask/page.c @@ -1,18 +1,5 @@ #include "os.h" - -/* - * Following global vars are defined in mem.S - */ -extern uint32_t TEXT_START; -extern uint32_t TEXT_END; -extern uint32_t DATA_START; -extern uint32_t DATA_END; -extern uint32_t RODATA_START; -extern uint32_t RODATA_END; -extern uint32_t BSS_START; -extern uint32_t BSS_END; -extern uint32_t HEAP_START; -extern uint32_t HEAP_SIZE; +#include "mem.h" /* * _alloc_start points to the actual start address of heap pool diff --git a/code/os/05-traps/Makefile b/code/os/05-traps/Makefile index 7e4b9c4eac56edbad8da46f093bdcc849787b099..0e51bf52ed5d0525e51709f9b3bf5bc8cd96bbb7 100644 --- a/code/os/05-traps/Makefile +++ b/code/os/05-traps/Makefile @@ -1,17 +1,7 @@ -CROSS_COMPILE = riscv64-unknown-elf- -CFLAGS = -nostdlib -fno-builtin -march=rv32ima -mabi=ilp32 -g -Wall - -QEMU = qemu-system-riscv32 -QFLAGS = -nographic -smp 1 -machine virt -bios none - -GDB = ${CROSS_COMPILE}gdb -CC = ${CROSS_COMPILE}gcc -OBJCOPY = ${CROSS_COMPILE}objcopy -OBJDUMP = ${CROSS_COMPILE}objdump +include ../header.mk SRCS_ASM = \ start.S \ - mem.S \ entry.S \ SRCS_C = \ diff --git a/code/os/05-traps/mem.S b/code/os/05-traps/mem.S deleted file mode 100644 index 93ba0d6ba725cfa3f1382e8c7d7d825c2158c87b..0000000000000000000000000000000000000000 --- a/code/os/05-traps/mem.S +++ /dev/null @@ -1,30 +0,0 @@ -.section .rodata -.global HEAP_START -HEAP_START: .word _heap_start - -.global HEAP_SIZE -HEAP_SIZE: .word _heap_size - -.global TEXT_START -TEXT_START: .word _text_start - -.global TEXT_END -TEXT_END: .word _text_end - -.global DATA_START -DATA_START: .word _data_start - -.global DATA_END -DATA_END: .word _data_end - -.global RODATA_START -RODATA_START: .word _rodata_start - -.global RODATA_END -RODATA_END: .word _rodata_end - -.global BSS_START -BSS_START: .word _bss_start - -.global BSS_END -BSS_END: .word _bss_end diff --git a/code/os/05-traps/mem.h b/code/os/05-traps/mem.h new file mode 100644 index 0000000000000000000000000000000000000000..fa90666132f25b63d26528dd7515016e5afe0a62 --- /dev/null +++ b/code/os/05-traps/mem.h @@ -0,0 +1,25 @@ +/* + * Following global vars are provided by os.ld + */ + +extern uint32_t _heap_start; +extern uint32_t _heap_size; +extern uint32_t _text_start; +extern uint32_t _text_end; +extern uint32_t _data_start; +extern uint32_t _data_end; +extern uint32_t _rodata_start; +extern uint32_t _rodata_end; +extern uint32_t _bss_start; +extern uint32_t _bss_end; + +#define HEAP_START ((uint32_t)&_heap_start) +#define HEAP_SIZE ((uint32_t)&_heap_size) +#define TEXT_START ((uint32_t)&_text_start) +#define TEXT_END ((uint32_t)&_text_end) +#define DATA_START ((uint32_t)&_data_start) +#define DATA_END ((uint32_t)&_data_end) +#define RODATA_START ((uint32_t)&_rodata_start) +#define RODATA_END ((uint32_t)&_rodata_end) +#define BSS_START ((uint32_t)&_bss_start) +#define BSS_END ((uint32_t)&_bss_end) diff --git a/code/os/05-traps/page.c b/code/os/05-traps/page.c index addf097162e713b62d27cd6d737120fc19b550e1..2c1d0245eed506c7c1f955a55a2a113df921496b 100644 --- a/code/os/05-traps/page.c +++ b/code/os/05-traps/page.c @@ -1,18 +1,5 @@ #include "os.h" - -/* - * Following global vars are defined in mem.S - */ -extern uint32_t TEXT_START; -extern uint32_t TEXT_END; -extern uint32_t DATA_START; -extern uint32_t DATA_END; -extern uint32_t RODATA_START; -extern uint32_t RODATA_END; -extern uint32_t BSS_START; -extern uint32_t BSS_END; -extern uint32_t HEAP_START; -extern uint32_t HEAP_SIZE; +#include "mem.h" /* * _alloc_start points to the actual start address of heap pool diff --git a/code/os/06-interrupts/Makefile b/code/os/06-interrupts/Makefile index 136fd408a1896b3dd5380b6acf8cb73ef905571a..22f8b784a3174d2410ff4a4b20d8808a2f2287f9 100644 --- a/code/os/06-interrupts/Makefile +++ b/code/os/06-interrupts/Makefile @@ -1,17 +1,7 @@ -CROSS_COMPILE = riscv64-unknown-elf- -CFLAGS = -nostdlib -fno-builtin -march=rv32ima -mabi=ilp32 -g -Wall - -QEMU = qemu-system-riscv32 -QFLAGS = -nographic -smp 1 -machine virt -bios none - -GDB = ${CROSS_COMPILE}gdb -CC = ${CROSS_COMPILE}gcc -OBJCOPY = ${CROSS_COMPILE}objcopy -OBJDUMP = ${CROSS_COMPILE}objdump +include ../header.mk SRCS_ASM = \ start.S \ - mem.S \ entry.S \ SRCS_C = \ diff --git a/code/os/06-interrupts/mem.S b/code/os/06-interrupts/mem.S deleted file mode 100644 index 93ba0d6ba725cfa3f1382e8c7d7d825c2158c87b..0000000000000000000000000000000000000000 --- a/code/os/06-interrupts/mem.S +++ /dev/null @@ -1,30 +0,0 @@ -.section .rodata -.global HEAP_START -HEAP_START: .word _heap_start - -.global HEAP_SIZE -HEAP_SIZE: .word _heap_size - -.global TEXT_START -TEXT_START: .word _text_start - -.global TEXT_END -TEXT_END: .word _text_end - -.global DATA_START -DATA_START: .word _data_start - -.global DATA_END -DATA_END: .word _data_end - -.global RODATA_START -RODATA_START: .word _rodata_start - -.global RODATA_END -RODATA_END: .word _rodata_end - -.global BSS_START -BSS_START: .word _bss_start - -.global BSS_END -BSS_END: .word _bss_end diff --git a/code/os/06-interrupts/mem.h b/code/os/06-interrupts/mem.h new file mode 100644 index 0000000000000000000000000000000000000000..fa90666132f25b63d26528dd7515016e5afe0a62 --- /dev/null +++ b/code/os/06-interrupts/mem.h @@ -0,0 +1,25 @@ +/* + * Following global vars are provided by os.ld + */ + +extern uint32_t _heap_start; +extern uint32_t _heap_size; +extern uint32_t _text_start; +extern uint32_t _text_end; +extern uint32_t _data_start; +extern uint32_t _data_end; +extern uint32_t _rodata_start; +extern uint32_t _rodata_end; +extern uint32_t _bss_start; +extern uint32_t _bss_end; + +#define HEAP_START ((uint32_t)&_heap_start) +#define HEAP_SIZE ((uint32_t)&_heap_size) +#define TEXT_START ((uint32_t)&_text_start) +#define TEXT_END ((uint32_t)&_text_end) +#define DATA_START ((uint32_t)&_data_start) +#define DATA_END ((uint32_t)&_data_end) +#define RODATA_START ((uint32_t)&_rodata_start) +#define RODATA_END ((uint32_t)&_rodata_end) +#define BSS_START ((uint32_t)&_bss_start) +#define BSS_END ((uint32_t)&_bss_end) diff --git a/code/os/06-interrupts/page.c b/code/os/06-interrupts/page.c index addf097162e713b62d27cd6d737120fc19b550e1..2c1d0245eed506c7c1f955a55a2a113df921496b 100644 --- a/code/os/06-interrupts/page.c +++ b/code/os/06-interrupts/page.c @@ -1,18 +1,5 @@ #include "os.h" - -/* - * Following global vars are defined in mem.S - */ -extern uint32_t TEXT_START; -extern uint32_t TEXT_END; -extern uint32_t DATA_START; -extern uint32_t DATA_END; -extern uint32_t RODATA_START; -extern uint32_t RODATA_END; -extern uint32_t BSS_START; -extern uint32_t BSS_END; -extern uint32_t HEAP_START; -extern uint32_t HEAP_SIZE; +#include "mem.h" /* * _alloc_start points to the actual start address of heap pool diff --git a/code/os/07-hwtimer/Makefile b/code/os/07-hwtimer/Makefile index 69e47ee415e9940936c3797a8e25da8da3300cc6..8c2b1f36dc16e03e42293493f08691450357e516 100644 --- a/code/os/07-hwtimer/Makefile +++ b/code/os/07-hwtimer/Makefile @@ -1,17 +1,7 @@ -CROSS_COMPILE = riscv64-unknown-elf- -CFLAGS = -nostdlib -fno-builtin -march=rv32ima -mabi=ilp32 -g -Wall - -QEMU = qemu-system-riscv32 -QFLAGS = -nographic -smp 1 -machine virt -bios none - -GDB = ${CROSS_COMPILE}gdb -CC = ${CROSS_COMPILE}gcc -OBJCOPY = ${CROSS_COMPILE}objcopy -OBJDUMP = ${CROSS_COMPILE}objdump +include ../header.mk SRCS_ASM = \ start.S \ - mem.S \ entry.S \ SRCS_C = \ diff --git a/code/os/07-hwtimer/mem.S b/code/os/07-hwtimer/mem.S deleted file mode 100644 index 93ba0d6ba725cfa3f1382e8c7d7d825c2158c87b..0000000000000000000000000000000000000000 --- a/code/os/07-hwtimer/mem.S +++ /dev/null @@ -1,30 +0,0 @@ -.section .rodata -.global HEAP_START -HEAP_START: .word _heap_start - -.global HEAP_SIZE -HEAP_SIZE: .word _heap_size - -.global TEXT_START -TEXT_START: .word _text_start - -.global TEXT_END -TEXT_END: .word _text_end - -.global DATA_START -DATA_START: .word _data_start - -.global DATA_END -DATA_END: .word _data_end - -.global RODATA_START -RODATA_START: .word _rodata_start - -.global RODATA_END -RODATA_END: .word _rodata_end - -.global BSS_START -BSS_START: .word _bss_start - -.global BSS_END -BSS_END: .word _bss_end diff --git a/code/os/07-hwtimer/mem.h b/code/os/07-hwtimer/mem.h new file mode 100644 index 0000000000000000000000000000000000000000..fa90666132f25b63d26528dd7515016e5afe0a62 --- /dev/null +++ b/code/os/07-hwtimer/mem.h @@ -0,0 +1,25 @@ +/* + * Following global vars are provided by os.ld + */ + +extern uint32_t _heap_start; +extern uint32_t _heap_size; +extern uint32_t _text_start; +extern uint32_t _text_end; +extern uint32_t _data_start; +extern uint32_t _data_end; +extern uint32_t _rodata_start; +extern uint32_t _rodata_end; +extern uint32_t _bss_start; +extern uint32_t _bss_end; + +#define HEAP_START ((uint32_t)&_heap_start) +#define HEAP_SIZE ((uint32_t)&_heap_size) +#define TEXT_START ((uint32_t)&_text_start) +#define TEXT_END ((uint32_t)&_text_end) +#define DATA_START ((uint32_t)&_data_start) +#define DATA_END ((uint32_t)&_data_end) +#define RODATA_START ((uint32_t)&_rodata_start) +#define RODATA_END ((uint32_t)&_rodata_end) +#define BSS_START ((uint32_t)&_bss_start) +#define BSS_END ((uint32_t)&_bss_end) diff --git a/code/os/07-hwtimer/page.c b/code/os/07-hwtimer/page.c index addf097162e713b62d27cd6d737120fc19b550e1..2c1d0245eed506c7c1f955a55a2a113df921496b 100644 --- a/code/os/07-hwtimer/page.c +++ b/code/os/07-hwtimer/page.c @@ -1,18 +1,5 @@ #include "os.h" - -/* - * Following global vars are defined in mem.S - */ -extern uint32_t TEXT_START; -extern uint32_t TEXT_END; -extern uint32_t DATA_START; -extern uint32_t DATA_END; -extern uint32_t RODATA_START; -extern uint32_t RODATA_END; -extern uint32_t BSS_START; -extern uint32_t BSS_END; -extern uint32_t HEAP_START; -extern uint32_t HEAP_SIZE; +#include "mem.h" /* * _alloc_start points to the actual start address of heap pool diff --git a/code/os/08-preemptive/Makefile b/code/os/08-preemptive/Makefile index 69e47ee415e9940936c3797a8e25da8da3300cc6..8c2b1f36dc16e03e42293493f08691450357e516 100644 --- a/code/os/08-preemptive/Makefile +++ b/code/os/08-preemptive/Makefile @@ -1,17 +1,7 @@ -CROSS_COMPILE = riscv64-unknown-elf- -CFLAGS = -nostdlib -fno-builtin -march=rv32ima -mabi=ilp32 -g -Wall - -QEMU = qemu-system-riscv32 -QFLAGS = -nographic -smp 1 -machine virt -bios none - -GDB = ${CROSS_COMPILE}gdb -CC = ${CROSS_COMPILE}gcc -OBJCOPY = ${CROSS_COMPILE}objcopy -OBJDUMP = ${CROSS_COMPILE}objdump +include ../header.mk SRCS_ASM = \ start.S \ - mem.S \ entry.S \ SRCS_C = \ diff --git a/code/os/08-preemptive/mem.S b/code/os/08-preemptive/mem.S deleted file mode 100644 index 93ba0d6ba725cfa3f1382e8c7d7d825c2158c87b..0000000000000000000000000000000000000000 --- a/code/os/08-preemptive/mem.S +++ /dev/null @@ -1,30 +0,0 @@ -.section .rodata -.global HEAP_START -HEAP_START: .word _heap_start - -.global HEAP_SIZE -HEAP_SIZE: .word _heap_size - -.global TEXT_START -TEXT_START: .word _text_start - -.global TEXT_END -TEXT_END: .word _text_end - -.global DATA_START -DATA_START: .word _data_start - -.global DATA_END -DATA_END: .word _data_end - -.global RODATA_START -RODATA_START: .word _rodata_start - -.global RODATA_END -RODATA_END: .word _rodata_end - -.global BSS_START -BSS_START: .word _bss_start - -.global BSS_END -BSS_END: .word _bss_end diff --git a/code/os/08-preemptive/mem.h b/code/os/08-preemptive/mem.h new file mode 100644 index 0000000000000000000000000000000000000000..fa90666132f25b63d26528dd7515016e5afe0a62 --- /dev/null +++ b/code/os/08-preemptive/mem.h @@ -0,0 +1,25 @@ +/* + * Following global vars are provided by os.ld + */ + +extern uint32_t _heap_start; +extern uint32_t _heap_size; +extern uint32_t _text_start; +extern uint32_t _text_end; +extern uint32_t _data_start; +extern uint32_t _data_end; +extern uint32_t _rodata_start; +extern uint32_t _rodata_end; +extern uint32_t _bss_start; +extern uint32_t _bss_end; + +#define HEAP_START ((uint32_t)&_heap_start) +#define HEAP_SIZE ((uint32_t)&_heap_size) +#define TEXT_START ((uint32_t)&_text_start) +#define TEXT_END ((uint32_t)&_text_end) +#define DATA_START ((uint32_t)&_data_start) +#define DATA_END ((uint32_t)&_data_end) +#define RODATA_START ((uint32_t)&_rodata_start) +#define RODATA_END ((uint32_t)&_rodata_end) +#define BSS_START ((uint32_t)&_bss_start) +#define BSS_END ((uint32_t)&_bss_end) diff --git a/code/os/08-preemptive/page.c b/code/os/08-preemptive/page.c index addf097162e713b62d27cd6d737120fc19b550e1..2c1d0245eed506c7c1f955a55a2a113df921496b 100644 --- a/code/os/08-preemptive/page.c +++ b/code/os/08-preemptive/page.c @@ -1,18 +1,5 @@ #include "os.h" - -/* - * Following global vars are defined in mem.S - */ -extern uint32_t TEXT_START; -extern uint32_t TEXT_END; -extern uint32_t DATA_START; -extern uint32_t DATA_END; -extern uint32_t RODATA_START; -extern uint32_t RODATA_END; -extern uint32_t BSS_START; -extern uint32_t BSS_END; -extern uint32_t HEAP_START; -extern uint32_t HEAP_SIZE; +#include "mem.h" /* * _alloc_start points to the actual start address of heap pool diff --git a/code/os/09-lock/Makefile b/code/os/09-lock/Makefile index 5cb1101709180ab655d0f8ec2dd6c3b671972494..d1c35245e020468bdb1b115856eb622a94369b90 100644 --- a/code/os/09-lock/Makefile +++ b/code/os/09-lock/Makefile @@ -1,17 +1,7 @@ -CROSS_COMPILE = riscv64-unknown-elf- -CFLAGS = -nostdlib -fno-builtin -march=rv32ima -mabi=ilp32 -g -Wall - -QEMU = qemu-system-riscv32 -QFLAGS = -nographic -smp 1 -machine virt -bios none - -GDB = ${CROSS_COMPILE}gdb -CC = ${CROSS_COMPILE}gcc -OBJCOPY = ${CROSS_COMPILE}objcopy -OBJDUMP = ${CROSS_COMPILE}objdump +include ../header.mk SRCS_ASM = \ start.S \ - mem.S \ entry.S \ SRCS_C = \ diff --git a/code/os/09-lock/mem.S b/code/os/09-lock/mem.S deleted file mode 100644 index 93ba0d6ba725cfa3f1382e8c7d7d825c2158c87b..0000000000000000000000000000000000000000 --- a/code/os/09-lock/mem.S +++ /dev/null @@ -1,30 +0,0 @@ -.section .rodata -.global HEAP_START -HEAP_START: .word _heap_start - -.global HEAP_SIZE -HEAP_SIZE: .word _heap_size - -.global TEXT_START -TEXT_START: .word _text_start - -.global TEXT_END -TEXT_END: .word _text_end - -.global DATA_START -DATA_START: .word _data_start - -.global DATA_END -DATA_END: .word _data_end - -.global RODATA_START -RODATA_START: .word _rodata_start - -.global RODATA_END -RODATA_END: .word _rodata_end - -.global BSS_START -BSS_START: .word _bss_start - -.global BSS_END -BSS_END: .word _bss_end diff --git a/code/os/09-lock/mem.h b/code/os/09-lock/mem.h new file mode 100644 index 0000000000000000000000000000000000000000..fa90666132f25b63d26528dd7515016e5afe0a62 --- /dev/null +++ b/code/os/09-lock/mem.h @@ -0,0 +1,25 @@ +/* + * Following global vars are provided by os.ld + */ + +extern uint32_t _heap_start; +extern uint32_t _heap_size; +extern uint32_t _text_start; +extern uint32_t _text_end; +extern uint32_t _data_start; +extern uint32_t _data_end; +extern uint32_t _rodata_start; +extern uint32_t _rodata_end; +extern uint32_t _bss_start; +extern uint32_t _bss_end; + +#define HEAP_START ((uint32_t)&_heap_start) +#define HEAP_SIZE ((uint32_t)&_heap_size) +#define TEXT_START ((uint32_t)&_text_start) +#define TEXT_END ((uint32_t)&_text_end) +#define DATA_START ((uint32_t)&_data_start) +#define DATA_END ((uint32_t)&_data_end) +#define RODATA_START ((uint32_t)&_rodata_start) +#define RODATA_END ((uint32_t)&_rodata_end) +#define BSS_START ((uint32_t)&_bss_start) +#define BSS_END ((uint32_t)&_bss_end) diff --git a/code/os/09-lock/page.c b/code/os/09-lock/page.c index addf097162e713b62d27cd6d737120fc19b550e1..2c1d0245eed506c7c1f955a55a2a113df921496b 100644 --- a/code/os/09-lock/page.c +++ b/code/os/09-lock/page.c @@ -1,18 +1,5 @@ #include "os.h" - -/* - * Following global vars are defined in mem.S - */ -extern uint32_t TEXT_START; -extern uint32_t TEXT_END; -extern uint32_t DATA_START; -extern uint32_t DATA_END; -extern uint32_t RODATA_START; -extern uint32_t RODATA_END; -extern uint32_t BSS_START; -extern uint32_t BSS_END; -extern uint32_t HEAP_START; -extern uint32_t HEAP_SIZE; +#include "mem.h" /* * _alloc_start points to the actual start address of heap pool diff --git a/code/os/10-swtimer/Makefile b/code/os/10-swtimer/Makefile index 5cb1101709180ab655d0f8ec2dd6c3b671972494..d1c35245e020468bdb1b115856eb622a94369b90 100644 --- a/code/os/10-swtimer/Makefile +++ b/code/os/10-swtimer/Makefile @@ -1,17 +1,7 @@ -CROSS_COMPILE = riscv64-unknown-elf- -CFLAGS = -nostdlib -fno-builtin -march=rv32ima -mabi=ilp32 -g -Wall - -QEMU = qemu-system-riscv32 -QFLAGS = -nographic -smp 1 -machine virt -bios none - -GDB = ${CROSS_COMPILE}gdb -CC = ${CROSS_COMPILE}gcc -OBJCOPY = ${CROSS_COMPILE}objcopy -OBJDUMP = ${CROSS_COMPILE}objdump +include ../header.mk SRCS_ASM = \ start.S \ - mem.S \ entry.S \ SRCS_C = \ diff --git a/code/os/10-swtimer/mem.S b/code/os/10-swtimer/mem.S deleted file mode 100644 index 93ba0d6ba725cfa3f1382e8c7d7d825c2158c87b..0000000000000000000000000000000000000000 --- a/code/os/10-swtimer/mem.S +++ /dev/null @@ -1,30 +0,0 @@ -.section .rodata -.global HEAP_START -HEAP_START: .word _heap_start - -.global HEAP_SIZE -HEAP_SIZE: .word _heap_size - -.global TEXT_START -TEXT_START: .word _text_start - -.global TEXT_END -TEXT_END: .word _text_end - -.global DATA_START -DATA_START: .word _data_start - -.global DATA_END -DATA_END: .word _data_end - -.global RODATA_START -RODATA_START: .word _rodata_start - -.global RODATA_END -RODATA_END: .word _rodata_end - -.global BSS_START -BSS_START: .word _bss_start - -.global BSS_END -BSS_END: .word _bss_end diff --git a/code/os/10-swtimer/mem.h b/code/os/10-swtimer/mem.h new file mode 100644 index 0000000000000000000000000000000000000000..fa90666132f25b63d26528dd7515016e5afe0a62 --- /dev/null +++ b/code/os/10-swtimer/mem.h @@ -0,0 +1,25 @@ +/* + * Following global vars are provided by os.ld + */ + +extern uint32_t _heap_start; +extern uint32_t _heap_size; +extern uint32_t _text_start; +extern uint32_t _text_end; +extern uint32_t _data_start; +extern uint32_t _data_end; +extern uint32_t _rodata_start; +extern uint32_t _rodata_end; +extern uint32_t _bss_start; +extern uint32_t _bss_end; + +#define HEAP_START ((uint32_t)&_heap_start) +#define HEAP_SIZE ((uint32_t)&_heap_size) +#define TEXT_START ((uint32_t)&_text_start) +#define TEXT_END ((uint32_t)&_text_end) +#define DATA_START ((uint32_t)&_data_start) +#define DATA_END ((uint32_t)&_data_end) +#define RODATA_START ((uint32_t)&_rodata_start) +#define RODATA_END ((uint32_t)&_rodata_end) +#define BSS_START ((uint32_t)&_bss_start) +#define BSS_END ((uint32_t)&_bss_end) diff --git a/code/os/10-swtimer/page.c b/code/os/10-swtimer/page.c index addf097162e713b62d27cd6d737120fc19b550e1..2c1d0245eed506c7c1f955a55a2a113df921496b 100644 --- a/code/os/10-swtimer/page.c +++ b/code/os/10-swtimer/page.c @@ -1,18 +1,5 @@ #include "os.h" - -/* - * Following global vars are defined in mem.S - */ -extern uint32_t TEXT_START; -extern uint32_t TEXT_END; -extern uint32_t DATA_START; -extern uint32_t DATA_END; -extern uint32_t RODATA_START; -extern uint32_t RODATA_END; -extern uint32_t BSS_START; -extern uint32_t BSS_END; -extern uint32_t HEAP_START; -extern uint32_t HEAP_SIZE; +#include "mem.h" /* * _alloc_start points to the actual start address of heap pool diff --git a/code/os/11-syscall/Makefile b/code/os/11-syscall/Makefile index 967a174af34875c2fd09ca019c02c5fc56a11337..2237a212f0f910be5646ac2c1dba125e6ee7cec7 100644 --- a/code/os/11-syscall/Makefile +++ b/code/os/11-syscall/Makefile @@ -1,24 +1,13 @@ -SYSCALL = y +include ../header.mk -CROSS_COMPILE = riscv64-unknown-elf- -CFLAGS = -nostdlib -fno-builtin -march=rv32ima -mabi=ilp32 -g -Wall +SYSCALL = y ifeq ($(SYSCALL), y) CFLAGS += -D CONFIG_SYSCALL endif - -QEMU = qemu-system-riscv32 -QFLAGS = -nographic -smp 1 -machine virt -bios none - -GDB = ${CROSS_COMPILE}gdb -CC = ${CROSS_COMPILE}gcc -OBJCOPY = ${CROSS_COMPILE}objcopy -OBJDUMP = ${CROSS_COMPILE}objdump - SRCS_ASM = \ start.S \ - mem.S \ entry.S \ usys.S diff --git a/code/os/11-syscall/mem.S b/code/os/11-syscall/mem.S deleted file mode 100644 index 93ba0d6ba725cfa3f1382e8c7d7d825c2158c87b..0000000000000000000000000000000000000000 --- a/code/os/11-syscall/mem.S +++ /dev/null @@ -1,30 +0,0 @@ -.section .rodata -.global HEAP_START -HEAP_START: .word _heap_start - -.global HEAP_SIZE -HEAP_SIZE: .word _heap_size - -.global TEXT_START -TEXT_START: .word _text_start - -.global TEXT_END -TEXT_END: .word _text_end - -.global DATA_START -DATA_START: .word _data_start - -.global DATA_END -DATA_END: .word _data_end - -.global RODATA_START -RODATA_START: .word _rodata_start - -.global RODATA_END -RODATA_END: .word _rodata_end - -.global BSS_START -BSS_START: .word _bss_start - -.global BSS_END -BSS_END: .word _bss_end diff --git a/code/os/11-syscall/mem.h b/code/os/11-syscall/mem.h new file mode 100644 index 0000000000000000000000000000000000000000..fa90666132f25b63d26528dd7515016e5afe0a62 --- /dev/null +++ b/code/os/11-syscall/mem.h @@ -0,0 +1,25 @@ +/* + * Following global vars are provided by os.ld + */ + +extern uint32_t _heap_start; +extern uint32_t _heap_size; +extern uint32_t _text_start; +extern uint32_t _text_end; +extern uint32_t _data_start; +extern uint32_t _data_end; +extern uint32_t _rodata_start; +extern uint32_t _rodata_end; +extern uint32_t _bss_start; +extern uint32_t _bss_end; + +#define HEAP_START ((uint32_t)&_heap_start) +#define HEAP_SIZE ((uint32_t)&_heap_size) +#define TEXT_START ((uint32_t)&_text_start) +#define TEXT_END ((uint32_t)&_text_end) +#define DATA_START ((uint32_t)&_data_start) +#define DATA_END ((uint32_t)&_data_end) +#define RODATA_START ((uint32_t)&_rodata_start) +#define RODATA_END ((uint32_t)&_rodata_end) +#define BSS_START ((uint32_t)&_bss_start) +#define BSS_END ((uint32_t)&_bss_end) diff --git a/code/os/11-syscall/page.c b/code/os/11-syscall/page.c index addf097162e713b62d27cd6d737120fc19b550e1..2c1d0245eed506c7c1f955a55a2a113df921496b 100644 --- a/code/os/11-syscall/page.c +++ b/code/os/11-syscall/page.c @@ -1,18 +1,5 @@ #include "os.h" - -/* - * Following global vars are defined in mem.S - */ -extern uint32_t TEXT_START; -extern uint32_t TEXT_END; -extern uint32_t DATA_START; -extern uint32_t DATA_END; -extern uint32_t RODATA_START; -extern uint32_t RODATA_END; -extern uint32_t BSS_START; -extern uint32_t BSS_END; -extern uint32_t HEAP_START; -extern uint32_t HEAP_SIZE; +#include "mem.h" /* * _alloc_start points to the actual start address of heap pool diff --git a/code/os/header.mk b/code/os/header.mk new file mode 120000 index 0000000000000000000000000000000000000000..50931aed4b97ba2398ab88f6f0e5c576a37e9494 --- /dev/null +++ b/code/os/header.mk @@ -0,0 +1 @@ +../asm/header.mk \ No newline at end of file