diff options
Diffstat (limited to 'lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.h')
-rw-r--r-- | lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.h | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.h b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.h index e239bc54add..b346d9291a4 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.h +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.h @@ -15,18 +15,26 @@ #include <map> -class DWARFDebugRanges { +class DWARFDebugRangesBase { +public: + virtual ~DWARFDebugRangesBase(){}; + + virtual void Extract(SymbolFileDWARF *dwarf2Data) = 0; + virtual bool FindRanges(const DWARFUnit *cu, dw_offset_t debug_ranges_offset, + DWARFRangeList &range_list) const = 0; +}; + +class DWARFDebugRanges final : public DWARFDebugRangesBase { public: DWARFDebugRanges(); - virtual ~DWARFDebugRanges(); - virtual void Extract(SymbolFileDWARF *dwarf2Data); + + virtual void Extract(SymbolFileDWARF *dwarf2Data) override; + virtual bool FindRanges(const DWARFUnit *cu, dw_offset_t debug_ranges_offset, + DWARFRangeList &range_list) const override; static void Dump(lldb_private::Stream &s, const lldb_private::DWARFDataExtractor &debug_ranges_data, lldb::offset_t *offset_ptr, dw_addr_t cu_base_addr); - bool FindRanges(dw_addr_t debug_ranges_base, - dw_offset_t debug_ranges_offset, - DWARFRangeList &range_list) const; protected: bool Extract(SymbolFileDWARF *dwarf2Data, lldb::offset_t *offset_ptr, @@ -39,16 +47,25 @@ protected: }; // DWARF v5 .debug_rnglists section. -class DWARFDebugRngLists : public DWARFDebugRanges { +class DWARFDebugRngLists final : public DWARFDebugRangesBase { + struct RngListEntry { + uint8_t encoding; + uint64_t value0; + uint64_t value1; + }; + public: void Extract(SymbolFileDWARF *dwarf2Data) override; + bool FindRanges(const DWARFUnit *cu, dw_offset_t debug_ranges_offset, + DWARFRangeList &range_list) const override; protected: bool ExtractRangeList(const lldb_private::DWARFDataExtractor &data, uint8_t addrSize, lldb::offset_t *offset_ptr, - DWARFRangeList &list); + std::vector<RngListEntry> &list); std::vector<uint64_t> Offsets; + std::map<dw_offset_t, std::vector<RngListEntry>> m_range_map; }; #endif // SymbolFileDWARF_DWARFDebugRanges_h_ |