Make PIE kernel

This commit is contained in:
mintsuki 2023-06-28 12:44:09 +02:00
parent d68a24f849
commit 40a2a7c915
3 changed files with 22 additions and 11 deletions

View file

@ -50,8 +50,7 @@ override CFLAGS += \
-fno-stack-protector \ -fno-stack-protector \
-fno-stack-check \ -fno-stack-check \
-fno-lto \ -fno-lto \
-fno-PIE \ -fPIE \
-fno-PIC \
-m64 \ -m64 \
-march=x86-64 \ -march=x86-64 \
-mabi=sysv \ -mabi=sysv \
@ -59,8 +58,7 @@ override CFLAGS += \
-mno-mmx \ -mno-mmx \
-mno-sse \ -mno-sse \
-mno-sse2 \ -mno-sse2 \
-mno-red-zone \ -mno-red-zone
-mcmodel=kernel
# Internal C preprocessor flags that should not be changed by the user. # Internal C preprocessor flags that should not be changed by the user.
override CPPFLAGS := \ override CPPFLAGS := \
@ -71,17 +69,15 @@ override CPPFLAGS := \
# Internal linker flags that should not be changed by the user. # Internal linker flags that should not be changed by the user.
override LDFLAGS += \ override LDFLAGS += \
-m elf_x86_64 \
-nostdlib \ -nostdlib \
-static \ -static \
-m elf_x86_64 \ -pie \
--no-dynamic-linker \
-z text \
-z max-page-size=0x1000 \ -z max-page-size=0x1000 \
-T linker.ld -T linker.ld
# Check if the linker supports -no-pie and enable it if it does.
ifeq ($(shell $(LD) --help 2>&1 | grep 'no-pie' >/dev/null 2>&1; echo $$?),0)
override LDFLAGS += -no-pie
endif
# Internal nasm flags that should not be changed by the user. # Internal nasm flags that should not be changed by the user.
override NASMFLAGS += \ override NASMFLAGS += \
-Wall \ -Wall \

View file

@ -12,6 +12,7 @@ PHDRS
text PT_LOAD FLAGS((1 << 0) | (1 << 2)) ; /* Execute + Read */ text PT_LOAD FLAGS((1 << 0) | (1 << 2)) ; /* Execute + Read */
rodata PT_LOAD FLAGS((1 << 2)) ; /* Read only */ rodata PT_LOAD FLAGS((1 << 2)) ; /* Read only */
data PT_LOAD FLAGS((1 << 1) | (1 << 2)) ; /* Write + Read */ data PT_LOAD FLAGS((1 << 1) | (1 << 2)) ; /* Write + Read */
dynamic PT_DYNAMIC FLAGS((1 << 1) | (1 << 2)) ; /* Dynamic PHDR for relocations */
} }
SECTIONS SECTIONS
@ -40,6 +41,11 @@ SECTIONS
*(.data .data.*) *(.data .data.*)
} :data } :data
/* Dynamic section for relocations, both in its own PHDR and inside data PHDR */
.dynamic : {
*(.dynamic)
} :data :dynamic
/* NOTE: .bss needs to be the last thing mapped to :data, otherwise lots of */ /* NOTE: .bss needs to be the last thing mapped to :data, otherwise lots of */
/* unnecessary zeros will be written to the binary. */ /* unnecessary zeros will be written to the binary. */
/* If you need, for example, .init_array and .fini_array, those should be placed */ /* If you need, for example, .init_array and .fini_array, those should be placed */

View file

@ -2,9 +2,18 @@
TIMEOUT=3 TIMEOUT=3
# The entry name that will be displayed in the boot menu. # The entry name that will be displayed in the boot menu.
:Limine Barebones :Limine Barebones (KASLR off)
# We use the Limine boot protocol. # We use the Limine boot protocol.
PROTOCOL=limine PROTOCOL=limine
# Disable KASLR (it is enabled by default for relocatable kernels)
KASLR=no
# Path to the kernel to boot. boot:/// represents the partition on which limine.cfg is located. # Path to the kernel to boot. boot:/// represents the partition on which limine.cfg is located.
KERNEL_PATH=boot:///kernel.elf KERNEL_PATH=boot:///kernel.elf
# Same thing, but with KASLR.
:Limine Barebones (KASLR on)
PROTOCOL=limine
KERNEL_PATH=boot:///kernel.elf