summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.h
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.h')
-rw-r--r--lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.h33
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_
OpenPOWER on IntegriCloud