mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
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@vates.tech> Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Roger Pau Monné <roger.pau@citrix.com> Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> Release-Acked-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
This commit is contained in:
1 parent
d42ace6029
commit
00a659a26c
3 files changed
+13
-4
No files matched your search
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||