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