mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 22:51:42 +00:00
x86, vmlinux.lds: unify first part of initdata
32-bit: - Move definition of __init_begin outside output_section because it covers more than one section - Move ALIGN() for end-of-section inside .smp_locks output section. Same effect but the intent is better documented that we need both start and end aligned. 64-bit: - Move ALIGN() outside output section in .init.setup - Deleted unused __smp_alt_* symbols None of the above should result in any functional change. [ Impact: refactor and unify 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-9-git-send-email-sam@ravnborg.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
ff6f87e162
commit
e58bdaa8f8
@ -231,6 +231,67 @@ SECTIONS
|
|||||||
|
|
||||||
#endif /* CONFIG_X86_64 */
|
#endif /* CONFIG_X86_64 */
|
||||||
|
|
||||||
|
/* init_task */
|
||||||
|
. = ALIGN(THREAD_SIZE);
|
||||||
|
.data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET) {
|
||||||
|
*(.data.init_task)
|
||||||
|
}
|
||||||
|
#ifdef CONFIG_X86_64
|
||||||
|
:data.init
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* smp_locks might be freed after init
|
||||||
|
* start/end must be page aligned
|
||||||
|
*/
|
||||||
|
. = ALIGN(PAGE_SIZE);
|
||||||
|
.smp_locks : AT(ADDR(.smp_locks) - LOAD_OFFSET) {
|
||||||
|
__smp_locks = .;
|
||||||
|
*(.smp_locks)
|
||||||
|
__smp_locks_end = .;
|
||||||
|
. = ALIGN(PAGE_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Init code and data - will be freed after init */
|
||||||
|
. = ALIGN(PAGE_SIZE);
|
||||||
|
__init_begin = .; /* paired with __init_end */
|
||||||
|
.init.text : AT(ADDR(.init.text) - LOAD_OFFSET) {
|
||||||
|
_sinittext = .;
|
||||||
|
INIT_TEXT
|
||||||
|
_einittext = .;
|
||||||
|
}
|
||||||
|
|
||||||
|
.init.data : AT(ADDR(.init.data) - LOAD_OFFSET) {
|
||||||
|
INIT_DATA
|
||||||
|
}
|
||||||
|
|
||||||
|
. = ALIGN(16);
|
||||||
|
.init.setup : AT(ADDR(.init.setup) - LOAD_OFFSET) {
|
||||||
|
__setup_start = .;
|
||||||
|
*(.init.setup)
|
||||||
|
__setup_end = .;
|
||||||
|
}
|
||||||
|
.initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) {
|
||||||
|
__initcall_start = .;
|
||||||
|
INITCALLS
|
||||||
|
__initcall_end = .;
|
||||||
|
}
|
||||||
|
|
||||||
|
.con_initcall.init : AT(ADDR(.con_initcall.init) - LOAD_OFFSET) {
|
||||||
|
__con_initcall_start = .;
|
||||||
|
*(.con_initcall.init)
|
||||||
|
__con_initcall_end = .;
|
||||||
|
}
|
||||||
|
|
||||||
|
.x86_cpu_dev.init : AT(ADDR(.x86_cpu_dev.init) - LOAD_OFFSET) {
|
||||||
|
__x86_cpu_dev_start = .;
|
||||||
|
*(.x86_cpu_dev.init)
|
||||||
|
__x86_cpu_dev_end = .;
|
||||||
|
}
|
||||||
|
|
||||||
|
SECURITY_INIT
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_X86_32
|
#ifdef CONFIG_X86_32
|
||||||
# include "vmlinux_32.lds.S"
|
# include "vmlinux_32.lds.S"
|
||||||
#else
|
#else
|
||||||
|
@ -1,63 +1,3 @@
|
|||||||
/* init_task */
|
|
||||||
. = ALIGN(THREAD_SIZE);
|
|
||||||
.data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET) {
|
|
||||||
*(.data.init_task)
|
|
||||||
}
|
|
||||||
|
|
||||||
. = ALIGN(PAGE_SIZE);
|
|
||||||
.smp_locks : AT(ADDR(.smp_locks) - LOAD_OFFSET) {
|
|
||||||
/* might get freed after init */
|
|
||||||
__smp_locks = .;
|
|
||||||
*(.smp_locks)
|
|
||||||
__smp_locks_end = .;
|
|
||||||
}
|
|
||||||
/* will be freed after init
|
|
||||||
* Following ALIGN() is required to make sure no other data falls on the
|
|
||||||
* same page where __smp_alt_end is pointing as that page might be freed
|
|
||||||
* after boot. Always make sure that ALIGN() directive is present after
|
|
||||||
* the section which contains __smp_alt_end.
|
|
||||||
*/
|
|
||||||
. = ALIGN(PAGE_SIZE);
|
|
||||||
|
|
||||||
/* Init code and data - will be freed after init */
|
|
||||||
. = ALIGN(PAGE_SIZE);
|
|
||||||
.init.text : AT(ADDR(.init.text) - LOAD_OFFSET) {
|
|
||||||
__init_begin = .;
|
|
||||||
_sinittext = .;
|
|
||||||
INIT_TEXT
|
|
||||||
_einittext = .;
|
|
||||||
}
|
|
||||||
|
|
||||||
.init.data : AT(ADDR(.init.data) - LOAD_OFFSET) {
|
|
||||||
INIT_DATA
|
|
||||||
}
|
|
||||||
|
|
||||||
. = ALIGN(16);
|
|
||||||
.init.setup : AT(ADDR(.init.setup) - LOAD_OFFSET) {
|
|
||||||
__setup_start = .;
|
|
||||||
*(.init.setup)
|
|
||||||
__setup_end = .;
|
|
||||||
}
|
|
||||||
.initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) {
|
|
||||||
__initcall_start = .;
|
|
||||||
INITCALLS
|
|
||||||
__initcall_end = .;
|
|
||||||
}
|
|
||||||
|
|
||||||
.con_initcall.init : AT(ADDR(.con_initcall.init) - LOAD_OFFSET) {
|
|
||||||
__con_initcall_start = .;
|
|
||||||
*(.con_initcall.init)
|
|
||||||
__con_initcall_end = .;
|
|
||||||
}
|
|
||||||
|
|
||||||
.x86_cpu_dev.init : AT(ADDR(.x86_cpu_dev.init) - LOAD_OFFSET) {
|
|
||||||
__x86_cpu_dev_start = .;
|
|
||||||
*(.x86_cpu_dev.init)
|
|
||||||
__x86_cpu_dev_end = .;
|
|
||||||
}
|
|
||||||
|
|
||||||
SECURITY_INIT
|
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.altinstructions : AT(ADDR(.altinstructions) - LOAD_OFFSET) {
|
.altinstructions : AT(ADDR(.altinstructions) - LOAD_OFFSET) {
|
||||||
__alt_instructions = .;
|
__alt_instructions = .;
|
||||||
|
@ -1,62 +1,3 @@
|
|||||||
/* init_task */
|
|
||||||
.data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET) {
|
|
||||||
. = ALIGN(THREAD_SIZE);
|
|
||||||
*(.data.init_task)
|
|
||||||
} :data.init
|
|
||||||
|
|
||||||
.smp_locks : AT(ADDR(.smp_locks) - LOAD_OFFSET) {
|
|
||||||
/* might get freed after init */
|
|
||||||
. = ALIGN(PAGE_SIZE);
|
|
||||||
__smp_alt_begin = .;
|
|
||||||
__smp_locks = .;
|
|
||||||
*(.smp_locks)
|
|
||||||
__smp_locks_end = .;
|
|
||||||
. = ALIGN(PAGE_SIZE);
|
|
||||||
__smp_alt_end = .;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Init code and data */
|
|
||||||
. = ALIGN(PAGE_SIZE);
|
|
||||||
__init_begin = .; /* paired with __init_end */
|
|
||||||
.init.text : AT(ADDR(.init.text) - LOAD_OFFSET) {
|
|
||||||
_sinittext = .;
|
|
||||||
INIT_TEXT
|
|
||||||
_einittext = .;
|
|
||||||
}
|
|
||||||
|
|
||||||
.init.data : AT(ADDR(.init.data) - LOAD_OFFSET) {
|
|
||||||
__initdata_begin = .;
|
|
||||||
INIT_DATA
|
|
||||||
__initdata_end = .;
|
|
||||||
}
|
|
||||||
|
|
||||||
.init.setup : AT(ADDR(.init.setup) - LOAD_OFFSET) {
|
|
||||||
. = ALIGN(16);
|
|
||||||
__setup_start = .;
|
|
||||||
*(.init.setup)
|
|
||||||
__setup_end = .;
|
|
||||||
}
|
|
||||||
|
|
||||||
.initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) {
|
|
||||||
__initcall_start = .;
|
|
||||||
INITCALLS
|
|
||||||
__initcall_end = .;
|
|
||||||
}
|
|
||||||
|
|
||||||
.con_initcall.init : AT(ADDR(.con_initcall.init) - LOAD_OFFSET) {
|
|
||||||
__con_initcall_start = .;
|
|
||||||
*(.con_initcall.init)
|
|
||||||
__con_initcall_end = .;
|
|
||||||
}
|
|
||||||
|
|
||||||
.x86_cpu_dev.init : AT(ADDR(.x86_cpu_dev.init) - LOAD_OFFSET) {
|
|
||||||
__x86_cpu_dev_start = .;
|
|
||||||
*(.x86_cpu_dev.init)
|
|
||||||
__x86_cpu_dev_end = .;
|
|
||||||
}
|
|
||||||
|
|
||||||
SECURITY_INIT
|
|
||||||
|
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
.parainstructions : AT(ADDR(.parainstructions) - LOAD_OFFSET) {
|
.parainstructions : AT(ADDR(.parainstructions) - LOAD_OFFSET) {
|
||||||
__parainstructions = .;
|
__parainstructions = .;
|
||||||
|
Loading…
Reference in New Issue
Block a user