On Mon, 24 Nov 2025, Florian Weimer wrote: > * H. J. Lu: > > > 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? > > The problem is that if it is available at link time, the GLIBC_2.35 > symbol version reference is always strong, even if the _dl_find_object > symbol that triggers its create is weak. We have VER_FLG_WEAK, and I > think glibc tries to handle it (but we don't test it today). However > BFD ld never sets it. > > Due to this binutils limitation, it's not possible to add > > #pragma weak _dl_find_object > > and build on glibc 2.35+, and run on earlier versions (with an > appropriate null check on _dl_find_object).
Ah, but build against new, run on older isn't a setup that I'd expect to work anyway. Richard. -- Richard Biener <[email protected]> SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg, Germany; GF: Jochen Jaser, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)
