> Am 22.11.2025 um 00:29 schrieb H.J. Lu <[email protected]>:
>
> On Sat, Nov 22, 2025 at 5:33 AM Florian Weimer <[email protected]> wrote:
>>
>> * Richard Biener:
>>
>>> +/* When the glibc we build against does not have dl_find_object tentatively
>>> + declare the relevant bits of the structure here and use a weak
>>> declaration
>>> + so we can perform a runtime check on its presence. */
>>> +#if !defined(DLFO_STRUCT_HAS_EH_DBASE)
>>
>> I agree with Jakub that this should be restricted to __GLIBC__.
>>
>> This works for the narrow case that _dl_find_object is not available at
>> build time and becomes available at run time. Extending this to make it
>> optional at run time when it was available and build time does not work
>> quite work because BFD ld does not support weak symbol versions (the
>
> If a symbol isn't available at link-time, how can it be versioned? At most,
> some versions for BFD linker will make it with an empty version. Does ld.so
> disallow undefined weak symbols with an empty version?
I suppose if glibc would change the _dl_find_object ABI by providing a new
default version but keeping a compat one the weak symbol would pick up the new
default at runtime as it is not possible to have a weak UNDEF binding to a
specific version?
For our internal purpose the runtime glibc version will stay at known fixed
versions. But we have three, one with _dl_find_object support and two without.
And we have a single libgcc_s1.
Richard.
>
>> version reference is always strong, even if participating symbols are
>> all weak). For us, this limitation ultimately meant that we could not
>> use this approach.
>>
>> Risk of breakage from the duplicated definitions seems fairly low. We'd
>> need to back-data a new ABI with a different structure to 2.34 or older,
>> which seems rather unlikely to happen.
>>
>> Thanks,
>> Florian
>>
>
>
> --
> H.J.