LLVM  4.0.0
DWARFDebugAranges.h
Go to the documentation of this file.
1 //===-- DWARFDebugAranges.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_LIB_DEBUGINFO_DWARFDEBUGARANGES_H
11 #define LLVM_LIB_DEBUGINFO_DWARFDEBUGARANGES_H
12 
13 #include "llvm/ADT/DenseSet.h"
15 #include <vector>
16 
17 namespace llvm {
18 
19 class DWARFContext;
20 
22 public:
23  void generate(DWARFContext *CTX);
24  uint32_t findAddress(uint64_t Address) const;
25 
26 private:
27  void clear();
28  void extract(DataExtractor DebugArangesData);
29 
30  // Call appendRange multiple times and then call construct.
31  void appendRange(uint32_t CUOffset, uint64_t LowPC, uint64_t HighPC);
32  void construct();
33 
34  struct Range {
35  explicit Range(uint64_t LowPC = -1ULL, uint64_t HighPC = -1ULL,
36  uint32_t CUOffset = -1U)
37  : LowPC(LowPC), Length(HighPC - LowPC), CUOffset(CUOffset) {}
38 
39  void setHighPC(uint64_t HighPC) {
40  if (HighPC == -1ULL || HighPC <= LowPC)
41  Length = 0;
42  else
43  Length = HighPC - LowPC;
44  }
45  uint64_t HighPC() const {
46  if (Length)
47  return LowPC + Length;
48  return -1ULL;
49  }
50 
51  bool containsAddress(uint64_t Address) const {
52  return LowPC <= Address && Address < HighPC();
53  }
54  bool operator<(const Range &other) const {
55  return LowPC < other.LowPC;
56  }
57 
58  uint64_t LowPC; // Start of address range.
59  uint32_t Length; // End of address range (not including this address).
60  uint32_t CUOffset; // Offset of the compile unit or die.
61  };
62 
63  struct RangeEndpoint {
64  uint64_t Address;
65  uint32_t CUOffset;
66  bool IsRangeStart;
67 
68  RangeEndpoint(uint64_t Address, uint32_t CUOffset, bool IsRangeStart)
69  : Address(Address), CUOffset(CUOffset), IsRangeStart(IsRangeStart) {}
70 
71  bool operator<(const RangeEndpoint &Other) const {
72  return Address < Other.Address;
73  }
74  };
75 
76 
77  typedef std::vector<Range> RangeColl;
78  typedef RangeColl::const_iterator RangeCollIterator;
79 
80  std::vector<RangeEndpoint> Endpoints;
81  RangeColl Aranges;
82  DenseSet<uint32_t> ParsedCUOffsets;
83 };
84 
85 }
86 
87 #endif
void generate(DWARFContext *CTX)
ELFYAML::ELF_STO Other
Definition: ELFYAML.cpp:662
DWARFContext This data structure is the top level entity that deals with dwarf debug information pars...
Definition: DWARFContext.h:52
uint32_t findAddress(uint64_t Address) const
bool operator<(int64_t V1, const APSInt &V2)
Definition: APSInt.h:326