LLVM  8.0.1
DWARFDebugLoc.h
Go to the documentation of this file.
1 //===- DWARFDebugLoc.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_DWARF_DWARFDEBUGLOC_H
11 #define LLVM_DEBUGINFO_DWARF_DWARFDEBUGLOC_H
12 
13 #include "llvm/ADT/Optional.h"
14 #include "llvm/ADT/SmallVector.h"
17 #include <cstdint>
18 
19 namespace llvm {
20 class DWARFUnit;
21 class MCRegisterInfo;
22 class raw_ostream;
23 
25 public:
26  /// A single location within a location list.
27  struct Entry {
28  /// The beginning address of the instruction range.
29  uint64_t Begin;
30  /// The ending address of the instruction range.
31  uint64_t End;
32  /// The location of the variable within the specified range.
34  };
35 
36  /// A list of locations that contain one variable.
37  struct LocationList {
38  /// The beginning offset where this location list is stored in the debug_loc
39  /// section.
40  unsigned Offset;
41  /// All the locations in which the variable is stored.
43  /// Dump this list on OS.
44  void dump(raw_ostream &OS, bool IsLittleEndian, unsigned AddressSize,
45  const MCRegisterInfo *MRI, uint64_t BaseAddress,
46  unsigned Indent) const;
47  };
48 
49 private:
51 
52  /// A list of all the variables in the debug_loc section, each one describing
53  /// the locations in which the variable is stored.
54  LocationLists Locations;
55 
56  unsigned AddressSize;
57 
58  bool IsLittleEndian;
59 
60 public:
61  /// Print the location lists found within the debug_loc section.
62  void dump(raw_ostream &OS, const MCRegisterInfo *RegInfo,
64 
65  /// Parse the debug_loc section accessible via the 'data' parameter using the
66  /// address size also given in 'data' to interpret the address ranges.
67  void parse(const DWARFDataExtractor &data);
68 
69  /// Return the location list at the given offset or nullptr.
70  LocationList const *getLocationListAtOffset(uint64_t Offset) const;
71 
73  uint32_t *Offset);
74 };
75 
77 public:
78  struct Entry {
79  uint8_t Kind;
80  uint64_t Value0;
81  uint64_t Value1;
83  };
84 
85  struct LocationList {
86  unsigned Offset;
88  void dump(raw_ostream &OS, uint64_t BaseAddr, bool IsLittleEndian,
89  unsigned AddressSize, const MCRegisterInfo *RegInfo,
90  unsigned Indent) const;
91  };
92 
93 private:
95 
96  LocationLists Locations;
97 
98  unsigned AddressSize;
99 
100  bool IsLittleEndian;
101 
102 public:
103  void parse(DataExtractor data, unsigned Version);
104  void dump(raw_ostream &OS, uint64_t BaseAddr, const MCRegisterInfo *RegInfo,
105  Optional<uint64_t> Offset) const;
106 
107  /// Return the location list at the given offset or nullptr.
108  LocationList const *getLocationListAtOffset(uint64_t Offset) const;
109 
111  parseOneLocationList(DataExtractor Data, unsigned *Offset, unsigned Version);
112 };
113 
114 } // end namespace llvm
115 
116 #endif // LLVM_DEBUGINFO_DWARF_DWARFDEBUGLOC_H
A list of locations that contain one variable.
Definition: DWARFDebugLoc.h:37
This class represents lattice values for constants.
Definition: AllocatorList.h:24
void dump(raw_ostream &OS, const MCRegisterInfo *RegInfo, Optional< uint64_t > Offset) const
Print the location lists found within the debug_loc section.
unsigned Offset
The beginning offset where this location list is stored in the debug_loc section. ...
Definition: DWARFDebugLoc.h:40
A single location within a location list.
Definition: DWARFDebugLoc.h:27
SmallVector< char, 4 > Loc
The location of the variable within the specified range.
Definition: DWARFDebugLoc.h:33
MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc object...
unsigned const MachineRegisterInfo * MRI
LocationList const * getLocationListAtOffset(uint64_t Offset) const
Return the location list at the given offset or nullptr.
Optional< LocationList > parseOneLocationList(DWARFDataExtractor Data, uint32_t *Offset)
A DataExtractor (typically for an in-memory copy of an object-file section) plus a relocation map for...
uint64_t Begin
The beginning address of the instruction range.
Definition: DWARFDebugLoc.h:29
uint64_t End
The ending address of the instruction range.
Definition: DWARFDebugLoc.h:31
Definition: JSON.cpp:598
SmallVector< char, 4 > Loc
Definition: DWARFDebugLoc.h:82
This class implements an extremely fast bulk output stream that can only output to a stream...
Definition: raw_ostream.h:46
SmallVector< Entry, 2 > Entries
All the locations in which the variable is stored.
Definition: DWARFDebugLoc.h:42
const uint64_t Version
Definition: InstrProf.h:895
void parse(const DWARFDataExtractor &data)
Parse the debug_loc section accessible via the &#39;data&#39; parameter using the address size also given in ...