LLDB  mainline
DWARFDebugRanges.h
Go to the documentation of this file.
1 //===-- DWARFDebugRanges.h --------------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef SymbolFileDWARF_DWARFDebugRanges_h_
10 #define SymbolFileDWARF_DWARFDebugRanges_h_
11 
12 #include "DWARFDIE.h"
13 #include "SymbolFileDWARF.h"
14 
15 #include <map>
16 
18 public:
19  virtual ~DWARFDebugRangesBase(){};
20 
21  virtual void Extract(SymbolFileDWARF *dwarf2Data) = 0;
22  virtual bool FindRanges(const DWARFUnit *cu, dw_offset_t debug_ranges_offset,
23  DWARFRangeList &range_list) const = 0;
24  virtual uint64_t GetOffset(size_t Index) const = 0;
25 };
26 
27 class DWARFDebugRanges final : public DWARFDebugRangesBase {
28 public:
30 
31  void Extract(SymbolFileDWARF *dwarf2Data) override;
32  bool FindRanges(const DWARFUnit *cu, dw_offset_t debug_ranges_offset,
33  DWARFRangeList &range_list) const override;
34  uint64_t GetOffset(size_t Index) const override;
35 
36  static void Dump(lldb_private::Stream &s,
37  const lldb_private::DWARFDataExtractor &debug_ranges_data,
38  lldb::offset_t *offset_ptr, dw_addr_t cu_base_addr);
39 
40 protected:
41  bool Extract(SymbolFileDWARF *dwarf2Data, lldb::offset_t *offset_ptr,
42  DWARFRangeList &range_list);
43 
44  typedef std::map<dw_offset_t, DWARFRangeList> range_map;
45  typedef range_map::iterator range_map_iterator;
46  typedef range_map::const_iterator range_map_const_iterator;
47  range_map m_range_map;
48 };
49 
50 // DWARF v5 .debug_rnglists section.
52  struct RngListEntry {
53  uint8_t encoding;
54  uint64_t value0;
55  uint64_t value1;
56  };
57 
58 public:
59  void Extract(SymbolFileDWARF *dwarf2Data) override;
60  bool FindRanges(const DWARFUnit *cu, dw_offset_t debug_ranges_offset,
61  DWARFRangeList &range_list) const override;
62  uint64_t GetOffset(size_t Index) const override;
63 
64 protected:
65  bool ExtractRangeList(const lldb_private::DWARFDataExtractor &data,
66  uint8_t addrSize, lldb::offset_t *offset_ptr,
67  std::vector<RngListEntry> &list);
68 
69  std::vector<uint64_t> Offsets;
70  std::map<dw_offset_t, std::vector<RngListEntry>> m_range_map;
71 };
72 
73 #endif // SymbolFileDWARF_DWARFDebugRanges_h_
A stream class that can stream formatted output to a file.
Definition: Stream.h:28
virtual bool FindRanges(const DWARFUnit *cu, dw_offset_t debug_ranges_offset, DWARFRangeList &range_list) const =0
uint64_t dw_addr_t
Definition: dwarf.h:26
virtual uint64_t GetOffset(size_t Index) const =0
range_map::iterator range_map_iterator
uint64_t offset_t
Definition: lldb-types.h:87
std::map< dw_offset_t, DWARFRangeList > range_map
range_map::const_iterator range_map_const_iterator
virtual ~DWARFDebugRangesBase()
virtual void Extract(SymbolFileDWARF *dwarf2Data)=0
std::vector< uint64_t > Offsets
std::map< dw_offset_t, std::vector< RngListEntry > > m_range_map