diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h @@ -137,6 +137,7 @@ return die_offset >= GetFirstDIEOffset() && die_offset < GetNextUnitOffset(); } + bool ContainsDIERef(DIERef die_ref) const; dw_offset_t GetFirstDIEOffset() const { return GetOffset() + GetHeaderByteSize(); } diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp @@ -967,3 +967,11 @@ return llvm::createStringError(errc::invalid_argument, "missing or invalid range list table"); } + +bool DWARFUnit::ContainsDIERef(DIERef die_ref) const { + if (m_dwarf.GetDwoNum() != die_ref.dwo_num()) + return false; + if (m_section != die_ref.section()) + return false; + return ContainsDIEOffset(die_ref.die_offset()); +} diff --git a/lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp b/lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp --- a/lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp @@ -50,10 +50,7 @@ const uint32_t size = m_map.GetSize(); for (uint32_t i = 0; i < size; ++i) { const DIERef &die_ref = m_map.GetValueAtIndexUnchecked(i); - if (unit.GetSymbolFileDWARF().GetDwoNum() == die_ref.dwo_num() && - unit.GetDebugSection() == die_ref.section() && - unit.GetOffset() <= die_ref.die_offset() && - die_ref.die_offset() < unit.GetNextUnitOffset()) { + if (unit.ContainsDIERef(die_ref)) { if (!callback(die_ref)) return; }