diff --git a/src/kernel/crti.S b/src/kernel/crti.S new file mode 100644 index 0000000..24a64dc --- /dev/null +++ b/src/kernel/crti.S @@ -0,0 +1,7 @@ +/* $Id$ */ +/* Copyright (c) 2018 Pierre Pronchery */ +/* This file is part of DeforaOS uKernel */ + + + +#include "common/crti.S" diff --git a/src/kernel/crtn.S b/src/kernel/crtn.S new file mode 100644 index 0000000..2c15d7b --- /dev/null +++ b/src/kernel/crtn.S @@ -0,0 +1,7 @@ +/* $Id$ */ +/* Copyright (c) 2018 Pierre Pronchery */ +/* This file is part of DeforaOS uKernel */ + + + +#include "common/crtn.S" diff --git a/src/kernel/project.conf b/src/kernel/project.conf index b8116a4..94ca90f 100644 --- a/src/kernel/project.conf +++ b/src/kernel/project.conf @@ -18,11 +18,11 @@ command=cp -f -- `$(CC) -print-file-name=crtend.o` $(OBJDIR)crtend.o [crti.o] type=object -sources=../common/crti.S +sources=crti.S [crtn.o] type=object -sources=../common/crtn.S +sources=crtn.S [uKernel.bin] type=binary @@ -34,11 +34,11 @@ depends=$(OBJDIR)crtbegin.o,$(OBJDIR)crtend.o,$(OBJDIR)crti.o,$(OBJDIR)crtn.o,$( [arch.S] depends=../arch/i386/ioport.S -[../common/crti.S] -depends=../arch/amd64/crti.S,../arch/i386/crti.S +[crti.S] +depends=../common/crti.S,../arch/amd64/crti.S,../arch/i386/crti.S -[../common/crtn.S] -depends=../arch/amd64/crtn.S,../arch/i386/crtn.S +[crtn.S] +depends=../common/crtn.S,../arch/amd64/crtn.S,../arch/i386/crtn.S [multiboot.c] depends=../loader/multiboot.c,../drivers/boot/multiboot.h diff --git a/src/loader/crti.S b/src/loader/crti.S new file mode 100644 index 0000000..24a64dc --- /dev/null +++ b/src/loader/crti.S @@ -0,0 +1,7 @@ +/* $Id$ */ +/* Copyright (c) 2018 Pierre Pronchery */ +/* This file is part of DeforaOS uKernel */ + + + +#include "common/crti.S" diff --git a/src/loader/crtn.S b/src/loader/crtn.S new file mode 100644 index 0000000..2c15d7b --- /dev/null +++ b/src/loader/crtn.S @@ -0,0 +1,7 @@ +/* $Id$ */ +/* Copyright (c) 2018 Pierre Pronchery */ +/* This file is part of DeforaOS uKernel */ + + + +#include "common/crtn.S" diff --git a/src/loader/project.conf b/src/loader/project.conf index 07c58ed..1a35741 100644 --- a/src/loader/project.conf +++ b/src/loader/project.conf @@ -18,11 +18,11 @@ command=cp -f -- `$(CC) -m32 -print-file-name=crtend.o` $(OBJDIR)crtend.o [crti.o] type=object -sources=../common/crti.S +sources=crti.S [crtn.o] type=object -sources=../common/crtn.S +sources=crtn.S [libuLoader] type=library @@ -31,19 +31,13 @@ sources=boot/multiboot.c,bus.c,bus/cmos.c,bus/ioport.c,bus/vga.c,console.c,conso [uLoader.bin] type=binary sources=arch.S,gdt.c,main.c,multiboot.c,start.S -ldflags=$(OBJDIR)crti.o $(OBJDIR)crtbegin.o $(OBJDIR)crtend.o $(OBJDIR)crtn.o $(OBJDIR)libuLoader.a `$(CC) -print-libgcc-file-name` +ldflags=$(OBJDIR)crti.o $(OBJDIR)crtbegin.o $(OBJDIR)libuLoader.a $(OBJDIR)crtend.o $(OBJDIR)crtn.o `$(CC) -print-libgcc-file-name` depends=$(OBJDIR)crtbegin.o,$(OBJDIR)crtend.o,$(OBJDIR)crti.o,$(OBJDIR)crtn.o,$(OBJDIR)libuLoader.a,../arch/amd64/uKernel.ld,../arch/i386/uKernel.ld #sources [arch.S] depends=../arch/i386/ioport.S -[../common/crti.S] -depends=../arch/amd64/crti.S,../arch/i386/crti.S - -[../common/crtn.S] -depends=../arch/amd64/crtn.S,../arch/i386/crtn.S - [bus.c] depends=../drivers/bus.c @@ -59,6 +53,12 @@ depends=../drivers/console.c [console/uart.c] depends=../drivers/console/uart.c +[crti.S] +depends=../common/crti.S,../arch/amd64/crti.S,../arch/i386/crti.S + +[crtn.S] +depends=../common/crtn.S,../arch/amd64/crtn.S,../arch/i386/crtn.S + [display.c] depends=../drivers/display.c diff --git a/tools/arch/i386/start.S b/tools/arch/i386/start.S index 45ac7a0..f6a4893 100644 --- a/tools/arch/i386/start.S +++ b/tools/arch/i386/start.S @@ -103,6 +103,9 @@ _start: /* call the global constructors */ call _init + /* initialize the userland */ + call init + /* run the userland kernel */ call main #if defined(__ELF__) @@ -110,10 +113,14 @@ _start: #else add $0xc, %esp #endif + push %eax + + /* call the global destructors */ + call _fini /* exit the userland kernel */ - push %eax call exit + add $0x4, %esp hlt diff --git a/tools/crti.S b/tools/crti.S new file mode 100644 index 0000000..24a64dc --- /dev/null +++ b/tools/crti.S @@ -0,0 +1,7 @@ +/* $Id$ */ +/* Copyright (c) 2018 Pierre Pronchery */ +/* This file is part of DeforaOS uKernel */ + + + +#include "common/crti.S" diff --git a/tools/crtn.S b/tools/crtn.S new file mode 100644 index 0000000..2c15d7b --- /dev/null +++ b/tools/crtn.S @@ -0,0 +1,7 @@ +/* $Id$ */ +/* Copyright (c) 2018 Pierre Pronchery */ +/* This file is part of DeforaOS uKernel */ + + + +#include "common/crtn.S" diff --git a/tools/init.c b/tools/init.c index 0c04b1a..6be5b8d 100644 --- a/tools/init.c +++ b/tools/init.c @@ -15,7 +15,7 @@ /* init */ -int _init(void) +int init(void) { ukBus * bus; diff --git a/tools/project.conf b/tools/project.conf index d904865..64c71c7 100644 --- a/tools/project.conf +++ b/tools/project.conf @@ -1,4 +1,4 @@ -targets=crtbegin.o,crtend.o,start.o,uKernel +targets=crtbegin.o,crtend.o,crti.o,crtn.o,start.o,uKernel cppflags_force=-nostdinc -isystem ../include -I../src cflags_force=`../tools/platform.sh -V NATIVE_CFLAGS -C "$$ARCH"` cflags=-W -Wall -g -O2 @@ -16,6 +16,14 @@ command=cp -f -- `$(CC) -print-file-name=crtbegin.o` $(OBJDIR)crtbegin.o type=command command=cp -f -- `$(CC) -print-file-name=crtend.o` $(OBJDIR)crtend.o +[crti.o] +type=object +sources=crti.S + +[crtn.o] +type=object +sources=crtn.S + [start.o] type=object sources=start.S @@ -23,7 +31,7 @@ sources=start.S [uKernel] type=binary sources=bus.c,clock.c,console.c,init.c,main.c -ldflags=$(OBJDIR)crtbegin.o $(OBJDIR)crtend.o $(OBJDIR)start.o $(OBJDIR)../src/lib/libuKernel.a $(OBJDIR)../src/drivers/clock/sys.o $(OBJDIR)../src/drivers/console/stdio.o `$(CC) -print-libgcc-file-name` +ldflags=$(OBJDIR)crti.o $(OBJDIR)crtbegin.o $(OBJDIR)start.o $(OBJDIR)../src/lib/libuKernel.a $(OBJDIR)../src/drivers/clock/sys.o $(OBJDIR)../src/drivers/console/stdio.o $(OBJDIR)crtend.o $(OBJDIR)crtn.o `$(CC) -print-libgcc-file-name` depends=$(OBJDIR)crtbegin.o,$(OBJDIR)crtend.o,$(OBJDIR)start.o,$(OBJDIR)../src/lib/libuKernel.a,$(OBJDIR)../src/drivers/clock/sys.o,$(OBJDIR)../src/drivers/console/stdio.o #sources @@ -33,6 +41,12 @@ depends=../src/drivers/bus.c,../src/drivers/bus/tty.c [console.c] depends=../src/drivers/console.h +[crti.S] +depends=../src/common/crti.S,../src/arch/amd64/crti.S,../src/arch/i386/crti.S + +[crtn.S] +depends=../src/common/crtn.S,../src/arch/amd64/crtn.S,../src/arch/i386/crtn.S + [main.c] depends=../src/kernel/main.c