Re: __cxa_thread_call_dtors: dtr 0x........ from unloaded dso, skipping

From: Willem Jan Withagen <wjw_at_digiware.nl>
Date: Thu, 29 Jun 2023 11:52:52 UTC
On 29-6-2023 12:37, Dimitry Andric wrote:
> On 29 Jun 2023, at 12:25, Willem Jan Withagen <wjw@digiware.nl> wrote:
>> On 26-6-2023 17:38, Dimitry Andric wrote:
>>> On 26 Jun 2023, at 17:29, Bjoern A. Zeeb <bzeeb-lists@lists.zabbadoz.net> wrote:
>>>> On Mon, 26 Jun 2023, Dimitry Andric wrote:
>>>>
>>>>> On 26 Jun 2023, at 17:00, Bjoern A. Zeeb <bzeeb-lists@lists.zabbadoz.net> wrote:
>>>>>> while building world and current I see a lot of:
>>>>>>
>>>>>> __cxa_thread_call_dtors: dtr 0x...... from unloaded dso, skipping
>>>>>>
>>>>>> Can anyone shed light on that?
>>>>> You need (thanks to Kostik):
>>>>> https://cgit.freebsd.org/src/commit/?id=42ceab3ea1a997db93b65404be0ee4b17b5382d7
>>>>>
>>>>> Build libc and install it, then the messages should disappear.
>>>> Great!  Basically update world and it'll go.
>>>> Do we add an UPDATING note for this or do we consider it developer noise?
>>> I think the message has been there for a long time, but was not often
>>> noticed. It happened when the buildworld bootstrap decides to build a
>>> static bootstrap lld ("SYSTEM_LINKER: libclang will be built for
>>> bootstrapping a cross-linker"), so usually when lld's version is bumped.
>>> And that is because lld is one of the few threaded build tools in the
>>> tree.
>>>
>>> The messages themselves are harmless and can be ignored. Feel free to
>>> add an UPDATING note to that effect, otherwise worried users might think
>>> something is off. :)
>> Actually I had that in my Ceph-ports as well, and chose to ignore it....
>> Looked into the difference between FreeBSD and Linux.
>> Linux prevents that message by counting the number of loads, and only unloads
>> when the counter hits zero. FreeBSD just seems to unload, and report illegal access.
> There is no "loading" and "unloading" going on, since this is about a
> static executable. What happened was that __cxa_thread_call_dtors() was
> giving a misleading message, because _rtld_addr_phdr() always returned
> 0. Kostik has now made it so _rtld_addr_phdr() does the right thing for
> static executables.

So the "feature" I described is still in there?
Any chance of that getting fixed?

--WjW