mirror of
https://github.com/adulau/aha.git
synced 2025-01-05 15:43:22 +00:00
x86, vmlinux.lds: unify percpu
32 bit: - move __init_end outside the .bss output section It really did not belong in there [ Impact: 64-bit: cleanup, 32-bit: refactor 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-12-git-send-email-sam@ravnborg.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
bf6a57418d
commit
9d16e78318
3 changed files with 30 additions and 32 deletions
|
@ -330,6 +330,36 @@ SECTIONS
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(CONFIG_X86_64) && defined(CONFIG_SMP)
|
||||||
|
/*
|
||||||
|
* percpu offsets are zero-based on SMP. PERCPU_VADDR() changes the
|
||||||
|
* output PHDR, so the next output section - __data_nosave - should
|
||||||
|
* start another section data.init2. Also, pda should be at the head of
|
||||||
|
* percpu area. Preallocate it and define the percpu offset symbol
|
||||||
|
* so that it can be accessed as a percpu variable.
|
||||||
|
*/
|
||||||
|
. = ALIGN(PAGE_SIZE);
|
||||||
|
PERCPU_VADDR(0, :percpu)
|
||||||
|
#else
|
||||||
|
PERCPU(PAGE_SIZE)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
. = ALIGN(PAGE_SIZE);
|
||||||
|
/* freed after init ends here */
|
||||||
|
__init_end = .;
|
||||||
|
|
||||||
|
#ifdef CONFIG_X86_64
|
||||||
|
.data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) {
|
||||||
|
. = ALIGN(PAGE_SIZE);
|
||||||
|
__nosave_begin = .;
|
||||||
|
*(.data.nosave)
|
||||||
|
. = ALIGN(PAGE_SIZE);
|
||||||
|
__nosave_end = .;
|
||||||
|
} :data.init2
|
||||||
|
/* use another section data.init2, see PERCPU_VADDR() above */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_X86_32
|
#ifdef CONFIG_X86_32
|
||||||
# include "vmlinux_32.lds.S"
|
# include "vmlinux_32.lds.S"
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -1,11 +1,5 @@
|
||||||
PERCPU(PAGE_SIZE)
|
|
||||||
|
|
||||||
. = ALIGN(PAGE_SIZE);
|
|
||||||
/* freed after init ends here */
|
|
||||||
|
|
||||||
/* BSS */
|
/* BSS */
|
||||||
.bss : AT(ADDR(.bss) - LOAD_OFFSET) {
|
.bss : AT(ADDR(.bss) - LOAD_OFFSET) {
|
||||||
__init_end = .;
|
|
||||||
__bss_start = .;
|
__bss_start = .;
|
||||||
*(.bss.page_aligned)
|
*(.bss.page_aligned)
|
||||||
*(.bss)
|
*(.bss)
|
||||||
|
|
|
@ -1,29 +1,3 @@
|
||||||
#ifdef CONFIG_SMP
|
|
||||||
/*
|
|
||||||
* percpu offsets are zero-based on SMP. PERCPU_VADDR() changes the
|
|
||||||
* output PHDR, so the next output section - __data_nosave - should
|
|
||||||
* start another section data.init2. Also, pda should be at the head of
|
|
||||||
* percpu area. Preallocate it and define the percpu offset symbol
|
|
||||||
* so that it can be accessed as a percpu variable.
|
|
||||||
*/
|
|
||||||
. = ALIGN(PAGE_SIZE);
|
|
||||||
PERCPU_VADDR(0, :percpu)
|
|
||||||
#else
|
|
||||||
PERCPU(PAGE_SIZE)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
. = ALIGN(PAGE_SIZE);
|
|
||||||
__init_end = .;
|
|
||||||
|
|
||||||
.data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) {
|
|
||||||
. = ALIGN(PAGE_SIZE);
|
|
||||||
__nosave_begin = .;
|
|
||||||
*(.data.nosave)
|
|
||||||
. = ALIGN(PAGE_SIZE);
|
|
||||||
__nosave_end = .;
|
|
||||||
} :data.init2
|
|
||||||
/* use another section data.init2, see PERCPU_VADDR() above */
|
|
||||||
|
|
||||||
.bss : AT(ADDR(.bss) - LOAD_OFFSET) {
|
.bss : AT(ADDR(.bss) - LOAD_OFFSET) {
|
||||||
. = ALIGN(PAGE_SIZE);
|
. = ALIGN(PAGE_SIZE);
|
||||||
__bss_start = .; /* BSS */
|
__bss_start = .; /* BSS */
|
||||||
|
|
Loading…
Reference in a new issue