commit 31624bb28fad31f2b0fee8f91263d37c2e84d6f5 parent 6c5b83286e8bb033052edaadb467a6963c1d060c Author: Roberto E. Vargas Caballero <k0ga@shike2.com> Date: Wed, 16 Sep 2020 19:40:40 +0200 kernel: Add hosted directory Adding a hosted directory helps to avoid too much nesting in the directory tree, and helps to separate the concepts of mode and arch. Change-Id: Idcb79fcb7b1c7eb8ef33e6bb5205e086837f5a78 Diffstat:
41 files changed, 158 insertions(+), 176 deletions(-)
diff --git a/config/amd64-darwin.mk b/config/amd64-darwin.mk @@ -2,3 +2,4 @@ ARCH = amd64 SYS = darwin ABI = amd64-darwin MODE = hosted +OS9 = 9hosted diff --git a/config/amd64-dragonfly.mk b/config/amd64-dragonfly.mk @@ -2,3 +2,4 @@ ARCH = amd64 SYS = dragonfly ABI = amd64-posix MODE = hosted +OS9 = 9hosted diff --git a/config/amd64-linux.mk b/config/amd64-linux.mk @@ -2,3 +2,4 @@ ARCH = amd64 SYS = linux ABI = amd64-posix MODE = hosted +OS9 = 9hosted diff --git a/config/amd64-netbsd.mk b/config/amd64-netbsd.mk @@ -2,3 +2,4 @@ ARCH = amd64 SYS = netbsd ABI = amd64-posix MODE = hosted +OS9 = 9hosted diff --git a/config/amd64-openbsd.mk b/config/amd64-openbsd.mk @@ -4,3 +4,4 @@ ABI = amd64-posix MODE = hosted SYSCFLAGS = $(NOPIE_CFLAGS) SYSLDFLAGS = $(NOPIE_LDFLAGS) +OS9 = 9hosted diff --git a/config/arm32-linux.mk b/config/arm32-linux.mk @@ -11,4 +11,4 @@ ABI = arm32-posix MODE = hosted SYSCFLAGS = $(ARM32_CFLAGS) SYSLDFLAGS = $(ARM32_LDFLAGS) -EMU = qemu-arm-static +OS9 = 9hosted diff --git a/config/arm64-9os.mk b/config/arm64-9os.mk @@ -4,3 +4,4 @@ MODE = native SYSASFLAGS = $(ARMV81_ASFLAGS) SYSCFLAGS = $(OS9_CFLAGS) SYSLDFLAGS = -Ttext=0x880000000 +OS9 = 9fvp diff --git a/config/arm64-linux.mk b/config/arm64-linux.mk @@ -2,4 +2,4 @@ ARCH = arm64 SYS = linux ABI = arm64-posix MODE = hosted -EMU = qemu-aarch64-static +OS9 = 9hosted diff --git a/src/kernel/Makefile b/src/kernel/Makefile @@ -11,10 +11,12 @@ OBJS =\ DIRS =\ arch\ dev\ + hosted\ -all: arch +all: image -arch: builtin.o +image: builtin.o FORCE + +test $(MODE) = hosted && cd hosted || cd arch && $(MAKE) builtin.o: $(OBJS) $(LD) $(PROJ_LDFLAGS) -r -o $@ $(OBJS) diff --git a/src/kernel/arch/Makefile b/src/kernel/arch/Makefile @@ -2,10 +2,10 @@ PROJECTDIR=../../.. include $(PROJECTDIR)/scripts/rules.mk -DIRS=hosted native +DIRS=arm64 all: - +@cd $(MODE) && $(MAKE) + +@cd $(ARCH) && $(MAKE) clean: $(FORALL) diff --git a/src/kernel/arch/native/arm64/.gitignore b/src/kernel/arch/arm64/.gitignore diff --git a/src/kernel/arch/arm64/Makefile b/src/kernel/arch/arm64/Makefile @@ -0,0 +1,41 @@ +.POSIX: +PROJECTDIR = ../../../.. +include $(PROJECTDIR)/scripts/rules.mk + +OBJS =\ + svc.o \ + ecstr.o \ + crt.o \ + kernel.o \ + arch.o \ + debug_lock.o \ + sysreg.o \ + cache.o \ + $(SRCDIR)/kernel/builtin.o \ + +TARGET = $(BINDIR)/9os.bin + +all: $(TARGET) + +ecstr.c: ec.h + mkecstr ec.h + +kernel.o: sysreg.h version.h +cache.o: sysreg.h + +sysreg.h: sysreg.lst + mksysreg -h sysreg.lst + +sysreg.s: sysreg.lst + mksysreg -s sysreg.lst + +version.h: + mkver + +$(BINDIR)/9os.elf: $(OBJS) $(LIBDEP) + $(LD) $(PROJ_LDFLAGS) $(LINKSCRIPT) $(OBJS) $(PROJ_LDLIBS) -o $@ + +clean: + rm -f ecstr.c + rm -f $(TARGET) + rm -f sysreg.h sysreg.s version.h diff --git a/src/kernel/arch/native/arm64/arch.h b/src/kernel/arch/arm64/arch.h diff --git a/src/kernel/arch/native/arm64/arch.s b/src/kernel/arch/arm64/arch.s diff --git a/src/kernel/arch/native/arm64/cache.c b/src/kernel/arch/arm64/cache.c diff --git a/src/kernel/arch/native/arm64/crt.s b/src/kernel/arch/arm64/crt.s diff --git a/src/kernel/arch/arm64/debug_lock.c b/src/kernel/arch/arm64/debug_lock.c @@ -0,0 +1 @@ +#include "../../hosted/lock.c" diff --git a/src/kernel/arch/native/arm64/ec.h b/src/kernel/arch/arm64/ec.h diff --git a/src/kernel/arch/native/arm64/kernel.c b/src/kernel/arch/arm64/kernel.c diff --git a/src/kernel/arch/native/arm64/lock.s b/src/kernel/arch/arm64/lock.s diff --git a/src/kernel/arch/native/arm64/mkecstr b/src/kernel/arch/arm64/mkecstr diff --git a/src/kernel/arch/native/arm64/mksysreg b/src/kernel/arch/arm64/mksysreg diff --git a/src/kernel/arch/native/arm64/mkver b/src/kernel/arch/arm64/mkver diff --git a/src/kernel/arch/native/arm64/svc.c b/src/kernel/arch/arm64/svc.c diff --git a/src/kernel/arch/native/arm64/sysreg.lst b/src/kernel/arch/arm64/sysreg.lst diff --git a/src/kernel/arch/hosted/Makefile b/src/kernel/arch/hosted/Makefile @@ -1,28 +0,0 @@ -.POSIX: -PROJECTDIR = ../../../.. -include $(PROJECTDIR)/scripts/rules.mk - -CRT = $(LIBDIR)/crt.o - -OBJS =\ - arch.o \ - lock.o \ - kernel.o \ - $(CRT) \ - $(SRCDIR)/kernel/builtin.o \ - -TARGET = $(BINDIR)/9os.elf - -all: $(TARGET) $(BINDIR)/blkfile - -$(DIRS): FORCE - cd $@ && $(MAKE) - -$(BINDIR)/9os.elf: $(OBJS) $(LIBDEP) - $(LD) $(PROJ_LDFLAGS) $(ROMOBJS) $(PROJ_LDLIBS) -o $@ - -$(BINDIR)/blkfile: - dd bs=512 count=2 if=/dev/zero of=$(BINDIR)/blkfile - -clean: - rm -f $(BINDIR)/blkfile diff --git a/src/kernel/arch/hosted/arch.c b/src/kernel/arch/hosted/arch.c @@ -1,80 +0,0 @@ -#include <setjmp.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include <9os/9os.h> - -#include "hosted.h" - -jmp_buf recover; - -noreturn void abort(void); -noreturn void longjmp(jmp_buf env, int val); -Context *(*getframe)(void); -int halted; - -Context * -getcontext(Context *ctx) -{ - return memcpy(ctx, (*getframe)(), sizeof(*ctx)); -} - -void -dohalt(void) -{ - halted = 1; - abort(); -} - -void -doswtch(Context *ctx) -{ - longjmp(recover, 1); -} - -void -dopanic(void) -{ - Context *ctx; - - ctx = (getframe) ? (*getframe)() : NULL; - trap(ctx); - abort(); -} - -uint8_t -inm8(void *addr) -{ - return 0; -} - -uint16_t -inm16(void *addr) -{ - return 0; -} - -uint32_t -inm32(void *addr) -{ - return 0; -} - -uint8_t -outm8(uint8_t val, void *addr) -{ - return 0; -} - -uint16_t -outm16(uint16_t val, void *addr) -{ - return 0; -} - -uint32_t -outm32(uint32_t val, void *addr) -{ - return 0; -} diff --git a/src/kernel/arch/hosted/lock.c b/src/kernel/arch/hosted/lock.c @@ -1 +0,0 @@ -#include "../lock.c" diff --git a/src/kernel/arch/native/Makefile b/src/kernel/arch/native/Makefile @@ -1,11 +0,0 @@ -.POSIX: -PROJECTDIR=../../../.. -include $(PROJECTDIR)/scripts/rules.mk - -DIRS=arm64 - -all: - +@cd $(ARCH) && $(MAKE) - -clean: - $(FORALL) diff --git a/src/kernel/arch/native/arm64/Makefile b/src/kernel/arch/native/arm64/Makefile @@ -1,41 +0,0 @@ -.POSIX: -PROJECTDIR = ../../../../.. -include $(PROJECTDIR)/scripts/rules.mk - -OBJS =\ - svc.o \ - ecstr.o \ - crt.o \ - kernel.o \ - arch.o \ - debug_lock.o \ - sysreg.o \ - cache.o \ - $(SRCDIR)/kernel/builtin.o \ - -TARGET = $(BINDIR)/9os.bin - -all: $(TARGET) - -ecstr.c: ec.h - mkecstr ec.h - -kernel.o: sysreg.h version.h -cache.o: sysreg.h - -sysreg.h: sysreg.lst - mksysreg -h sysreg.lst - -sysreg.s: sysreg.lst - mksysreg -s sysreg.lst - -version.h: - mkver - -$(BINDIR)/9os.elf: $(OBJS) $(LIBDEP) - $(LD) $(PROJ_LDFLAGS) $(LINKSCRIPT) $(OBJS) $(PROJ_LDLIBS) -o $@ - -clean: - rm -f ecstr.c - rm -f $(TARGET) - rm -f sysreg.h sysreg.s version.h diff --git a/src/kernel/arch/native/arm64/debug_lock.c b/src/kernel/arch/native/arm64/debug_lock.c @@ -1 +0,0 @@ -#include "../../lock.c" diff --git a/src/kernel/arch/native/9os b/src/kernel/cfg/9fvp diff --git a/src/kernel/arch/hosted/9os b/src/kernel/cfg/9hosted diff --git a/src/kernel/dev/Makefile b/src/kernel/dev/Makefile @@ -5,8 +5,8 @@ include $(PROJECTDIR)/scripts/rules.mk all clean: devs.mk blobs.mk $(MAKE) -f Makefile.drv $@ -devs.mk: $(TARGETDIR)/9os - mkdev $(TARGETDIR)/9os +devs.mk: ../cfg/$(OS9) + mkdev ../cfg/$(OS9) -blobs.mk: $(TARGETDIR)/9os - mkblob $(TARGETDIR)/9os +blobs.mk: ../cfg/$(OS9) + mkblob ../cfg/$(OS9) diff --git a/src/kernel/dev/Makefile.drv b/src/kernel/dev/Makefile.drv @@ -12,13 +12,13 @@ all: builtin.o builtin.o: $(OBJS) $(LD) $(PROJ_LDFLAGS) -r -o $@ $(OBJS) -devc.c: $(TARGETDIR)/9os - mkdevc $(TARGETDIR)/9os +devc.c: ../cfg/$(OS9) + mkdevc ../cfg/$(OS9) devroot.c: blobfil.h blobs.h -blobs.h: $(TARGETDIR)/9os - mkblobh $(TARGETDIR)/9os +blobs.h: ../cfg/$(OS9) + mkblobh ../cfg/$(OS9) clean: rm -f blobfil.h blobs.h blobs.mk devs.mk devc.c diff --git a/src/kernel/arch/hosted/.gitignore b/src/kernel/hosted/.gitignore diff --git a/src/kernel/hosted/Makefile b/src/kernel/hosted/Makefile @@ -0,0 +1,26 @@ +.POSIX: +PROJECTDIR = ../../.. +include $(PROJECTDIR)/scripts/rules.mk + +OBJS =\ + arch.o \ + lock.o \ + kernel.o \ + $(LIBDIR)/crt.o \ + $(SRCDIR)/kernel/builtin.o \ + +TARGET = $(BINDIR)/9os.elf + +all: $(TARGET) $(BINDIR)/blkfile + +$(DIRS): FORCE + cd $@ && $(MAKE) + +$(BINDIR)/9os.elf: $(OBJS) $(LIBDEP) + $(LD) $(PROJ_LDFLAGS) $(OBJS) $(PROJ_LDLIBS) -o $@ + +$(BINDIR)/blkfile: + dd bs=512 count=2 if=/dev/zero of=$(BINDIR)/blkfile + +clean: + rm -f $(BINDIR)/blkfile diff --git a/src/kernel/hosted/arch.c b/src/kernel/hosted/arch.c @@ -0,0 +1,68 @@ +#include <setjmp.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <9os/9os.h> + +#include "hosted.h" + +jmp_buf recover; + +noreturn void abort(void); +noreturn void longjmp(jmp_buf env, int val); +Context *(*getframe)(void); + +Context * +getcontext(Context *ctx) +{ + return memcpy(ctx, (*getframe)(), sizeof(*ctx)); +} + +void +halt(void) +{ + abort(); +} + +void +swtch(Context *ctx) +{ + longjmp(recover, 1); +} + +uint8_t +inm8(void *addr) +{ + return 0; +} + +uint16_t +inm16(void *addr) +{ + return 0; +} + +uint32_t +inm32(void *addr) +{ + return 0; +} + +uint8_t +outm8(uint8_t val, void *addr) +{ + return 0; +} + +uint16_t +outm16(uint16_t val, void *addr) +{ + return 0; +} + +uint32_t +outm32(uint32_t val, void *addr) +{ + return 0; +} diff --git a/src/kernel/arch/hosted/hosted.h b/src/kernel/hosted/hosted.h diff --git a/src/kernel/arch/hosted/kernel.c b/src/kernel/hosted/kernel.c diff --git a/src/kernel/arch/lock.c b/src/kernel/hosted/lock.c