x86: make section delimiter symbols part of their section
Impact: cleanup Move the symbols delimiting a section part of the section (section relative) rather than absolute. This avoids any unexpected gaps between the section-start symbol and the first data in the section, which could be caused by implicit alignment of the section data. It also makes the general form of vmlinux_64.lds.S consistent with vmlinux_32.lds.S. Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> Cc: Yinghai Lu <yinghai@kernel.org> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Signed-off-by: H. Peter Anvin <hpa@zytor.com>
This commit is contained in:
parent
c550033ced
commit
b9719a4d9c
|
@ -29,8 +29,8 @@ SECTIONS
|
|||
{
|
||||
. = __START_KERNEL;
|
||||
phys_startup_64 = startup_64 - LOAD_OFFSET;
|
||||
_text = .; /* Text and read-only data */
|
||||
.text : AT(ADDR(.text) - LOAD_OFFSET) {
|
||||
_text = .; /* Text and read-only data */
|
||||
/* First the code that has to be first for bootstrapping */
|
||||
*(.text.head)
|
||||
_stext = .;
|
||||
|
@ -61,13 +61,13 @@ SECTIONS
|
|||
.data : AT(ADDR(.data) - LOAD_OFFSET) {
|
||||
DATA_DATA
|
||||
CONSTRUCTORS
|
||||
_edata = .; /* End of data section */
|
||||
} :data
|
||||
|
||||
_edata = .; /* End of data section */
|
||||
|
||||
.data.cacheline_aligned : AT(ADDR(.data.cacheline_aligned) - LOAD_OFFSET) {
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
. = ALIGN(CONFIG_X86_L1_CACHE_BYTES);
|
||||
.data.cacheline_aligned : AT(ADDR(.data.cacheline_aligned) - LOAD_OFFSET) {
|
||||
*(.data.cacheline_aligned)
|
||||
}
|
||||
. = ALIGN(CONFIG_X86_INTERNODE_CACHE_BYTES);
|
||||
|
@ -125,29 +125,29 @@ SECTIONS
|
|||
#undef VVIRT_OFFSET
|
||||
#undef VVIRT
|
||||
|
||||
. = ALIGN(THREAD_SIZE); /* init_task */
|
||||
.data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET) {
|
||||
. = ALIGN(THREAD_SIZE); /* init_task */
|
||||
*(.data.init_task)
|
||||
}:data.init
|
||||
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
.data.page_aligned : AT(ADDR(.data.page_aligned) - LOAD_OFFSET) {
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
*(.data.page_aligned)
|
||||
}
|
||||
|
||||
.smp_locks : AT(ADDR(.smp_locks) - LOAD_OFFSET) {
|
||||
/* might get freed after init */
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
__smp_alt_begin = .;
|
||||
__smp_locks = .;
|
||||
.smp_locks : AT(ADDR(.smp_locks) - LOAD_OFFSET) {
|
||||
*(.smp_locks)
|
||||
}
|
||||
__smp_locks_end = .;
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
__smp_alt_end = .;
|
||||
}
|
||||
|
||||
. = ALIGN(PAGE_SIZE); /* Init code and data */
|
||||
__init_begin = .;
|
||||
__init_begin = .; /* paired with __init_end */
|
||||
.init.text : AT(ADDR(.init.text) - LOAD_OFFSET) {
|
||||
_sinittext = .;
|
||||
INIT_TEXT
|
||||
|
@ -159,25 +159,27 @@ SECTIONS
|
|||
__initdata_end = .;
|
||||
}
|
||||
|
||||
.init.setup : AT(ADDR(.init.setup) - LOAD_OFFSET) {
|
||||
. = ALIGN(16);
|
||||
__setup_start = .;
|
||||
.init.setup : AT(ADDR(.init.setup) - LOAD_OFFSET) { *(.init.setup) }
|
||||
*(.init.setup)
|
||||
__setup_end = .;
|
||||
__initcall_start = .;
|
||||
}
|
||||
.initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) {
|
||||
__initcall_start = .;
|
||||
INITCALLS
|
||||
}
|
||||
__initcall_end = .;
|
||||
__con_initcall_start = .;
|
||||
}
|
||||
.con_initcall.init : AT(ADDR(.con_initcall.init) - LOAD_OFFSET) {
|
||||
__con_initcall_start = .;
|
||||
*(.con_initcall.init)
|
||||
}
|
||||
__con_initcall_end = .;
|
||||
__x86_cpu_dev_start = .;
|
||||
.x86_cpu_dev.init : AT(ADDR(.x86_cpu_dev.init) - LOAD_OFFSET) {
|
||||
*(.x86_cpu_dev.init)
|
||||
}
|
||||
.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);
|
||||
|
@ -187,12 +189,12 @@ SECTIONS
|
|||
__parainstructions_end = .;
|
||||
}
|
||||
|
||||
.altinstructions : AT(ADDR(.altinstructions) - LOAD_OFFSET) {
|
||||
. = ALIGN(8);
|
||||
__alt_instructions = .;
|
||||
.altinstructions : AT(ADDR(.altinstructions) - LOAD_OFFSET) {
|
||||
*(.altinstructions)
|
||||
}
|
||||
__alt_instructions_end = .;
|
||||
}
|
||||
.altinstr_replacement : AT(ADDR(.altinstr_replacement) - LOAD_OFFSET) {
|
||||
*(.altinstr_replacement)
|
||||
}
|
||||
|
@ -207,9 +209,11 @@ SECTIONS
|
|||
|
||||
#ifdef CONFIG_BLK_DEV_INITRD
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
.init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) {
|
||||
__initramfs_start = .;
|
||||
.init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) { *(.init.ramfs) }
|
||||
*(.init.ramfs)
|
||||
__initramfs_end = .;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
|
@ -229,20 +233,21 @@ SECTIONS
|
|||
. = ALIGN(PAGE_SIZE);
|
||||
__init_end = .;
|
||||
|
||||
.data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) {
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
__nosave_begin = .;
|
||||
.data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) {
|
||||
*(.data.nosave)
|
||||
} :data.init2 /* use another section data.init2, see PERCPU_VADDR() above */
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
__nosave_end = .;
|
||||
} :data.init2 /* use another section data.init2, see PERCPU_VADDR() above */
|
||||
|
||||
__bss_start = .; /* BSS */
|
||||
.bss : AT(ADDR(.bss) - LOAD_OFFSET) {
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
__bss_start = .; /* BSS */
|
||||
*(.bss.page_aligned)
|
||||
*(.bss)
|
||||
}
|
||||
__bss_stop = .;
|
||||
}
|
||||
|
||||
_end = . ;
|
||||
|
||||
|
|
Loading…
Reference in New Issue