aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64.ld
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86_64.ld')
-rw-r--r--arch/x86_64.ld81
1 files changed, 81 insertions, 0 deletions
diff --git a/arch/x86_64.ld b/arch/x86_64.ld
new file mode 100644
index 0000000..da6663e
--- /dev/null
+++ b/arch/x86_64.ld
@@ -0,0 +1,81 @@
+ENTRY(_start)
+
+KERNEL_AP_PMA = 0x0000000000008000;
+KERNEL_PMA = 0x0000000000100000;
+KERNEL_VMA = 0xffffffff80000000;
+
+SECTIONS
+{
+ /*
+ . = KERNEL_AP_PMA;
+
+ .apinit BLOCK(4K) : ALIGN(4K)
+ {
+ *(.apinit)
+ }
+ */
+
+ . = KERNEL_PMA;
+
+ .boot BLOCK(4K) : ALIGN(4K)
+ {
+ KEEP(*(.multiboot2.header))
+ *(.boot32.text)
+ *(.boot32.rodata)
+ *(.boot32.bss)
+ *(.boot64.text)
+ }
+
+ . += KERNEL_VMA;
+
+ .text ALIGN(4K) : AT (ADDR (.text) - KERNEL_VMA)
+ {
+ *(.text)
+ }
+
+ .rodata ALIGN(4K) : AT (ADDR (.rodata) - KERNEL_VMA)
+ {
+ *(.rodata)
+ }
+
+ .rodata. ALIGN(4K) : AT (ADDR (.rodata.) - KERNEL_VMA)
+ {
+ *(.rodata.*)
+ }
+
+ .data ALIGN(4K) : AT (ADDR (.data) - KERNEL_VMA)
+ {
+ *(.data)
+ }
+
+ .bss ALIGN(4K) : AT (ADDR (.bss) - KERNEL_VMA)
+ {
+ *(.bss)
+ }
+
+ .bss. ALIGN(4K) : AT (ADDR (.bss.) - KERNEL_VMA)
+ {
+ *(.bss.*)
+ }
+
+ /DISCARD/ :
+ {
+ *(.debug_abbrev)
+ *(.debug_aranges)
+ *(.debug_frame)
+ *(.debug_gdb_scripts)
+ *(.debug_info)
+ *(.debug_line)
+ *(.debug_line_str)
+ *(.debug_loc)
+ *(.debug_pubnames)
+ *(.debug_pubtypes)
+ *(.debug_ranges)
+ *(.debug_str)
+
+ *(.comment)
+ *(.note.*)
+ }
+
+ _kernel_end = .;
+}