summaryrefslogtreecommitdiff
path: root/kernel/kernel.ld
diff options
context:
space:
mode:
authorVegard Storheil Eriksen <zyp@jvnv.net>2009-12-23 22:26:43 +0100
committerVegard Storheil Eriksen <zyp@jvnv.net>2009-12-23 22:31:02 +0100
commit864fb03a3305b65fedbe434ebb87510ac13fe865 (patch)
tree6b0b2b0dccf6fd1835a4e86ba808fbad2cba89cb /kernel/kernel.ld
Initial commit.
Diffstat (limited to 'kernel/kernel.ld')
-rw-r--r--kernel/kernel.ld57
1 files changed, 57 insertions, 0 deletions
diff --git a/kernel/kernel.ld b/kernel/kernel.ld
new file mode 100644
index 0000000..2bcbcbc
--- /dev/null
+++ b/kernel/kernel.ld
@@ -0,0 +1,57 @@
+OUTPUT_FORMAT("elf32-i386")
+ENTRY(entry)
+
+addr_phys = 0x00100000;
+addr_virt = 0xc0000000;
+
+addr_virt_end = ADDR(.bss) + SIZEOF(.bss);
+
+addr_load_virt = LOADADDR(.text);
+addr_load_virt_end = LOADADDR(.bss) + SIZEOF(.bss);
+
+SECTIONS {
+
+ .text_low addr_phys : {
+ LONG(0x1badb002);
+ LONG(0x00000003);
+ LONG(-0x1badb002 -0x00000003);
+
+ kernel/entry.o(.text)
+ kernel/entry.o(.rodata*)
+ . = ALIGN(0x1000);
+ }
+
+ .data_low : {
+ kernel/entry.o(.data)
+ . = ALIGN(0x1000);
+ }
+
+ .bss_low : {
+ kernel/entry.o(.bss)
+ . = ALIGN(0x1000);
+ entry_pagedir = .; . += 0x1000;
+ entry_pagetable_low = .; . += 0x1000;
+ entry_pagetable_high = .; . += 0x1000;
+ entry_stack = .; . += 0x1000; entry_stack_top = .;
+ }
+
+ .text addr_virt : AT(LOADADDR(.bss_low) + SIZEOF(.bss_low)) {
+ magic_text = .; LONG(0x0f00ba02);
+ *(.text)
+ *(.rodata*)
+ . = ALIGN(0x1000);
+ }
+
+ .data : AT(LOADADDR(.text) + SIZEOF(.text)) {
+ magic_data = .; LONG(0x0f00ba03);
+ *(.data)
+ *(.ctors)
+ . = ALIGN(0x1000);
+ }
+
+ .bss : AT(LOADADDR(.data) + SIZEOF(.data)) {
+ *(.bss)
+ *(COMMON)
+ . = ALIGN(0x1000);
+ }
+}