1 //===-- DWARFDebugRanges.h --------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef SymbolFileDWARF_DWARFDebugRanges_h_ 11 #define SymbolFileDWARF_DWARFDebugRanges_h_ 12 13 #include "DWARFDIE.h" 14 #include "SymbolFileDWARF.h" 15 16 #include <map> 17 18 class DWARFDebugRangesBase { 19 public: 20 virtual ~DWARFDebugRangesBase(){}; 21 22 virtual void Extract(SymbolFileDWARF *dwarf2Data) = 0; 23 virtual bool FindRanges(const DWARFUnit *cu, dw_offset_t debug_ranges_offset, 24 DWARFRangeList &range_list) const = 0; 25 }; 26 27 class DWARFDebugRanges final : public DWARFDebugRangesBase { 28 public: 29 DWARFDebugRanges(); 30 31 virtual void Extract(SymbolFileDWARF *dwarf2Data) override; 32 virtual bool FindRanges(const DWARFUnit *cu, dw_offset_t debug_ranges_offset, 33 DWARFRangeList &range_list) const override; 34 35 static void Dump(lldb_private::Stream &s, 36 const lldb_private::DWARFDataExtractor &debug_ranges_data, 37 lldb::offset_t *offset_ptr, dw_addr_t cu_base_addr); 38 39 protected: 40 bool Extract(SymbolFileDWARF *dwarf2Data, lldb::offset_t *offset_ptr, 41 DWARFRangeList &range_list); 42 43 typedef std::map<dw_offset_t, DWARFRangeList> range_map; 44 typedef range_map::iterator range_map_iterator; 45 typedef range_map::const_iterator range_map_const_iterator; 46 range_map m_range_map; 47 }; 48 49 // DWARF v5 .debug_rnglists section. 50 class DWARFDebugRngLists final : public DWARFDebugRangesBase { 51 struct RngListEntry { 52 uint8_t encoding; 53 uint64_t value0; 54 uint64_t value1; 55 }; 56 57 public: 58 void Extract(SymbolFileDWARF *dwarf2Data) override; 59 bool FindRanges(const DWARFUnit *cu, dw_offset_t debug_ranges_offset, 60 DWARFRangeList &range_list) const override; 61 62 protected: 63 bool ExtractRangeList(const lldb_private::DWARFDataExtractor &data, 64 uint8_t addrSize, lldb::offset_t *offset_ptr, 65 std::vector<RngListEntry> &list); 66 67 std::vector<uint64_t> Offsets; 68 std::map<dw_offset_t, std::vector<RngListEntry>> m_range_map; 69 }; 70 71 #endif // SymbolFileDWARF_DWARFDebugRanges_h_ 72