x86: reorder .data and .init when linking

In preparation for using superpage mappings, .data and .bss will both want to
be mapped as read-write.  By making them adjacent, they can share the same
superpage and will not require superpage alignment between themselves.

While making this change, fix a latent alignment bug whereby the alignment for
.bss.stack_aligned was in .init.  __init_end only needs page alignment (due to
being reclaimed after boot), while .bss.stack_aligned really does needs
STACK_SIZE alignment.

Suggested-by: Jan Beulich <jbeulich@suse.com>
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
Andrew Cooper authored and Jan Beulich committed 2016-02-25 13:06:44 +01:00
1 parent 36c672b559
commit b4cd59fea0
1 file changed
+32 -31
+32 -31
View File
@@ -74,36 +74,6 @@ SECTIONS
#endif
} :text
. = ALIGN(SMP_CACHE_BYTES);
.data.read_mostly : {
/* Exception table */
__start___ex_table = .;
*(.ex_table)
__stop___ex_table = .;
/* Pre-exception table */
__start___pre_ex_table = .;
*(.ex_table.pre)
__stop___pre_ex_table = .;
*(.data.read_mostly)
. = ALIGN(8);
__start_schedulers_array = .;
*(.data.schedulers)
__end_schedulers_array = .;
*(.data.rel.ro)
*(.data.rel.ro.*)
} :text
.data : { /* Data */
. = ALIGN(PAGE_SIZE);
*(.data.page_aligned)
*(.data)
*(.data.rel)
*(.data.rel.*)
CONSTRUCTORS
} :text
. = ALIGN(PAGE_SIZE); /* Init code and data */
__init_begin = .;
.init.text : {
@@ -164,10 +134,41 @@ SECTIONS
*(.xsm_initcall.init)
__xsm_initcall_end = .;
} :text
. = ALIGN(STACK_SIZE);
. = ALIGN(PAGE_SIZE);
__init_end = .;
. = ALIGN(SMP_CACHE_BYTES);
.data.read_mostly : {
/* Exception table */
__start___ex_table = .;
*(.ex_table)
__stop___ex_table = .;
/* Pre-exception table */
__start___pre_ex_table = .;
*(.ex_table.pre)
__stop___pre_ex_table = .;
*(.data.read_mostly)
. = ALIGN(8);
__start_schedulers_array = .;
*(.data.schedulers)
__end_schedulers_array = .;
*(.data.rel.ro)
*(.data.rel.ro.*)
} :text
.data : { /* Data */
. = ALIGN(PAGE_SIZE);
*(.data.page_aligned)
*(.data)
*(.data.rel)
*(.data.rel.*)
CONSTRUCTORS
} :text
.bss : { /* BSS */
. = ALIGN(STACK_SIZE);
__bss_start = .;
*(.bss.stack_aligned)
. = ALIGN(PAGE_SIZE);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.