[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen staging] x86/EFI: arrange for non-discardable .reloc in xen.efi



commit 00a659a26c8b92cc47622fc75b9acb8fdf34fa5e
Author:     Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Wed Jun 24 15:56:20 2026 +0200
Commit:     Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Wed Jun 24 15:56:20 2026 +0200

    x86/EFI: arrange for non-discardable .reloc in xen.efi
    
    Loaders respecting IMAGE_SCN_MEM_DISCARDABLE would not load such sections,
    yet we need to access it ourselves when switching out of "physical mode".
    Leverage behavior new to GNU ld 2.46: Any contribution to .reloc which
    doesn't have the discardable flag set (which cannot even be expressed in
    ELF) will yield the output section also non-discardable.
    
    Since for intermediate binaries we don't care about section attributes,
    link in the new object only on the final linking pass.
    
    Reported-by: Yann Sionneau <yann.sionneau@xxxxxxxxxx>
    Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
    Acked-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
    Acked-by: Marek Marczykowski-Górecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx>
    Release-Acked-by: Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx>
---
 xen/arch/x86/Makefile           | 7 ++++---
 xen/arch/x86/efi/Makefile       | 2 +-
 xen/arch/x86/efi/relocs-empty.S | 8 ++++++++
 3 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index 47dd6c50fe..c4c38516a7 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -196,7 +196,8 @@ note_file_option ?= $(note_file)
 
 extra-$(XEN_BUILD_PE) += efi.lds
 ifeq ($(XEN_BUILD_PE),y)
-$(TARGET).efi: $(objtree)/prelink.o $(note_file) $(obj)/efi.lds 
$(obj)/efi/relocs-dummy.o $(obj)/efi/mkreloc
+$(TARGET).efi: $(obj)/efi/relocs-dummy.o $(obj)/efi/relocs-empty.o 
$(obj)/efi/mkreloc
+$(TARGET).efi: $(objtree)/prelink.o $(note_file) $(obj)/efi.lds
 ifeq ($(CONFIG_DEBUG_INFO),y)
        $(if $(filter --strip-debug,$(EFI_LDFLAGS)),echo,:) "Will strip debug 
info from $(@F)"
 endif
@@ -227,7 +228,7 @@ endif
        $(MAKE) $(build)=$(@D) .$(@F).2r.o .$(@F).2s.o
        $(call compare-symbol-tables, $(dot-target).1r.o, $(dot-target).2r.o)
        $(call compare-symbol-tables, $(dot-target).1s.o, $(dot-target).2s.o)
-       $(LD) $(call EFI_LDFLAGS,$(VIRT_BASE)) -T $(obj)/efi.lds $< \
+       $(LD) $(call EFI_LDFLAGS,$(VIRT_BASE)) -T $(obj)/efi.lds $< 
$(obj)/efi/relocs-empty.o \
              $(dot-target).2r.o $(dot-target).2s.o $(orphan-handling-y) \
              $(note_file_option) -o $@
        $(NM) -pa --format=sysv $@ \
@@ -247,7 +248,7 @@ $(TARGET).efi: FORCE
 endif
 
 # These should already have been rebuilt when building the prerequisite of 
"prelink.o"
-$(obj)/efi/buildid.o $(obj)/efi/relocs-dummy.o: ;
+$(obj)/efi/buildid.o $(obj)/efi/relocs-dummy.o $(obj)/efi/relocs-empty.o: ;
 
 .PHONY: include
 include: $(objtree)/arch/x86/include/asm/asm-macros.h
diff --git a/xen/arch/x86/efi/Makefile b/xen/arch/x86/efi/Makefile
index 3e88f552d2..ad6cb6100e 100644
--- a/xen/arch/x86/efi/Makefile
+++ b/xen/arch/x86/efi/Makefile
@@ -17,5 +17,5 @@ obj-y := common-stub.o stub.o
 obj-$(XEN_BUILD_EFI) := $(filter-out %.init.o,$(EFIOBJ-y))
 obj-bin-$(XEN_BUILD_EFI) := $(filter %.init.o,$(EFIOBJ-y))
 obj-bin-y += mbi2.init.o
-extra-$(XEN_BUILD_EFI) += buildid.o relocs-dummy.o
+extra-$(XEN_BUILD_EFI) += buildid.o relocs-dummy.o relocs-empty.o
 nocov-$(XEN_BUILD_EFI) += stub.o
diff --git a/xen/arch/x86/efi/relocs-empty.S b/xen/arch/x86/efi/relocs-empty.S
new file mode 100644
index 0000000000..991bf2ca93
--- /dev/null
+++ b/xen/arch/x86/efi/relocs-empty.S
@@ -0,0 +1,8 @@
+/*
+ * Empty .reloc section, simply to indicate to GNU ld that the output .reloc
+ * section in xen.efi should not be marked IMAGE_SCN_MEM_DISCARDABLE.  This
+ * requires GNU ld 2.46 or newer to actually be understood in the intended way.
+ */
+
+       .section .reloc, "a", @progbits
+       .balign 4
--
generated by git-patchbot for /home/xen/git/xen.git#staging



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.