• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===- DWARFDebugRnglists.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 LLVM_DEBUGINFO_DWARFDEBUGRNGLISTS_H
11 #define LLVM_DEBUGINFO_DWARFDEBUGRNGLISTS_H
12 
13 #include "llvm/BinaryFormat/Dwarf.h"
14 #include "llvm/DebugInfo/DIContext.h"
15 #include "llvm/DebugInfo/DWARF/DWARFDataExtractor.h"
16 #include "llvm/DebugInfo/DWARF/DWARFDebugRangeList.h"
17 #include "llvm/DebugInfo/DWARF/DWARFListTable.h"
18 #include <cstdint>
19 #include <map>
20 #include <vector>
21 
22 namespace llvm {
23 
24 class Error;
25 class raw_ostream;
26 
27 /// A class representing a single range list entry.
28 struct RangeListEntry : public DWARFListEntryBase {
29   /// The values making up the range list entry. Most represent a range with
30   /// a start and end address or a start address and a length. Others are
31   /// single value base addresses or end-of-list with no values. The unneeded
32   /// values are semantically undefined, but initialized to 0.
33   uint64_t Value0;
34   uint64_t Value1;
35 
36   Error extract(DWARFDataExtractor Data, uint32_t End, uint32_t *OffsetPtr);
37   void dump(raw_ostream &OS, uint8_t AddrSize, uint8_t MaxEncodingStringLength,
38             uint64_t &CurrentBase, DIDumpOptions DumpOpts) const;
isSentinelRangeListEntry39   bool isSentinel() const { return EntryKind == dwarf::DW_RLE_end_of_list; }
40 };
41 
42 /// A class representing a single rangelist.
43 class DWARFDebugRnglist : public DWARFListType<RangeListEntry> {
44 public:
45   /// Build a DWARFAddressRangesVector from a rangelist.
46   DWARFAddressRangesVector
47   getAbsoluteRanges(llvm::Optional<BaseAddress> BaseAddr) const;
48 };
49 
50 class DWARFDebugRnglistTable : public DWARFListTableBase<DWARFDebugRnglist> {
51 public:
DWARFDebugRnglistTable()52   DWARFDebugRnglistTable()
53       : DWARFListTableBase(/* SectionName    = */ ".debug_rnglists",
54                            /* HeaderString   = */ "ranges:",
55                            /* ListTypeString = */ "range") {}
56 };
57 
58 } // end namespace llvm
59 
60 #endif // LLVM_DEBUGINFO_DWARFDEBUGRNGLISTS_H
61