x86, vmlinux.lds: unify .text output sections
authorSam Ravnborg <sam@ravnborg.org>
Wed, 29 Apr 2009 07:47:21 +0000 (09:47 +0200)
committerIngo Molnar <mingo@elte.hu>
Wed, 29 Apr 2009 08:20:31 +0000 (10:20 +0200)
32 bit x86 had a dedicated .text.head output section,
whereas 64 bit had it all in a single output section.

In the unified version the dedicated .text.head output section
was kept to have full control over the head code.

32 bit:

- Moved definition of _stext to the linker script.
  The definition is located _after_ .text.page_aligned as this
  is what 32 bit did before.

The ALIGN(8) was introduced so we hit the exact same address
(on the tested config) before and after the move.

I assume that it is a bug that _stext did not cover the
.text.page_aligned section - if this is true it can be fixed
in a follow-up patch (and the ugly ALIGN() can be dropped).

[ Impact: 64-bit: cleanup, 32-bit: use the 64-bit linker script ]

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Tim Abbott <tabbott@MIT.EDU>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
LKML-Reference: <1240991249-27117-5-git-send-email-sam@ravnborg.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/kernel/head_32.S
arch/x86/kernel/vmlinux.lds.S
arch/x86/kernel/vmlinux_32.lds.S
arch/x86/kernel/vmlinux_64.lds.S

index 3068388..dc5ed4b 100644 (file)
@@ -608,13 +608,6 @@ ignore_int:
 ENTRY(initial_code)
        .long i386_start_kernel
 
-.section .text
-/*
- * Real beginning of normal "text" segment
- */
-ENTRY(stext)
-ENTRY(_stext)
-
 /*
  * BSS section
  */
index 845776f..a7c88bb 100644 (file)
@@ -64,6 +64,37 @@ SECTIONS
         phys_startup_64 = startup_64 - LOAD_OFFSET;
 #endif
 
+       /* Text and read-only data */
+
+       /* bootstrapping code */
+       .text.head : AT(ADDR(.text.head) - LOAD_OFFSET) {
+               _text = .;
+               *(.text.head)
+       } :text = 0x9090
+
+       /* The rest of the text */
+       .text :  AT(ADDR(.text) - LOAD_OFFSET) {
+#ifdef CONFIG_X86_32
+               /* not really needed, already page aligned */
+               . = ALIGN(PAGE_SIZE);
+               *(.text.page_aligned)
+#endif
+               . = ALIGN(8);
+               _stext = .;
+               TEXT_TEXT
+               SCHED_TEXT
+               LOCK_TEXT
+               KPROBES_TEXT
+               IRQENTRY_TEXT
+               *(.fixup)
+               *(.gnu.warning)
+               /* End of text section */
+               _etext = .;
+       } :text = 0x9090
+
+       NOTES :text :note
+
+
 #ifdef CONFIG_X86_32
 # include "vmlinux_32.lds.S"
 #else
index 3d3d49c..8540092 100644 (file)
@@ -1,27 +1,3 @@
-       /* Text and read-only data */
-       .text.head : AT(ADDR(.text.head) - LOAD_OFFSET) {
-               _text = .;
-               *(.text.head)
-       } :text = 0x9090
-
-       /* read-only */
-       .text : AT(ADDR(.text) - LOAD_OFFSET) {
-               /* not really needed, already page aligned */
-               . = ALIGN(PAGE_SIZE);
-               *(.text.page_aligned)
-               TEXT_TEXT
-               SCHED_TEXT
-               LOCK_TEXT
-               KPROBES_TEXT
-               IRQENTRY_TEXT
-               *(.fixup)
-               *(.gnu.warning)
-               /* End of text section */
-               _etext = .;
-       } :text = 0x9090
-
-       NOTES :text :note
-
        /* Exception table */
        . = ALIGN(16);
        __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) {
index 2d7fa20..b5d4367 100644 (file)
@@ -1,23 +1,3 @@
-       /* Text and read-only data */
-       .text :  AT(ADDR(.text) - LOAD_OFFSET) {
-               _text = .;
-               /* First the code that has to be first for bootstrapping */
-               *(.text.head)
-               _stext = .;
-               /* Then the rest */
-               TEXT_TEXT
-               SCHED_TEXT
-               LOCK_TEXT
-               KPROBES_TEXT
-               IRQENTRY_TEXT
-               *(.fixup)
-               *(.gnu.warning)
-               /* End of text section */
-               _etext = .;
-       } :text = 0x9090
-
-       NOTES :text :note
-
        /* Exception table */
        . = ALIGN(16);
        __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) {