x86: use a flat segmentation model
[akaros.git] / kern / arch / i686 / kernel.ld
index 03b5d9a..d09807c 100644 (file)
@@ -4,13 +4,24 @@
 OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
 OUTPUT_ARCH(i386)
 ENTRY(_start)
+KERNBASE = 0xc0000000;
 
 SECTIONS
 {
-       /* Link the kernel for 0xC01000C0, but load it at 0x001000C0) */
+       /* Entry Linked and loaded at 0x00100000 (includes multiboot) */
+       . = 0x00100000;
 
-       .text 0xC01000C0 : AT(0x001000C0) {
+       .bootstrap : {
+               obj/kern/arch/i686/entry.o (.text .bootdata)
+       }
+
+       /* Link the main kernel for the space after entry + KERNBASE.  We'll still
+        * load it adjacent in physical memory */
+       . += KERNBASE;
+
+       .text : AT(ADDR(.text) - KERNBASE) {
                *(.text .stub .text.* .gnu.linkonce.t.*)
+               *(EXCLUDE_FILE(*obj/kern/arch/i686/entry.o) .text)
        }
 
        PROVIDE(etext = .);     /* Define the 'etext' symbol to this value */