x86/linker: add a reloc section to ELF linker script
authorRoger Pau Monne <roger.pau@citrix.com>
Thu, 27 Jun 2019 09:33:33 +0000 (11:33 +0200)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Thu, 27 Jun 2019 17:50:41 +0000 (18:50 +0100)
if the hypervisor has been built with EFI support (ie: multiboot2).
This allows to position the .reloc section correctly in the output
binary.

Note that for the ELF output format the .reloc section is moved before
.bss because the data it contains is read-only, so it belongs with the
other sections containing read-only data.

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

index 98a99444c2e35cdd8f8a147cc881e85c8cb2582f..cee7cf80ddb70b4b4341540b6ddd177b52606962 100644 (file)
@@ -175,6 +175,19 @@ SECTIONS
   } :text
 #endif
 #endif
+
+/*
+ * ELF builds are linked to a fixed virtual address, and in principle
+ * shouldn't have a .reloc section.  However, due to the way EFI support is
+ * currently implemented, retaining the .reloc section is necessary.
+ */
+#if defined(XEN_BUILD_EFI) && !defined(EFI)
+  . = ALIGN(4);
+  DECL_SECTION(.reloc) {
+    *(.reloc)
+  } :text
+#endif
+
   _erodata = .;
 
   . = ALIGN(SECTION_ALIGN);