* Jason Merrill:

> On 6/28/25 3:17 PM, Florian Weimer wrote:
>> * Jason Merrill:
>> 
>>> Since r10-6069[1] we control the call to __cxa_finalize with
>>> DEFAULT_USE_CXA_ATEXIT, so there's no need to also declare it as a weak
>>> reference; if the target has __cxa_atexit, it must also have __cxa_finalize.

>> I expect that most targets do not need __cxa_finalize.  They can run
>> the registered destructors directly, without waiting for a call to
>> __cxa_finalize.
>
> AFAICT glibc still uses __cxa_finalize to run destructors on dlclose;
> at least that's what its comment says.

Yes, but for most target processors, there is a variety of targets which
don't do this (no dlclose …), hence “most targets” is still true.
Maybe. 8-)

>> I think with your patch, libc will is always linked in as well,
>> assuming that it's the source of the __cxa_finalize definition.
>
> True, so that's not a difference for __cxa_atexit targets.

Existing targets that reuse the glibc toolchain will have to do
something about __cxa_finalize after your change goes in, though.

>> The difference between the --push-state solution and the patch is that
>> on glibc-like targets, a conditional branch during startup is avoided.
>> And it will be necessary to link with --nostartfiles in more cases (or
>> provide a dummy definition of __cxa_finalize).
>
> Or properly configure the compiler with --disable-__cxa_atexit.
>
> The point of my patch is that this should be (and already halfway is)
> a configure-time choice, not something that can change from one TU to
> another.

I'm not sure if that's what our users expect.  Common practice is to use
*-linux-gnu targets to build bootloaders, kernels and whatnot using the
same toolchain, and not create a separate *-none target with different
configure options.  I think that's … not great for full libc targets
(where the toolchain may end up supporting GNU-style symbol versions,
but the dynamic linker does not).  But for more limited bootloader-type
scenarios (no full libc, no dynamic linking), it evidently works quite
well so far.

Thanks,
Florian

Reply via email to