aboutsummaryrefslogtreecommitdiff
path: root/kernel/link.ld
diff options
context:
space:
mode:
authornthnluu <nate1299@me.com>2024-01-28 21:20:27 -0500
committernthnluu <nate1299@me.com>2024-01-28 21:20:27 -0500
commitc63f340d90800895f007de64b7d2d14624263331 (patch)
tree2c0849fa597dd6da831c8707b6f2603403778d7b /kernel/link.ld
Created student weenix repository
Diffstat (limited to 'kernel/link.ld')
-rw-r--r--kernel/link.ld68
1 files changed, 68 insertions, 0 deletions
diff --git a/kernel/link.ld b/kernel/link.ld
new file mode 100644
index 0000000..e8d647e
--- /dev/null
+++ b/kernel/link.ld
@@ -0,0 +1,68 @@
+OUTPUT_FORMAT(elf64-x86-64)
+
+KERNEL_LMA = 0x00100000;
+KERNEL_VMA = 0xffff800000000000;
+
+ENTRY(_start)
+STARTUP(entry/entry.o)
+
+SECTIONS {
+ . = KERNEL_VMA + KERNEL_LMA;
+
+ k_start = .;
+
+ .text : AT(ADDR(.text) - KERNEL_VMA) {
+ _code = .;
+ *(.multiboot)
+ *(.text)
+ . = ALIGN(0x1000);
+ }
+
+ csd_start = .;
+ .csd : AT(ADDR(.csd) - KERNEL_VMA) {
+ *(.csd)
+ . = ALIGN(0x1000);
+ }
+ csd_end = .;
+
+ .init : AT(ADDR(.init) - KERNEL_VMA) {
+ kernel_start_init = .;
+ *(.init)
+ . = ALIGN(0x1000);
+ kernel_end_init = .;
+ }
+
+
+ .rodata : AT(ADDR(.rodata) - KERNEL_VMA) {
+ _rodata = .;
+ *(.rodata)
+ . = ALIGN(0x1000);
+ }
+
+ .data : AT(ADDR(.data) - KERNEL_VMA) {
+ _data = .;
+ *(.data)
+ . = ALIGN(0x1000);
+ }
+
+ _edata = .;
+
+ .bss : AT(ADDR(.bss) - KERNEL_VMA) {
+ _bss = .;
+ *(.bss)
+ *(COMMON)
+ . = ALIGN(0x1000);
+ }
+
+ _end = .;
+
+ /DISCARD/ : {
+ *(.comment)
+ *(note.*)
+ }
+ kernel_phys_off = k_start - KERNEL_LMA;
+ kernel_phys_base = k_start - kernel_phys_off;
+ kernel_phys_end = _end - kernel_phys_off;
+ kernel_page_tables = ((_end - k_start) / 0x80000) + 1; /* XXX might be 0x200000 */
+ kernel_text_sectors = ((_end - k_start) / 512) + 1;
+} \ No newline at end of file