mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
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:
1 parent
36c672b559
commit
b4cd59fea0
1 file changed
+32
-31
+32
-31
@@ -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);
|
||||
|
||||