Make PIE kernel
This commit is contained in:
parent
d68a24f849
commit
40a2a7c915
|
@ -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 \
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
11
limine.cfg
11
limine.cfg
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue