On 16/06/2025 7:27 am, Jan Beulich wrote:
> To expand on my earlier suggestion (ab)using the "efi" global: With
> the linker script having this
>
> #ifdef EFI
> .reloc ALIGN(4) : {
> __base_relocs_start = .;
> *(.reloc)
> __base_relocs_end = .;
> }
> #elif defined(XEN_BUILD_EFI)
> /*
> * Due to the way EFI support is currently implemented, these two symbols
> * need to be defined. Their precise values shouldn't matter (the consuming
> * function doesn't get called), but to be on the safe side both values
> would
> * better match. Of course the need to be reachable by the relocations
> * referencing them.
> */
> PROVIDE(__base_relocs_start = .);
> PROVIDE(__base_relocs_end = .);
> #else
> efi = .;
> #endif
>
> where only the #if applies to xen.efi, can't we (ab)use the combination of the
> other two symbols here to decide between xen.efi vs xen.gz?
> __base_relocs_{start,efi} won't possibly be equal for xen.efi, except in an
> extremely theoretical situation (and we could cover for that case by an ASSERT
> in the linker script). Pseudo code:
>
> #ifdef XEN_BUILD_EFI
> if ( __base_relocs_start != __base_relocs_end )
> {
> ...
> }
> #endif
>
> IOW that #if could simply replace the CONFIG_X86 one that's there right now.
That's horrifying. Also you can't include efi-boot.h to get the
declarations.
But given that you are adamant that the (...) in there containing a
CodeView check is unacceptable to have, why does wrapping it in yet
another conditional make it ok?
~Andrew