diff --git a/kernel/Makefile b/kernel/Makefile index a54af1161a487c5e22d67769ac1b159b8aa24d10..ade032a26b628ff58207cb864de8b97719fcaaa3 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -9,13 +9,13 @@ ARCH = i386 endif assemble: kernel head - ld -o kernel.img -Ttext 0x7e00 --oformat binary image_head.o kernel.o -m elf_$(ARCH) + ld -o kernel.img -fpie -shared --oformat binary image_head.o kernel.o -m elf_$(ARCH) head: nasm -f elf$(BITS) -DTARGET_BITS=$(BITS) image_head.asm -o image_head.o kernel: - g++ -ffreestanding -fno-pie -c kernel.cc -o kernel.o -m$(BITS) -std=c++17 + g++ -ffreestanding -fpie -c kernel.cc -o kernel.o -m$(BITS) -std=c++17 clean: rm -f *.o *.img diff --git a/kernel/image_head.asm b/kernel/image_head.asm index 92c3af292ee64f06f6742a71ca49be3bb878cb91..b3a3b04ca618f419455f37c2c364baf5502ac81d 100644 --- a/kernel/image_head.asm +++ b/kernel/image_head.asm @@ -1,3 +1,5 @@ +global _start +_start: [bits TARGET_BITS] [extern main] call main