[lldb-dev] Assert in DYLDRendezvous::UpdateSOEntries

Michael Sartain mikesart at gmail.com
Thu Jun 13 18:50:30 PDT 2013


I just hit the below assert on line 138 stepping over a dlclose().

120| bool
121| DYLDRendezvous::UpdateSOEntries()
122| {
123|     SOEntry entry;
124|
125|     if (m_current.map_addr == 0)
126|         return false;
127|
128|     // When the previous and current states are consistent this is the
first
129|     // time we have been asked to update.  Just take a snapshot of the
currently
130|     // loaded modules.
131|     if (m_previous.state == eConsistent && m_current.state ==
eConsistent)
132|         return TakeSnapshot(m_soentries);
133|
134|     // If we are about to add or remove a shared object clear out the
current
135|     // state and take a snapshot of the currently loaded images.
136|     if (m_current.state == eAdd || m_current.state == eDelete)
137|     {
138+>        assert(m_previous.state == eConsistent);
139|         m_soentries.clear();
140|         m_added_soentries.clear();
141|         m_removed_soentries.clear();
142|         return TakeSnapshot(m_soentries);
143|     }

It's called by this code in DYLDRendezvous::Resolve():

106|     // The rendezvous was successfully read.  Update our internal
state.
107|     m_rendezvous_addr = info_addr;
108|     m_previous = m_current;
109|     m_current = info;
110|
111+>    return UpdateSOEntries();

m_previous is being set to m_current and both are eDelete now, but that
assert above is claiming it should be eConsistent.

Is this a bogus assert, or is the Resolve() function messing with
m_previous when it shouldn't be?
 -Mike
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20130613/99fcb681/attachment.html>


More information about the lldb-dev mailing list