Link every executable binary with crt{i,n}.o

This commit is contained in:
Pierre Pronchery 2018-08-22 02:05:29 +02:00
parent d5d96defdd
commit 26c8bb115c
11 changed files with 82 additions and 19 deletions

7
src/kernel/crti.S Normal file
View File

@ -0,0 +1,7 @@
/* $Id$ */
/* Copyright (c) 2018 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS uKernel */
#include "common/crti.S"

7
src/kernel/crtn.S Normal file
View File

@ -0,0 +1,7 @@
/* $Id$ */
/* Copyright (c) 2018 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS uKernel */
#include "common/crtn.S"

View File

@ -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

7
src/loader/crti.S Normal file
View File

@ -0,0 +1,7 @@
/* $Id$ */
/* Copyright (c) 2018 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS uKernel */
#include "common/crti.S"

7
src/loader/crtn.S Normal file
View File

@ -0,0 +1,7 @@
/* $Id$ */
/* Copyright (c) 2018 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS uKernel */
#include "common/crtn.S"

View File

@ -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

View File

@ -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

7
tools/crti.S Normal file
View File

@ -0,0 +1,7 @@
/* $Id$ */
/* Copyright (c) 2018 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS uKernel */
#include "common/crti.S"

7
tools/crtn.S Normal file
View File

@ -0,0 +1,7 @@
/* $Id$ */
/* Copyright (c) 2018 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS uKernel */
#include "common/crtn.S"

View File

@ -15,7 +15,7 @@
/* init */
int _init(void)
int init(void)
{
ukBus * bus;

View File

@ -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