LLVM  10.0.0svn
DWARFDebugAranges.h
Go to the documentation of this file.
1 //===- DWARFDebugAranges.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 LLVM_DEBUGINFO_DWARFDEBUGARANGES_H
10 #define LLVM_DEBUGINFO_DWARFDEBUGARANGES_H
11 
12 #include "llvm/ADT/DenseSet.h"
14 #include <cstdint>
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(uint64_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 
46  uint64_t HighPC() const {
47  if (Length)
48  return LowPC + Length;
49  return -1ULL;
50  }
51 
52  bool operator<(const Range &other) const {
53  return LowPC < other.LowPC;
54  }
55 
56  uint64_t LowPC; /// Start of address range.
57  uint32_t Length; /// End of address range (not including this address).
58  uint32_t CUOffset; /// Offset of the compile unit or die.
59  };
60 
61  struct RangeEndpoint {
62  uint64_t Address;
63  uint64_t CUOffset;
64  bool IsRangeStart;
65 
66  RangeEndpoint(uint64_t Address, uint64_t CUOffset, bool IsRangeStart)
67  : Address(Address), CUOffset(CUOffset), IsRangeStart(IsRangeStart) {}
68 
69  bool operator<(const RangeEndpoint &Other) const {
70  return Address < Other.Address;
71  }
72  };
73 
74  using RangeColl = std::vector<Range>;
75  using RangeCollIterator = RangeColl::const_iterator;
76 
77  std::vector<RangeEndpoint> Endpoints;
78  RangeColl Aranges;
79  DenseSet<uint64_t> ParsedCUOffsets;
80 };
81 
82 } // end namespace llvm
83 
84 #endif // LLVM_DEBUGINFO_DWARFDEBUGARANGES_H
This class represents lattice values for constants.
Definition: AllocatorList.h:23
uint32_t findAddress(uint64_t Address) const
Optional< std::vector< StOtherPiece > > Other
Definition: ELFYAML.cpp:953
void generate(DWARFContext *CTX)
DWARFContext This data structure is the top level entity that deals with dwarf debug information pars...
Definition: DWARFContext.h:58
bool operator<(int64_t V1, const APSInt &V2)
Definition: APSInt.h:343