hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/boot/linker.ld
diff options
context:
space:
mode:
Diffstat (limited to 'boot/linker.ld')
-rw-r--r--boot/linker.ld52
1 files changed, 52 insertions, 0 deletions
diff --git a/boot/linker.ld b/boot/linker.ld
new file mode 100644
index 0000000..e15ed10
--- /dev/null
+++ b/boot/linker.ld
@@ -0,0 +1,52 @@
+/* the higher half of the kernel link maps
+ * at the top 2 GiB is where Limine maps us. */
+
+OUTPUT_FORMAT(elf64-x86-64)
+ENTRY(_start)
+
+PHDRS
+{
+ limine_requests PT_LOAD;
+ text PT_LOAD;
+ rodata PT_LOAD;
+ data PT_LOAD;
+}
+
+SECTIONS
+{
+ . = 0xffffffff80000000;
+
+ /* The loader hunts for the magic numbers here
+ * these are referenced in `boot/` */
+ .limine_requests : {
+ KEEP(*(.limine_requests_start))
+ KEEP(*(.limine_requests))
+ KEEP(*(.limine_requests_end))
+ } :limine_requests
+
+ . = ALIGN(CONSTANT(MAXPAGESIZE));
+ .text : {
+ *(.text .text.*)
+ } :text
+
+ . = ALIGN(CONSTANT(MAXPAGESIZE));
+ .rodata : {
+ *(.rodata .rodata.*)
+ } :rodata
+
+ . = ALIGN(CONSTANT(MAXPAGESIZE));
+ .data : {
+ *(.data .data.*)
+ } :data
+
+ .bss : {
+ *(.bss .bss.*)
+ *(COMMON)
+ } :data
+
+ /* no unwind tables or note sections. */
+ /DISCARD/ : {
+ *(.eh_frame*)
+ *(.note .note.*)
+ }
+}