diff --git a/lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.h b/lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.h --- a/lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.h +++ b/lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.h @@ -49,6 +49,9 @@ protected: lldb_private::UniqueCStringMap m_map; + +private: + static bool DWARFUnitContainsDIERef(const DWARFUnit &unit, DIERef die_ref); }; #endif // LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_NAMETODIE_H 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 (DWARFUnitContainsDIERef(unit, die_ref)) { if (!callback(die_ref)) return; } @@ -86,3 +83,11 @@ other.m_map.GetValueAtIndexUnchecked(i)); } } + +bool NameToDIE::DWARFUnitContainsDIERef(const DWARFUnit &unit, DIERef die_ref) { + if (unit.GetSymbolFileDWARF().GetDwoNum() != die_ref.dwo_num()) + return false; + if (unit.GetDebugSection() != die_ref.section()) + return false; + return unit.ContainsDIEOffset(die_ref.die_offset()); +}