On 24.07.2025 16:07, Yann Sionneau wrote: > xen.efi PE does not boot when loaded from shim or some patched > downstream grub2. > > What happens is the bootloader would honour the MEM_DISCARDABLE > flag of the .reloc section meaning it would not load its content > into memory. > > But Xen is parsing the .reloc section content twice at boot: > * https://elixir.bootlin.com/xen/v4.20.1/source/xen/common/efi/boot.c#L1362 > * > https://elixir.bootlin.com/xen/v4.20.1/source/xen/arch/x86/efi/efi-boot.h#L237 > > Therefore it would crash with the following message: > "Unsupported relocation type" as reported there: > > * https://github.com/QubesOS/qubes-issues/issues/8206#issuecomment-2619048838 > * > https://lore.kernel.org/xen-devel/7e039262-1f54-46e1-8f70-ac3f03607...@suse.com/T/#me122b9e6c27cd98db917da2c9f67e74a2c6ad7a5 > > This commit adds a small C host tool named keeprelocs > that is called after xen.efi is produced by the build system > in order to remove this bit from its .reloc section header. > > Signed-off-by: Yann Sionneau <yann.sionn...@vates.tech>
So I found a way to deal with this at the linker side, without any new command line options. Behavior is solely driven by the attributes of any incoming .reloc sections (of which there would be none by default, retaining original behavior). The important patch is [1], but at least the first patch of the series [2] would in most cases also be wanted/needed (patch 04 is obviously a mechanical prereq for the main patch). Need for other of the prereqs there depends on the scope and purpose of one's binutils build(s). Jan [1] https://sourceware.org/pipermail/binutils/2025-August/143153.html [2] https://sourceware.org/pipermail/binutils/2025-August/143141.html