x86, vmlinux.lds: unify .text output sections
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>
This commit is contained in:
Родитель
444e0ae483
Коммит
dfc20895d9
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче