x86/link: Don't merge .init.text and .init.data
authorAndrew Cooper <andrew.cooper3@citrix.com>
Sat, 11 Nov 2017 19:08:37 +0000 (19:08 +0000)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Fri, 2 Mar 2018 12:46:48 +0000 (12:46 +0000)
c/s 1308f0170c merged .init.text and .init.data, because EFI might properly
write-protect r/o sections.

However, that change makes xen-syms unusable for disassembly analysis.  In
particular, searching for indirect branches as part of the SP2/Spectre
mitigation series.

As the merging isn't necessary for ELF targets at all, make it conditional on
the EFI side of the build.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
xen/arch/x86/xen.lds.S

index 25c6cbcedf9f3a0dc5c897be464feef481d4fb71..e9f2ecd9fb2a0ad9806c9414c54c595ecc774ba1 100644 (file)
@@ -172,7 +172,11 @@ SECTIONS
   __2M_init_start = .;         /* Start of 2M superpages, mapped RWX (boot only). */
   . = ALIGN(PAGE_SIZE);             /* Init code and data */
   __init_begin = .;
+#ifdef EFI /* EFI wants to merge all of .init.*  ELF doesn't. */
   DECL_SECTION(.init) {
+#else
+  DECL_SECTION(.init.text) {
+#endif
        _sinittext = .;
        *(.init.text)
        /*
@@ -183,7 +187,12 @@ SECTIONS
        *(.altinstr_replacement)
        _einittext = .;
 
+#ifdef EFI /* EFI wants to merge all of .init.*  ELF doesn't. */
        . = ALIGN(SMP_CACHE_BYTES);
+#else
+  } :text
+  DECL_SECTION(.init.data) {
+#endif
 
        *(.init.rodata)
        *(.init.rodata.rel)