aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/linker.ld
diff options
context:
space:
mode:
authorGravatar ornitorrincos 2026-08-18 12:15:05 +0200
committerGravatar ornitorrincos 2026-08-18 12:15:05 +0200
commit132d3236bb884433bf94e961f6d32264e0334aec (patch)
tree06638976b06f019ea4037175ff228f8271057c44 /kernel/linker.ld
Diffstat (limited to '')
-rw-r--r--kernel/linker.ld51
1 files changed, 51 insertions, 0 deletions
diff --git a/kernel/linker.ld b/kernel/linker.ld
new file mode 100644
index 0000000..43f8a15
--- /dev/null
+++ b/kernel/linker.ld
@@ -0,0 +1,51 @@
+ENTRY(loader)
+/* ENTRY(kmain) */
+
+SECTIONS
+{
+ /* 0xffffffff80000000 is the kernel virtual memory load address */
+ . = 0xffffffff80000000;
+
+ .text : AT(ADDR(.text) - 0xffffffff80000000)
+ {
+ _code = .;
+ *(.text)
+ *(.rodata*)
+ . = ALIGN(4096);
+ }
+
+ .data : AT(ADDR(.data) - 0xffffffff80000000)
+ {
+ _data = .;
+ *(.data)
+ . = ALIGN(4096);
+ }
+
+ .eh_frame : AT(ADDR(.eh_frame) - 0xffffffff80000000)
+ {
+ _ehframe = .;
+ *(.eh_frame)
+ . = ALIGN(4096);
+ }
+
+ .bss : AT(ADDR(.bss) - 0xffffffff80000000)
+ {
+ _bss = .;
+ *(.bss)
+
+ /*
+ * You usually need to include generated COMMON symbols
+ * under kernel BSS section or use gcc's -fno-common
+ */
+
+ *(COMMON)
+ . = ALIGN(4096);
+ }
+
+ _end = .;
+
+ /DISCARD/ :
+ {
+ *(.comment)
+ }
+}