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 @@ -235,15 +235,7 @@ /// Return a rangelist's offset based on an index. The index designates /// an entry in the rangelist table's offset array and is supplied by /// DW_FORM_rnglistx. - llvm::Optional GetRnglistOffset(uint32_t Index) const { - if (!m_rnglist_table) - return llvm::None; - if (llvm::Optional off = m_rnglist_table->getOffsetEntry( - m_dwarf.GetDWARFContext().getOrLoadRngListsData().GetAsLLVM(), - Index)) - return *off + m_ranges_base; - return llvm::None; - } + llvm::Optional GetRnglistOffset(uint32_t Index) const; llvm::Optional GetLoclistOffset(uint32_t Index) { if (!m_loclist_table_header) @@ -291,6 +283,8 @@ return &m_die_array[0]; } + llvm::Optional GetRnglist(); + SymbolFileDWARF &m_dwarf; std::shared_ptr m_dwo; DWARFUnitHeader m_header; 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 @@ -495,6 +495,19 @@ ranges_base, toString(table_or_error.takeError()).c_str()); } +llvm::Optional DWARFUnit::GetRnglist() { + return m_rnglist_table; +} + +llvm::Optional DWARFUnit::GetRnglistOffset(uint32_t Index) const { + if (!GetRnglist()) + return llvm::None; + if (llvm::Optional off = GetRnglist()->getOffsetEntry( + m_dwarf.GetDWARFContext().getOrLoadRngListsData().GetAsLLVM(), Index)) + return *off + m_ranges_base; + return llvm::None; +} + void DWARFUnit::SetStrOffsetsBase(dw_offset_t str_offsets_base) { m_str_offsets_base = str_offsets_base; } @@ -936,11 +949,11 @@ return ranges; } - if (!m_rnglist_table) + if (!GetRnglist()) return llvm::createStringError(errc::invalid_argument, "missing or invalid range list table"); - auto range_list_or_error = m_rnglist_table->findList( + auto range_list_or_error = GetRnglist()->findList( m_dwarf.GetDWARFContext().getOrLoadRngListsData().GetAsLLVM(), offset); if (!range_list_or_error) return range_list_or_error.takeError(); @@ -971,7 +984,7 @@ DWARFUnit::FindRnglistFromIndex(uint32_t index) { if (llvm::Optional offset = GetRnglistOffset(index)) return FindRnglistFromOffset(*offset); - if (m_rnglist_table) + if (GetRnglist()) return llvm::createStringError(errc::invalid_argument, "invalid range list table index %d", index);