Looks good.
On Fri, Oct 10, 2014 at 10:41 AM, Andrew MacPherson <andrew.m...@gmail.com> wrote: > Ok great, if you're ok with it then I will update that assert to be: > > assert(m_previous.state == eConsistent || (m_previous.state == eAdd && > m_current.state == eDelete)); > > since it would still be invalid (as far as we can tell) to be in there on > a transition from eDelete to eAdd. > > Let me know if that looks okay and I'll push the change. > > On Fri, Oct 10, 2014 at 6:46 PM, Todd Fiala <tfi...@google.com> wrote: > >> Ok that's starting to sound like something we probably wouldn't cover. >> >> So maybe it's like when (in your example) the loader starts processing >> libqmng.so, does the add, then immediately reverses it out as it hadn't >> officially "finished", and then reverses it out. >> >> So it's probably fair to change that assert to asserting it is either >> stable, or if the previous state was an add (for the delete case). In any >> event, the assert as it stands seems not inclusive enough. >> >> I'd be okay with removing that one since we've found a case where it >> doesn't hold. >> >> On Fri, Oct 10, 2014 at 9:30 AM, Andrew MacPherson <andrew.m...@gmail.com >> > wrote: >> >>> 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 <tfi...@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.m...@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 <tfi...@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.m...@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 <tfi...@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.m...@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@cs.uiuc.edu >>>>>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Todd Fiala | Software Engineer | tfi...@google.com >>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Todd Fiala | Software Engineer | tfi...@google.com >>>>>> >>>>>> >>>>> >>>> >>>> >>>> -- >>>> Todd Fiala | Software Engineer | tfi...@google.com >>>> >>>> >>> >> >> >> -- >> Todd Fiala | Software Engineer | tfi...@google.com >> >> > -- Todd Fiala | Software Engineer | tfi...@google.com
_______________________________________________ lldb-dev mailing list lldb-dev@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev