LLVM  8.0.0svn
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  uint64_t Start;
82  };
83 
84  struct LocationList {
85  unsigned Offset;
87  void dump(raw_ostream &OS, bool IsLittleEndian, unsigned AddressSize,
88  const MCRegisterInfo *RegInfo, unsigned Indent) const;
89  };
90 
91 private:
93 
94  LocationLists Locations;
95 
96  unsigned AddressSize;
97 
98  bool IsLittleEndian;
99 
100 public:
101  void parse(DataExtractor data);
102  void dump(raw_ostream &OS, const MCRegisterInfo *RegInfo,
103  Optional<uint64_t> Offset) const;
104 
105  /// Return the location list at the given offset or nullptr.
106  LocationList const *getLocationListAtOffset(uint64_t Offset) const;
107 
109  uint32_t *Offset);
110 };
111 
112 } // end namespace llvm
113 
114 #endif // LLVM_DEBUGINFO_DWARF_DWARFDEBUGLOC_H
A list of locations that contain one variable.
Definition: DWARFDebugLoc.h:37
Compute iterated dominance frontiers using a linear time algorithm.
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)
SmallVector< Entry, 2 > Entries
Definition: DWARFDebugLoc.h:86
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
Represents base address of the CU.
Definition: DWARFUnit.h:163
SmallVector< char, 4 > Loc
Definition: DWARFDebugLoc.h:81
uint64_t End
The ending address of the instruction range.
Definition: DWARFDebugLoc.h:31
Definition: JSON.cpp:592
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
void parse(const DWARFDataExtractor &data)
Parse the debug_loc section accessible via the &#39;data&#39; parameter using the address size also given in ...