x86: linker script uses sections, not names
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 28 May 2013 22:02:25 +0000 (15:02 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 30 May 2013 20:37:20 +0000 (13:37 -0700)
It's a bit cleaner, and I'll need this for the upcoming Kbuild patches.

As a side note, the boot section is three pages.  One for the code, and
one for the page table, but also one for the GDT data.  I'd like to
include that in the same page as the code, but I guess the linker
doesn't like that.  I guess we could ultimately free up those three
pages once we've fully booted, if we're hurting for 12KB.

kern/arch/i686/entry.S
kern/arch/i686/kernel.ld

index ab1afdf..7852761 100644 (file)
 #define MULTIBOOT_HEADER_FLAGS (MULTIBOOT_MEMORY_INFO | MULTIBOOT_PAGE_ALIGN)
 #define CHECKSUM (-(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS))
 
-.section .text
 # The kernel bootstrap (this code) is linked and loaded at physical address
 # 0x00100000 (1MB), which is the start of extended memory.  (See kernel.ld)
 
+# Flagging boottext to be text.  Check out:
+# http://sourceware.org/binutils/docs/as/Section.html
+.section .boottext, "awx"
+
 .code32
 .align 4
 multiboot_header:
@@ -87,7 +90,7 @@ loop:
        # Should never get here, but in case we do, just spin.
 spin:  jmp     spin
 
-.section .bootdata
+.section .bootdata, "aw"
        .p2align        2               # force 4 byte alignment
 mygdt:
        SEG_NULL                        # null seg
index d09807c..87e4a11 100644 (file)
@@ -12,7 +12,7 @@ SECTIONS
        . = 0x00100000;
 
        .bootstrap : {
-               obj/kern/arch/i686/entry.o (.text .bootdata)
+               *(.boottext .bootdata)
        }
 
        /* Link the main kernel for the space after entry + KERNBASE.  We'll still
@@ -21,7 +21,6 @@ SECTIONS
 
        .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 */
@@ -63,6 +62,7 @@ SECTIONS
 
        .bss : {
                *(.bss)
+               *(COMMON)
        }
 
        PROVIDE(end = .);