[lldb-dev] Assertion failure in DYLDRendezvous::UpdateSOEntries()

Andrew MacPherson andrew.macp at gmail.com
Fri Oct 10 09:30:42 PDT 2014


I ran everything with LD_DEBUG=all to see what was being loaded around the
assertion and tracked it down to a dlopen() on a library that exists but
that has unmet dependencies of its own. Writing a trivial C program causes
the same assertion failure:

#include <dlfcn.h>
int main()
{
  dlopen("./libqmng.so", RTLD_NOW);
  return 0;
}

Where "ldd libqmng.so" gives:

  linux-vdso.so.1 =>  (0x00007fffe61fe000)
  libmng.so.1 => not found
  ...

So it looks like this may be a valid transition on a failed dlopen() call?


On Fri, Oct 10, 2014 at 5:12 PM, Todd Fiala <tfiala at google.com> wrote:

> >  I'm not sure if this is a valid transition or not
>
> I'm not sure yet either - can you try another scenario and see if you're
> consistently hitting that?  (I mean without Maya --- are you trying to
> debug plugins?)  If you are doing some kind of plugin that gets dynamically
> loaded, can you write a bare-bones exe that loads a bare-bones shared
> library (.so) manually and see if you hit the same issue on that?  I'm just
> looking to help isolate the scenario.
>
> The other thing that would be interesting would be to know if maybe there
> is an exec (essentially executing another exe) happening in between?  If
> that was the case, there might be an issue where a clean sweep call to
> reset state isn't doing the right thing.  You might see more info on exec
> behavior with 'log enable lldb process'.
>
> Let me know how that goes.
>
> On Fri, Oct 10, 2014 at 7:56 AM, Andrew MacPherson <andrew.macp at gmail.com>
> wrote:
>
>> I don't see anything very interesting in the dyld log but it looks like
>> we're hitting the breakpoint at
>> DynamicLoaderPOSIXDYLD::RendezvousBreakpointHit() where its rendezvous
>> state is first eAdd and then hitting it again and the state is eDelete
>> without transitioning to eConsistent between eAdd and eDelete. I've never
>> looked at this runtime linker stuff before so I'm not sure if this is a
>> valid transition or not, this is what's causing the assertion failure
>> though. Any idea?
>>
>> Cheers,
>> Andrew
>>
>> On Thu, Oct 9, 2014 at 5:06 PM, Todd Fiala <tfiala at google.com> wrote:
>>
>>> I just took a peek at the code around there.  It's not immediately clear
>>> whether the assert is entirely useful, but I think it is intending to guard
>>> against adding new dynamic library info when the previous state of the data
>>> structures are not settled.
>>>
>>> I think a good starting point for you would be to enable 'log enable
>>> lldb dyld' and see what kind of activity is showing up for the existing log
>>> lines.  Maybe post that here if that doesn't help.
>>>
>>> I probably wouldn't remove the assert until we understand the root issue
>>> since the assert seems reasonable.
>>>
>>> Worst case if this doesn't get you further, you can add some if code
>>> around the condition and stick a breakpoint in the unexpected case so you
>>> can break the debugger in action and inspect what's going on.
>>>
>>> I hope that gets you started!
>>>
>>> -Todd
>>>
>>> On Thu, Oct 9, 2014 at 7:49 AM, Andrew MacPherson <andrew.macp at gmail.com
>>> > wrote:
>>>
>>>> Hi Todd,
>>>>
>>>> I just backed out your change and the behaviour remained the same. When
>>>> I say it's been awhile since I rebuilt though the last build I have around
>>>> is from June and it doesn't assert there. Has the default assertion
>>>> behaviour changed to enabled by default? I'm building with "cmake -G Ninja
>>>> ..".
>>>>
>>>> In fact checking the June build I don't get an assertion failure (I
>>>> assume they're disabled) but the values do differ and I would get one if
>>>> they were enabled. So it looks like this issue may have been around for
>>>> awhile.
>>>>
>>>> I can investigate further if you have any pointers around what I might
>>>> want to look for.
>>>>
>>>> Cheers,
>>>> Andrew
>>>>
>>>>
>>>> On Thu, Oct 9, 2014 at 3:30 PM, Todd Fiala <tfiala at google.com> wrote:
>>>>
>>>>> I did a POSIX Dynamic Loader change yesterday.  It might be causing
>>>>> this (not obvious yet, but could be.)  r219371.  If you're in a position to
>>>>> do a test of your run with that one change reverted out, and if that fixes
>>>>> it, I can yank out that change.
>>>>>
>>>>> Ideally I'd love to isolate if that is the cause of the changed
>>>>> behavior.
>>>>>
>>>>> -Todd
>>>>>
>>>>> On Thu, Oct 9, 2014 at 4:24 AM, Andrew MacPherson <
>>>>> andrew.macp at gmail.com> wrote:
>>>>>
>>>>>> I just compiled the latest LLDB HEAD on Linux 64-bit and am seeing an
>>>>>> assertion failure on launch when debugging a specific application (Autodesk
>>>>>> maya):
>>>>>>
>>>>>> lldb:
>>>>>> ../tools/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp:206:
>>>>>> bool DYLDRendezvous::UpdateSOEntries(): Assertion `m_previous.state ==
>>>>>> eConsistent' failed.
>>>>>>
>>>>>> It's been awhile since I've rebuilt from HEAD so not sure when this
>>>>>> may have been introduced and simply commenting out the assertion appears to
>>>>>> run fine.
>>>>>>
>>>>>> Does anyone know if this assertion is still relevant and if so have
>>>>>> any tips on where I should look to figure out what's happening?
>>>>>>
>>>>>> Thanks,
>>>>>> Andrew
>>>>>>
>>>>>> _______________________________________________
>>>>>> lldb-dev mailing list
>>>>>> lldb-dev at cs.uiuc.edu
>>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Todd Fiala | Software Engineer | tfiala at google.com
>>>>>
>>>>>
>>>>
>>>
>>>
>>> --
>>> Todd Fiala | Software Engineer | tfiala at google.com
>>>
>>>
>>
>
>
> --
> Todd Fiala | Software Engineer | tfiala at google.com
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20141010/79df3fa1/attachment.html>


More information about the lldb-dev mailing list