]>
x86/EFI: restrict use of --dynamicbase
authorJan Beulich <jbeulich@suse.com>
Tue, 1 Jul 2025 09:24:47 +0000 (11:24 +0200)
committerJan Beulich <jbeulich@suse.com>
Tue, 1 Jul 2025 09:24:47 +0000 (11:24 +0200)
commit6960bf546e7faf341aae762846e58b73ebeae192
tree2eae4f0828df0adcc7228e9281f1dc97727b40c9
parent86da14178db4f40b5652e96c332d9858ca23df06
x86/EFI: restrict use of --dynamicbase

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 <jbeulich@suse.com>
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
xen/arch/x86/arch.mk