|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH for-4.22?] x86/EFI: arrange for non-discardable .reloc in xen.efi
On Tue, Jun 16, 2026 at 06:17:54PM +0200, Jan Beulich wrote: > 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. > > Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> This seems to be enough to indeed make xen.efi .reloc non-discardable with binutils 2.46. Acked-by: Marek Marczykowski-Górecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx> > --- > With a new enough linker, $(dot-target).2r.o could be leveraged instead: > $(dot-target).2r.S is going to be empty (or if it's not, the .reloc > section there would already have the wanted property), so instead of > adding the new relocs-empty.S we could also insert the section directive > there. Overall that seemed more convoluted to me, though. > > --- 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 > --- 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 > --- /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 -- Best Regards, Marek Marczykowski-Górecki Invisible Things Lab Attachment:
signature.asc
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |