diff --git a/Makefile b/Makefile index c2b2c80..597cb99 100644 --- a/Makefile +++ b/Makefile @@ -28,7 +28,7 @@ INCLUDES += -isystem $(EFI_INCLUDES) INCLUDES += -isystem $(EFI_INCLUDES)/$(ARCH) INCLUDES += -isystem $(EFI_INCLUDES)/protocol -BASEFLAGS := -O2 -fpic -nostdlib +BASEFLAGS := -O2 -nostdlib BASEFLAGS += -ffreestanding -nodefaultlibs BASEFLAGS += -fno-builtin -fomit-frame-pointer @@ -51,7 +51,7 @@ WARNFLAGS += -Wno-unused-but-set-parameter ASFLAGS ?= CFLAGS := $(INCLUDES) $(DEPENDFLAGS) $(BASEFLAGS) $(WARNFLAGS) -CFLAGS += -std=c11 -fpic -fshort-wchar +CFLAGS += -std=c11 -fshort-wchar CFLAGS += -mno-red-zone -fno-stack-protector CFLAGS += -DGIT_VERSION="L\"$(VERSION)\"" CFLAGS += -DKERNEL_FILENAME="L\"$(KERNEL_FILENAME)\"" @@ -64,10 +64,11 @@ ifdef MAX_HRES BOOT_CFLAGS += -DMAX_HRES=$(MAX_HRES) endif -LDFLAGS := -L $(BUILD_D) -ggdb -fPIC -shared +LDFLAGS := -L $(BUILD_D) -ggdb -shared LDFLAGS += -nostdlib -znocombreloc -Bsymbolic -nostartfiles BOOT_LDFLAGS := $(LDFLAGS) +BOOT_LDFLAGS += -fPIC BOOT_LDFLAGS += -L $(EFI_ARCH_DIR)/lib -L $(EFI_ARCH_DIR)/gnuefi AS ?= $(CROSS)as diff --git a/src/arch/x86_64/kernel.ld b/src/arch/x86_64/kernel.ld index 587825a..b1ec9ff 100755 --- a/src/arch/x86_64/kernel.ld +++ b/src/arch/x86_64/kernel.ld @@ -5,22 +5,24 @@ SECTIONS .text : { code = .; + *(.text.entry) *(.text) - . = ALIGN(4096); } - .data : { + .data ALIGN(0x1000) : { data = .; *(.data) *(.rodata) - . = ALIGN(4096); } - .bss : { + .bss ALIGN(0x1000) : { bss = .; *(.bss) - . = ALIGN(4096); } - end = .; + .note ALIGN(0x1000) : { + *(.note.*) + } + + end = ALIGN(4096); } diff --git a/src/boot/main.c b/src/boot/main.c index 96cf513..147e292 100644 --- a/src/boot/main.c +++ b/src/boot/main.c @@ -43,6 +43,9 @@ efi_main (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) Print(L" %u bytes at 0x%x", kernel_length, kernel_image); con_status_ok(); + void (*kernel_main)() = kernel_image; + kernel_main(); + /* con_status_begin(L"Virtualizing memory..."); status = memory_virtualize(); diff --git a/src/modules/main/main.c b/src/modules/main/main.c index e4f428d..a6e7ed8 100644 --- a/src/modules/main/main.c +++ b/src/modules/main/main.c @@ -1,4 +1,5 @@ -__attribute__((used)) -int kernel_main() { - return 42; +__attribute__((section(".text.entry"))) +void kernel_main() { + volatile int foo = 13; + return; }