On Thu, 27 Sep 2018 18:21:13 +0200, Greg Clayton via lldb-commits wrote: > One fix that would work it to make the DWARFDebugInfoEntry* inside the > DWARFDie to be mutable and allow it to "fix" itself when a call is made. So > the flow would be: > > auto CUDie = cu->GetUnitDIEOnly(); > for (auto child = CUDie.GetFirstChild(); .... > > The call to DWARFDie::GetFirstChild() would replace "DWARFDebugInfoEntry > *m_die" with the correct version by tracking if m_die is just the unit die > only by making "DWARFDebugInfoEntry *m_die" into a llvm::PointerIntPair: > > PointerIntPair< DWARFDebugInfoEntry *, 1> m_die; > > > We set the bit to 1 if m_die is just the unit DIE. Then we have an accessor > on DWARFDie that can promote m_die to the full version if needed: > > void DWARFDie::PromoteIfNeeded() { > if (m_die.getInt()) { > m_die.setPointer(m_cu->DIEPtr()); > m_die.setInt(false); > } > }
Thanks for the mail but I believe this issue has been already fixed by: 2/3: Use DWARFBaseDIE as compile-time protection https://reviews.llvm.org/D47276 The assertion-regression of this commit is unrelated to stale pointers. And it has been addressed by now filed: Fix: Assertion failed: (!m_first_die || m_first_die == m_die_array.front()), function ExtractDIEsRWLocked https://reviews.llvm.org/D53255 Or do I miss something? Thanks, Jan _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits