At least GNU ld 2.35 takes this option to (also) mean what newer versions have controllable by --enable-reloc-section. From there being no relocations in check.efi (as we don't pass the option there) we infer that we need to involve mkreloc, we'd end up with two sets of relocations, which clearly isn't going to work. Furthermore the relocations ld emits in this case also aren't usable: For bsp_idt[] we end up with PE_BASE_RELOC_LOW ones, which efi_arch_relocate_image() (deliberately) doesn't know how to deal with. (Related to that is also why we check the number of relocations produced: The linker simply didn't get this right there, yet.)
We also can't add the option to what we use when linking check.efi: That ld version then would produce relocations, but 4 of them (instead of the expected two). That would make us pass --disable-reloc-section, which however only ld 2.36 and newer understand. For such older binutils versions we therefore need to accept the slight inconsistency in DLL characteristics that the earlier commit meant to eliminate. Fixes: f2148773b8ac ("x86/EFI: sanitize DLL characteristics in binary") Signed-off-by: Jan Beulich <jbeul...@suse.com> --- a/xen/arch/x86/arch.mk +++ b/xen/arch/x86/arch.mk @@ -106,7 +106,7 @@ efi-nr-fixups := $(shell LC_ALL=C $(OBJD ifeq ($(efi-nr-fixups),2) MKRELOC := : -EFI_LDFLAGS += --disable-high-entropy-va +EFI_LDFLAGS += --disable-high-entropy-va --dynamicbase else MKRELOC := arch/x86/efi/mkreloc # If the linker produced fixups but not precisely two of them, we need to @@ -117,8 +117,6 @@ EFI_LDFLAGS += --disable-reloc-section endif endif -EFI_LDFLAGS += --dynamicbase - endif # $(XEN_BUILD_PE) export XEN_BUILD_EFI XEN_BUILD_PE