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

Reply via email to