LLVM  13.0.0git
DWARFContext.h
Go to the documentation of this file.
1 //===- DWARFContext.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_DWARFCONTEXT_H
10 #define LLVM_DEBUGINFO_DWARF_DWARFCONTEXT_H
11 
12 #include "llvm/ADT/MapVector.h"
13 #include "llvm/ADT/SmallString.h"
14 #include "llvm/ADT/SmallVector.h"
15 #include "llvm/ADT/StringMap.h"
16 #include "llvm/ADT/StringRef.h"
34 #include "llvm/Object/Binary.h"
35 #include "llvm/Object/ObjectFile.h"
37 #include "llvm/Support/Error.h"
38 #include "llvm/Support/Host.h"
39 #include <cstdint>
40 #include <deque>
41 #include <map>
42 #include <memory>
43 
44 namespace llvm {
45 
46 class MCRegisterInfo;
47 class MemoryBuffer;
48 class raw_ostream;
49 
50 /// DWARFContext
51 /// This data structure is the top level entity that deals with dwarf debug
52 /// information parsing. The actual data is supplied through DWARFObj.
53 class DWARFContext : public DIContext {
54  DWARFUnitVector NormalUnits;
55  std::unique_ptr<DWARFUnitIndex> CUIndex;
56  std::unique_ptr<DWARFGdbIndex> GdbIndex;
57  std::unique_ptr<DWARFUnitIndex> TUIndex;
58  std::unique_ptr<DWARFDebugAbbrev> Abbrev;
59  std::unique_ptr<DWARFDebugLoc> Loc;
60  std::unique_ptr<DWARFDebugAranges> Aranges;
61  std::unique_ptr<DWARFDebugLine> Line;
62  std::unique_ptr<DWARFDebugFrame> DebugFrame;
63  std::unique_ptr<DWARFDebugFrame> EHFrame;
64  std::unique_ptr<DWARFDebugMacro> Macro;
65  std::unique_ptr<DWARFDebugMacro> Macinfo;
66  std::unique_ptr<DWARFDebugNames> Names;
67  std::unique_ptr<AppleAcceleratorTable> AppleNames;
68  std::unique_ptr<AppleAcceleratorTable> AppleTypes;
69  std::unique_ptr<AppleAcceleratorTable> AppleNamespaces;
70  std::unique_ptr<AppleAcceleratorTable> AppleObjC;
71 
72  DWARFUnitVector DWOUnits;
73  std::unique_ptr<DWARFDebugAbbrev> AbbrevDWO;
74  std::unique_ptr<DWARFDebugMacro> MacinfoDWO;
75  std::unique_ptr<DWARFDebugMacro> MacroDWO;
76 
77  /// The maximum DWARF version of all units.
78  unsigned MaxVersion = 0;
79 
80  struct DWOFile {
82  std::unique_ptr<DWARFContext> Context;
83  };
85  std::weak_ptr<DWOFile> DWP;
86  bool CheckedForDWP = false;
87  std::string DWPName;
88 
89  std::unique_ptr<MCRegisterInfo> RegInfo;
90 
91  std::function<void(Error)> RecoverableErrorHandler =
94 
95  /// Read compile units from the debug_info section (if necessary)
96  /// and type units from the debug_types sections (if necessary)
97  /// and store them in NormalUnits.
98  void parseNormalUnits();
99 
100  /// Read compile units from the debug_info.dwo section (if necessary)
101  /// and type units from the debug_types.dwo section (if necessary)
102  /// and store them in DWOUnits.
103  /// If \p Lazy is true, set up to parse but don't actually parse them.
104  enum { EagerParse = false, LazyParse = true };
105  void parseDWOUnits(bool Lazy = false);
106 
107  std::unique_ptr<const DWARFObject> DObj;
108 
109  /// Helper enum to distinguish between macro[.dwo] and macinfo[.dwo]
110  /// section.
111  enum MacroSecType {
112  MacinfoSection,
113  MacinfoDwoSection,
114  MacroSection,
115  MacroDwoSection
116  };
117 
118 public:
119  DWARFContext(std::unique_ptr<const DWARFObject> DObj,
120  std::string DWPName = "",
121  std::function<void(Error)> RecoverableErrorHandler =
123  std::function<void(Error)> WarningHandler =
125  ~DWARFContext();
126 
127  DWARFContext(DWARFContext &) = delete;
128  DWARFContext &operator=(DWARFContext &) = delete;
129 
130  const DWARFObject &getDWARFObj() const { return *DObj; }
131 
132  static bool classof(const DIContext *DICtx) {
133  return DICtx->getKind() == CK_DWARF;
134  }
135 
136  /// Dump a textual representation to \p OS. If any \p DumpOffsets are present,
137  /// dump only the record at the specified offset.
138  void dump(raw_ostream &OS, DIDumpOptions DumpOpts,
139  std::array<Optional<uint64_t>, DIDT_ID_Count> DumpOffsets);
140 
141  void dump(raw_ostream &OS, DIDumpOptions DumpOpts) override {
142  std::array<Optional<uint64_t>, DIDT_ID_Count> DumpOffsets;
143  dump(OS, DumpOpts, DumpOffsets);
144  }
145 
146  bool verify(raw_ostream &OS, DIDumpOptions DumpOpts = {}) override;
147 
150 
151  /// Get units from .debug_info in this context.
153  parseNormalUnits();
154  return unit_iterator_range(NormalUnits.begin(),
155  NormalUnits.begin() +
156  NormalUnits.getNumInfoUnits());
157  }
158 
159  /// Get units from .debug_types in this context.
161  parseNormalUnits();
162  return unit_iterator_range(
163  NormalUnits.begin() + NormalUnits.getNumInfoUnits(), NormalUnits.end());
164  }
165 
166  /// Get compile units in this context.
169  }
170 
171  // If you want type_units(), it'll need to be a concat iterator of a filter of
172  // TUs in info_section + all the (all type) units in types_section
173 
174  /// Get all normal compile/type units in this context.
176  parseNormalUnits();
177  return unit_iterator_range(NormalUnits.begin(), NormalUnits.end());
178  }
179 
180  /// Get units from .debug_info..dwo in the DWO context.
182  parseDWOUnits();
183  return unit_iterator_range(DWOUnits.begin(),
184  DWOUnits.begin() + DWOUnits.getNumInfoUnits());
185  }
186 
187  /// Get units from .debug_types.dwo in the DWO context.
189  parseDWOUnits();
190  return unit_iterator_range(DWOUnits.begin() + DWOUnits.getNumInfoUnits(),
191  DWOUnits.end());
192  }
193 
194  /// Get compile units in the DWO context.
197  }
198 
199  // If you want dwo_type_units(), it'll need to be a concat iterator of a
200  // filter of TUs in dwo_info_section + all the (all type) units in
201  // dwo_types_section.
202 
203  /// Get all units in the DWO context.
205  parseDWOUnits();
206  return unit_iterator_range(DWOUnits.begin(), DWOUnits.end());
207  }
208 
209  /// Get the number of compile units in this context.
210  unsigned getNumCompileUnits() {
211  parseNormalUnits();
212  return NormalUnits.getNumInfoUnits();
213  }
214 
215  /// Get the number of type units in this context.
216  unsigned getNumTypeUnits() {
217  parseNormalUnits();
218  return NormalUnits.getNumTypesUnits();
219  }
220 
221  /// Get the number of compile units in the DWO context.
223  parseDWOUnits();
224  return DWOUnits.getNumInfoUnits();
225  }
226 
227  /// Get the number of type units in the DWO context.
228  unsigned getNumDWOTypeUnits() {
229  parseDWOUnits();
230  return DWOUnits.getNumTypesUnits();
231  }
232 
233  /// Get the unit at the specified index.
235  parseNormalUnits();
236  return NormalUnits[index].get();
237  }
238 
239  /// Get the unit at the specified index for the DWO units.
241  parseDWOUnits();
242  return DWOUnits[index].get();
243  }
244 
246 
247  /// Return the compile unit that includes an offset (relative to .debug_info).
249 
250  /// Get a DIE given an exact offset.
251  DWARFDie getDIEForOffset(uint64_t Offset);
252 
253  unsigned getMaxVersion() {
254  // Ensure info units have been parsed to discover MaxVersion
256  return MaxVersion;
257  }
258 
259  unsigned getMaxDWOVersion() {
260  // Ensure DWO info units have been parsed to discover MaxVersion
262  return MaxVersion;
263  }
264 
266  if (Version > MaxVersion)
267  MaxVersion = Version;
268  }
269 
270  const DWARFUnitIndex &getCUIndex();
272  const DWARFUnitIndex &getTUIndex();
273 
274  /// Get a pointer to the parsed DebugAbbrev object.
276 
277  /// Get a pointer to the parsed DebugLoc object.
278  const DWARFDebugLoc *getDebugLoc();
279 
280  /// Get a pointer to the parsed dwo abbreviations object.
282 
283  /// Get a pointer to the parsed DebugAranges object.
285 
286  /// Get a pointer to the parsed frame information object.
288 
289  /// Get a pointer to the parsed eh frame information object.
291 
292  /// Get a pointer to the parsed DebugMacinfo information object.
294 
295  /// Get a pointer to the parsed DebugMacinfoDWO information object.
297 
298  /// Get a pointer to the parsed DebugMacro information object.
300 
301  /// Get a pointer to the parsed DebugMacroDWO information object.
303 
304  /// Get a reference to the parsed accelerator table object.
306 
307  /// Get a reference to the parsed accelerator table object.
309 
310  /// Get a reference to the parsed accelerator table object.
312 
313  /// Get a reference to the parsed accelerator table object.
315 
316  /// Get a reference to the parsed accelerator table object.
318 
319  /// Get a pointer to a parsed line table corresponding to a compile unit.
320  /// Report any parsing issues as warnings on stderr.
322 
323  /// Get a pointer to a parsed line table corresponding to a compile unit.
324  /// Report any recoverable parsing problems using the handler.
327  function_ref<void(Error)> RecoverableErrorHandler);
328 
330  return DataExtractor(DObj->getStrSection(), false, 0);
331  }
333  return DataExtractor(DObj->getStrDWOSection(), false, 0);
334  }
336  return DataExtractor(DObj->getLineStrSection(), false, 0);
337  }
338 
339  /// Wraps the returned DIEs for a given address.
340  struct DIEsForAddress {
344  explicit operator bool() const { return CompileUnit != nullptr; }
345  };
346 
347  /// Get the compilation unit, the function DIE and lexical block DIE for the
348  /// given address where applicable.
349  /// TODO: change input parameter from "uint64_t Address"
350  /// into "SectionedAddress Address"
351  DIEsForAddress getDIEsForAddress(uint64_t Address);
352 
354  object::SectionedAddress Address,
355  DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override;
357  object::SectionedAddress Address, uint64_t Size,
358  DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override;
360  object::SectionedAddress Address,
361  DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override;
362 
363  std::vector<DILocal>
365 
366  bool isLittleEndian() const { return DObj->isLittleEndian(); }
367  static bool isSupportedVersion(unsigned version) {
368  return version == 2 || version == 3 || version == 4 || version == 5;
369  }
370 
371  static bool isAddressSizeSupported(unsigned AddressSize) {
372  return AddressSize == 2 || AddressSize == 4 || AddressSize == 8;
373  }
374 
375  std::shared_ptr<DWARFContext> getDWOContext(StringRef AbsolutePath);
376 
377  const MCRegisterInfo *getRegisterInfo() const { return RegInfo.get(); }
378 
380  return RecoverableErrorHandler;
381  }
382 
383  function_ref<void(Error)> getWarningHandler() { return WarningHandler; }
384 
385  static std::unique_ptr<DWARFContext>
386  create(const object::ObjectFile &Obj, const LoadedObjectInfo *L = nullptr,
387  std::string DWPName = "",
388  std::function<void(Error)> RecoverableErrorHandler =
390  std::function<void(Error)> WarningHandler =
392 
393  static std::unique_ptr<DWARFContext>
394  create(const StringMap<std::unique_ptr<MemoryBuffer>> &Sections,
395  uint8_t AddrSize, bool isLittleEndian = sys::IsLittleEndianHost,
396  std::function<void(Error)> RecoverableErrorHandler =
398  std::function<void(Error)> WarningHandler =
400 
401  /// Loads register info for the architecture of the provided object file.
402  /// Improves readability of dumped DWARF expressions. Requires the caller to
403  /// have initialized the relevant target descriptions.
405 
406  /// Get address size from CUs.
407  /// TODO: refactor compile_units() to make this const.
408  uint8_t getCUAddrSize();
409 
411  return getDWARFObj().getFile()->getArch();
412  }
413 
414  /// Return the compile unit which contains instruction with provided
415  /// address.
416  /// TODO: change input parameter from "uint64_t Address"
417  /// into "SectionedAddress Address"
418  DWARFCompileUnit *getCompileUnitForAddress(uint64_t Address);
419 
420 private:
421  /// Parse a macro[.dwo] or macinfo[.dwo] section.
422  std::unique_ptr<DWARFDebugMacro>
423  parseMacroOrMacinfo(MacroSecType SectionType);
424 
425  void addLocalsForDie(DWARFCompileUnit *CU, DWARFDie Subprogram, DWARFDie Die,
426  std::vector<DILocal> &Result);
427 };
428 
429 } // end namespace llvm
430 
431 #endif // LLVM_DEBUGINFO_DWARF_DWARFCONTEXT_H
llvm::Check::Size
@ Size
Definition: FileCheck.h:73
llvm::DWARFContext::getDebugNames
const DWARFDebugNames & getDebugNames()
Get a reference to the parsed accelerator table object.
Definition: DWARFContext.cpp:902
llvm::DWARFContext::getLineTableForUnit
const DWARFDebugLine::LineTable * getLineTableForUnit(DWARFUnit *U)
Get a pointer to a parsed line table corresponding to a compile unit.
Definition: DWARFContext.cpp:929
llvm::DWARFContext::dump
void dump(raw_ostream &OS, DIDumpOptions DumpOpts) override
Definition: DWARFContext.h:141
llvm
Definition: AllocatorList.h:23
DWARFCompileUnit.h
llvm::DWARFContext::types_section_units
unit_iterator_range types_section_units()
Get units from .debug_types in this context.
Definition: DWARFContext.h:160
llvm::DWARFContext::getEHFrame
Expected< const DWARFDebugFrame * > getEHFrame()
Get a pointer to the parsed eh frame information object.
Definition: DWARFContext.cpp:848
llvm::DWARFContext::unit_iterator_range
DWARFUnitVector::iterator_range unit_iterator_range
Definition: DWARFContext.h:148
DWARFGdbIndex.h
DWARFAcceleratorTable.h
llvm::DWARFContext::compile_unit_range
DWARFUnitVector::compile_unit_range compile_unit_range
Definition: DWARFContext.h:149
DWARFDebugMacro.h
llvm::DIInliningInfo
A format-neutral container for inlined code description.
Definition: DIContext.h:88
llvm::DILineInfoSpecifier
Controls which fields of DILineInfo container should be filled with data.
Definition: DIContext.h:142
StringRef.h
llvm::DWARFContext::getAppleNames
const AppleAcceleratorTable & getAppleNames()
Get a reference to the parsed accelerator table object.
Definition: DWARFContext.cpp:907
DWARFObject.h
Host.h
llvm::SmallVector
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
Definition: SmallVector.h:1168
llvm::DWARFContext::getNumTypeUnits
unsigned getNumTypeUnits()
Get the number of type units in this context.
Definition: DWARFContext.h:216
llvm::DWARFContext::getDWOCompileUnitForHash
DWARFCompileUnit * getDWOCompileUnitForHash(uint64_t Hash)
Definition: DWARFContext.cpp:696
MapVector.h
llvm::DWARFContext::getLineInfoForAddressRange
DILineInfoTable getLineInfoForAddressRange(object::SectionedAddress Address, uint64_t Size, DILineInfoSpecifier Specifier=DILineInfoSpecifier()) override
Definition: DWARFContext.cpp:1249
DWARFDebugLine.h
Error.h
llvm::DWARFObject::getFile
virtual const object::ObjectFile * getFile() const
Definition: DWARFObject.h:31
llvm::DWARFContext::getStringExtractor
DataExtractor getStringExtractor() const
Definition: DWARFContext.h:329
llvm::DWARFContext::info_section_units
unit_iterator_range info_section_units()
Get units from .debug_info in this context.
Definition: DWARFContext.h:152
llvm::DWARFContext
DWARFContext This data structure is the top level entity that deals with dwarf debug information pars...
Definition: DWARFContext.h:53
llvm::WithColor::defaultErrorHandler
static void defaultErrorHandler(Error Err)
Implement default handling for Error.
Definition: WithColor.cpp:137
llvm::object::ObjectFile::getArch
virtual Triple::ArchType getArch() const =0
llvm::Optional< uint64_t >
Offset
uint64_t Offset
Definition: ELFObjHandler.cpp:81
llvm::DWARFContext::getDebugAbbrevDWO
const DWARFDebugAbbrev * getDebugAbbrevDWO()
Get a pointer to the parsed dwo abbreviations object.
Definition: DWARFContext.cpp:789
llvm::DIContext::CK_DWARF
@ CK_DWARF
Definition: DIContext.h:227
llvm::Expected
Tagged union holding either a T or a Error.
Definition: APFloat.h:42
llvm::DWARFContext::dwo_types_section_units
unit_iterator_range dwo_types_section_units()
Get units from .debug_types.dwo in the DWO context.
Definition: DWARFContext.h:188
llvm::DWARFUnitVector::getNumTypesUnits
unsigned getNumTypesUnits() const
Returns number of units from all .debug_types[.dwo] sections.
Definition: DWARFUnit.h:163
llvm::DWARFContext::getLocalsForAddress
std::vector< DILocal > getLocalsForAddress(object::SectionedAddress Address) override
Definition: DWARFContext.cpp:1216
llvm::DWARFContext::getDebugMacroDWO
const DWARFDebugMacro * getDebugMacroDWO()
Get a pointer to the parsed DebugMacroDWO information object.
Definition: DWARFContext.cpp:870
llvm::WithColor::defaultWarningHandler
static void defaultWarningHandler(Error Warning)
Implement default handling for Warning.
Definition: WithColor.cpp:143
llvm::DWARFContext::getInliningInfoForAddress
DIInliningInfo getInliningInfoForAddress(object::SectionedAddress Address, DILineInfoSpecifier Specifier=DILineInfoSpecifier()) override
Definition: DWARFContext.cpp:1300
llvm::DWARFContext::getAppleObjC
const AppleAcceleratorTable & getAppleObjC()
Get a reference to the parsed accelerator table object.
Definition: DWARFContext.cpp:923
Context
LLVMContext & Context
Definition: NVVMIntrRange.cpp:66
llvm::DWARFContext::getDebugMacinfo
const DWARFDebugMacro * getDebugMacinfo()
Get a pointer to the parsed DebugMacinfo information object.
Definition: DWARFContext.cpp:876
llvm::DWARFContext::getDebugAranges
const DWARFDebugAranges * getDebugAranges()
Get a pointer to the parsed DebugAranges object.
Definition: DWARFContext.cpp:813
llvm::DWARFUnitVector::getNumInfoUnits
unsigned getNumInfoUnits() const
Returns number of units from all .debug_info[.dwo] sections.
Definition: DWARFUnit.h:159
llvm::Triple::ArchType
ArchType
Definition: Triple.h:47
DWARFDebugFrame.h
SmallString.h
llvm::DWARFContext::dwo_info_section_units
unit_iterator_range dwo_info_section_units()
Get units from .debug_info..dwo in the DWO context.
Definition: DWARFContext.h:181
llvm::DWARFContext::getDebugMacinfoDWO
const DWARFDebugMacro * getDebugMacinfoDWO()
Get a pointer to the parsed DebugMacinfoDWO information object.
Definition: DWARFContext.cpp:882
llvm::DWARFDebugAbbrev
Definition: DWARFDebugAbbrev.h:54
llvm::DWARFUnitIndex
Definition: DWARFUnitIndex.h:80
DWARFSection.h
llvm::DWARFContext::getMaxVersion
unsigned getMaxVersion()
Definition: DWARFContext.h:253
llvm::DIContext
Definition: DIContext.h:224
llvm::DWARFContext::getNumCompileUnits
unsigned getNumCompileUnits()
Get the number of compile units in this context.
Definition: DWARFContext.h:210
DWARFDie.h
DWARFDebugLoc.h
llvm::DWARFContext::getArch
Triple::ArchType getArch() const
Definition: DWARFContext.h:410
llvm::raw_ostream
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition: raw_ostream.h:50
llvm::DWARFObject
Definition: DWARFObject.h:25
llvm::IndexedInstrProf::Version
const uint64_t Version
Definition: InstrProf.h:991
StringMap.h
llvm::DWARFContext::getStringDWOExtractor
DataExtractor getStringDWOExtractor() const
Definition: DWARFContext.h:332
llvm::DWARFContext::create
static std::unique_ptr< DWARFContext > create(const object::ObjectFile &Obj, const LoadedObjectInfo *L=nullptr, std::string DWPName="", std::function< void(Error)> RecoverableErrorHandler=WithColor::defaultErrorHandler, std::function< void(Error)> WarningHandler=WithColor::defaultWarningHandler)
Definition: DWARFContext.cpp:1963
llvm::DWARFContext::operator=
DWARFContext & operator=(DWARFContext &)=delete
llvm::DWARFContext::compile_units
compile_unit_range compile_units()
Get compile units in this context.
Definition: DWARFContext.h:167
llvm::StringMap
StringMap - This is an unconventional map that is specialized for handling keys that are "strings",...
Definition: StringMap.h:108
llvm::DWARFContext::getMaxDWOVersion
unsigned getMaxDWOVersion()
Definition: DWARFContext.h:259
llvm::DWARFContext::getDebugMacro
const DWARFDebugMacro * getDebugMacro()
Get a pointer to the parsed DebugMacro information object.
Definition: DWARFContext.cpp:864
llvm::DWARFContext::dwo_units
unit_iterator_range dwo_units()
Get all units in the DWO context.
Definition: DWARFContext.h:204
llvm::DWARFContext::verify
bool verify(raw_ostream &OS, DIDumpOptions DumpOpts={}) override
Definition: DWARFContext.cpp:733
llvm::DWARFCompileUnit
Definition: DWARFCompileUnit.h:17
llvm::function_ref
An efficient, type-erasing, non-owning reference to a callable.
Definition: STLExtras.h:168
DWARFDebugAranges.h
llvm::DWARFGdbIndex
Definition: DWARFGdbIndex.h:22
llvm::DIDT_ID_Count
@ DIDT_ID_Count
Definition: DIContext.h:170
llvm::DWARFContext::getNumDWOTypeUnits
unsigned getNumDWOTypeUnits()
Get the number of type units in the DWO context.
Definition: DWARFContext.h:228
index
splat index
Definition: README_ALTIVEC.txt:181
llvm::DWARFDebugLoc
Definition: DWARFDebugLoc.h:85
llvm::DWARFContext::getDebugAbbrev
const DWARFDebugAbbrev * getDebugAbbrev()
Get a pointer to the parsed DebugAbbrev object.
Definition: DWARFContext.cpp:778
llvm::CompileUnit
Stores all information relating to a compile unit, be it in its original instance in the object file ...
Definition: DWARFLinkerCompileUnit.h:50
llvm::DWARFContext::getCUAddrSize
uint8_t getCUAddrSize()
Get address size from CUs.
Definition: DWARFContext.cpp:2002
llvm::DWARFContext::dwo_compile_units
compile_unit_range dwo_compile_units()
Get compile units in the DWO context.
Definition: DWARFContext.h:195
DWARFUnit.h
llvm::DILineInfo
A format-neutral container for source line information.
Definition: DIContext.h:31
llvm::DWARFContext::getWarningHandler
function_ref< void(Error)> getWarningHandler()
Definition: DWARFContext.h:383
llvm::DWARFContext::DIEsForAddress::BlockDIE
DWARFDie BlockDIE
Definition: DWARFContext.h:343
ObjectFile.h
llvm::DWARFContext::isAddressSizeSupported
static bool isAddressSizeSupported(unsigned AddressSize)
Definition: DWARFContext.h:371
llvm::DWARFContext::getUnitAtIndex
DWARFUnit * getUnitAtIndex(unsigned index)
Get the unit at the specified index.
Definition: DWARFContext.h:234
iterator_range.h
function
print Print MemDeps of function
Definition: MemDepPrinter.cpp:83
llvm::DWARFContext::getTUIndex
const DWARFUnitIndex & getTUIndex()
Definition: DWARFContext.cpp:757
llvm::DWARFContext::getDIEsForAddress
DIEsForAddress getDIEsForAddress(uint64_t Address)
Get the compilation unit, the function DIE and lexical block DIE for the given address where applicab...
Definition: DWARFContext.cpp:1005
llvm::DWARFContext::getGdbIndex
DWARFGdbIndex & getGdbIndex()
Definition: DWARFContext.cpp:768
llvm::DWARFContext::getDWOContext
std::shared_ptr< DWARFContext > getDWOContext(StringRef AbsolutePath)
Definition: DWARFContext.cpp:1367
llvm::DWARFContext::~DWARFContext
~DWARFContext()
llvm::DWARFContext::getDebugFrame
Expected< const DWARFDebugFrame * > getDebugFrame()
Get a pointer to the parsed frame information object.
Definition: DWARFContext.cpp:822
llvm::DWARFContext::isLittleEndian
bool isLittleEndian() const
Definition: DWARFContext.h:366
llvm::DWARFContext::getDebugLoc
const DWARFDebugLoc * getDebugLoc()
Get a pointer to the parsed DebugLoc object.
Definition: DWARFContext.cpp:799
RegInfo
Definition: AMDGPUAsmParser.cpp:2362
llvm::StringRef
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:57
llvm::object::ObjectFile
This class is the base class for all object file types.
Definition: ObjectFile.h:225
llvm::DWARFContext::DIEsForAddress::FunctionDIE
DWARFDie FunctionDIE
Definition: DWARFContext.h:342
llvm::DWARFUnitVector::compile_unit_range
decltype(make_filter_range(std::declval< iterator_range >(), isCompileUnit)) compile_unit_range
Definition: DWARFUnit.h:133
llvm::DWARFContext::normal_units
unit_iterator_range normal_units()
Get all normal compile/type units in this context.
Definition: DWARFContext.h:175
llvm::DWARFContext::getLineStringExtractor
DataExtractor getLineStringExtractor() const
Definition: DWARFContext.h:335
llvm::AppleAcceleratorTable
This implements the Apple accelerator table format, a precursor of the DWARF 5 accelerator table form...
Definition: DWARFAcceleratorTable.h:83
llvm::DWARFContext::getNumDWOCompileUnits
unsigned getNumDWOCompileUnits()
Get the number of compile units in the DWO context.
Definition: DWARFContext.h:222
llvm::DWARFDebugMacro
Definition: DWARFDebugMacro.h:23
llvm::MCRegisterInfo
MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc object...
Definition: MCRegisterInfo.h:135
llvm::make_filter_range
iterator_range< filter_iterator< detail::IterOfRange< RangeT >, PredicateT > > make_filter_range(RangeT &&Range, PredicateT Pred)
Convenience function that takes a range of elements and a predicate, and return a new filter_iterator...
Definition: STLExtras.h:486
llvm::DWARFContext::getDIEForOffset
DWARFDie getDIEForOffset(uint64_t Offset)
Get a DIE given an exact offset.
Definition: DWARFContext.cpp:726
llvm::DWARFContext::getCUIndex
const DWARFUnitIndex & getCUIndex()
Definition: DWARFContext.cpp:746
llvm::DWARFContext::getLineInfoForAddress
DILineInfo getLineInfoForAddress(object::SectionedAddress Address, DILineInfoSpecifier Specifier=DILineInfoSpecifier()) override
Definition: DWARFContext.cpp:1228
DIContext.h
llvm::DWARFContext::setMaxVersionIfGreater
void setMaxVersionIfGreater(unsigned Version)
Definition: DWARFContext.h:265
llvm::DWARFContext::getDWOUnitAtIndex
DWARFUnit * getDWOUnitAtIndex(unsigned index)
Get the unit at the specified index for the DWO units.
Definition: DWARFContext.h:240
llvm::DWARFContext::getRegisterInfo
const MCRegisterInfo * getRegisterInfo() const
Definition: DWARFContext.h:377
llvm::object::OwningBinary
Definition: RuntimeDyld.h:36
DWARFDebugAbbrev.h
llvm::DWARFUnit
Definition: DWARFUnit.h:203
llvm::Error
Lightweight error class with error context and mandatory checking.
Definition: Error.h:157
llvm::DWARFContext::getCompileUnitForOffset
DWARFCompileUnit * getCompileUnitForOffset(uint64_t Offset)
Return the compile unit that includes an offset (relative to .debug_info).
Definition: DWARFContext.cpp:992
DataExtractor.h
llvm::DWARFContext::getRecoverableErrorHandler
function_ref< void(Error)> getRecoverableErrorHandler()
Definition: DWARFContext.h:379
DWARFTypeUnit.h
llvm::LoadedObjectInfo
An inferface for inquiring the load address of a loaded object file to be used by the DIContext imple...
Definition: DIContext.h:263
DWARFUnitIndex.h
llvm::DWARFContext::classof
static bool classof(const DIContext *DICtx)
Definition: DWARFContext.h:132
Binary.h
llvm::DataExtractor
Definition: DataExtractor.h:41
SmallVector.h
llvm::sys::IsLittleEndianHost
static const bool IsLittleEndianHost
Definition: SwapByteOrder.h:101
llvm::DWARFContext::getDWARFObj
const DWARFObject & getDWARFObj() const
Definition: DWARFContext.h:130
llvm::object::SectionedAddress
Definition: ObjectFile.h:141
llvm::iterator_range
A range adaptor for a pair of iterators.
Definition: iterator_range.h:30
llvm::DWARFDebugLine::LineTable
Definition: DWARFDebugLine.h:233
llvm::isCompileUnit
bool isCompileUnit(const std::unique_ptr< DWARFUnit > &U)
Definition: DWARFUnit.h:520
llvm::DWARFContext::getCompileUnitForAddress
DWARFCompileUnit * getCompileUnitForAddress(uint64_t Address)
Return the compile unit which contains instruction with provided address.
Definition: DWARFContext.cpp:998
llvm::DWARFUnitVector::iterator_range
llvm::iterator_range< typename UnitVector::iterator > iterator_range
Definition: DWARFUnit.h:130
llvm::DWARFDie
Utility class that carries the DWARF compile/type unit and the debug info entry in an object.
Definition: DWARFDie.h:43
llvm::DWARFDebugNames
.debug_names section consists of one or more units.
Definition: DWARFAcceleratorTable.h:231
llvm::DWARFContext::DWARFContext
DWARFContext(std::unique_ptr< const DWARFObject > DObj, std::string DWPName="", std::function< void(Error)> RecoverableErrorHandler=WithColor::defaultErrorHandler, std::function< void(Error)> WarningHandler=WithColor::defaultWarningHandler)
Definition: DWARFContext.cpp:67
llvm::DWARFContext::DIEsForAddress
Wraps the returned DIEs for a given address.
Definition: DWARFContext.h:340
llvm::DWARFContext::isSupportedVersion
static bool isSupportedVersion(unsigned version)
Definition: DWARFContext.h:367
llvm::DWARFDebugAranges
Definition: DWARFDebugAranges.h:21
CU
Definition: AArch64AsmBackend.cpp:506
llvm::DWARFContext::getAppleTypes
const AppleAcceleratorTable & getAppleTypes()
Get a reference to the parsed accelerator table object.
Definition: DWARFContext.cpp:912
llvm::DWARFContext::dump
void dump(raw_ostream &OS, DIDumpOptions DumpOpts, std::array< Optional< uint64_t >, DIDT_ID_Count > DumpOffsets)
Dump a textual representation to OS.
Definition: DWARFContext.cpp:346
llvm::DWARFContext::getAppleNamespaces
const AppleAcceleratorTable & getAppleNamespaces()
Get a reference to the parsed accelerator table object.
Definition: DWARFContext.cpp:917
File
Instrumentation for Order File
Definition: InstrOrderFile.cpp:206
llvm::DWARFContext::loadRegisterInfo
Error loadRegisterInfo(const object::ObjectFile &Obj)
Loads register info for the architecture of the provided object file.
Definition: DWARFContext.cpp:1985
llvm::MachO::SectionType
SectionType
These are the section type and attributes fields.
Definition: MachO.h:120
llvm::DIContext::getKind
DIContextKind getKind() const
Definition: DIContext.h:234
llvm::DIDumpOptions
Container for dump options that control which debug information will be dumped.
Definition: DIContext.h:187
llvm::DWARFUnitVector
Describe a collection of units.
Definition: DWARFUnit.h:120