LLVM  16.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/SmallVector.h"
13 #include "llvm/ADT/StringMap.h"
14 #include "llvm/ADT/StringRef.h"
20 #include "llvm/Object/Binary.h"
21 #include "llvm/Object/ObjectFile.h"
23 #include "llvm/Support/Error.h"
24 #include "llvm/Support/Host.h"
25 #include <cstdint>
26 #include <memory>
27 
28 namespace llvm {
29 
30 class MCRegisterInfo;
31 class MemoryBuffer;
32 class AppleAcceleratorTable;
33 class DWARFCompileUnit;
34 class DWARFDebugAbbrev;
35 class DWARFDebugAranges;
36 class DWARFDebugFrame;
37 class DWARFDebugLoc;
38 class DWARFDebugMacro;
39 class DWARFDebugNames;
40 class DWARFGdbIndex;
41 class DWARFTypeUnit;
42 class DWARFUnitIndex;
43 
44 /// DWARFContext
45 /// This data structure is the top level entity that deals with dwarf debug
46 /// information parsing. The actual data is supplied through DWARFObj.
47 class DWARFContext : public DIContext {
48  DWARFUnitVector NormalUnits;
50  std::unique_ptr<DWARFUnitIndex> CUIndex;
51  std::unique_ptr<DWARFGdbIndex> GdbIndex;
52  std::unique_ptr<DWARFUnitIndex> TUIndex;
53  std::unique_ptr<DWARFDebugAbbrev> Abbrev;
54  std::unique_ptr<DWARFDebugLoc> Loc;
55  std::unique_ptr<DWARFDebugAranges> Aranges;
56  std::unique_ptr<DWARFDebugLine> Line;
57  std::unique_ptr<DWARFDebugFrame> DebugFrame;
58  std::unique_ptr<DWARFDebugFrame> EHFrame;
59  std::unique_ptr<DWARFDebugMacro> Macro;
60  std::unique_ptr<DWARFDebugMacro> Macinfo;
61  std::unique_ptr<DWARFDebugNames> Names;
62  std::unique_ptr<AppleAcceleratorTable> AppleNames;
63  std::unique_ptr<AppleAcceleratorTable> AppleTypes;
64  std::unique_ptr<AppleAcceleratorTable> AppleNamespaces;
65  std::unique_ptr<AppleAcceleratorTable> AppleObjC;
66 
67  DWARFUnitVector DWOUnits;
69  std::unique_ptr<DWARFDebugAbbrev> AbbrevDWO;
70  std::unique_ptr<DWARFDebugMacro> MacinfoDWO;
71  std::unique_ptr<DWARFDebugMacro> MacroDWO;
72 
73  /// The maximum DWARF version of all units.
74  unsigned MaxVersion = 0;
75 
76  struct DWOFile {
78  std::unique_ptr<DWARFContext> Context;
79  };
81  std::weak_ptr<DWOFile> DWP;
82  bool CheckedForDWP = false;
83  std::string DWPName;
84 
85  std::unique_ptr<MCRegisterInfo> RegInfo;
86 
87  std::function<void(Error)> RecoverableErrorHandler =
90 
91  /// Read compile units from the debug_info section (if necessary)
92  /// and type units from the debug_types sections (if necessary)
93  /// and store them in NormalUnits.
94  void parseNormalUnits();
95 
96  /// Read compile units from the debug_info.dwo section (if necessary)
97  /// and type units from the debug_types.dwo section (if necessary)
98  /// and store them in DWOUnits.
99  /// If \p Lazy is true, set up to parse but don't actually parse them.
100  enum { EagerParse = false, LazyParse = true };
101  void parseDWOUnits(bool Lazy = false);
102 
103  std::unique_ptr<const DWARFObject> DObj;
104 
105  /// Helper enum to distinguish between macro[.dwo] and macinfo[.dwo]
106  /// section.
107  enum MacroSecType {
108  MacinfoSection,
109  MacinfoDwoSection,
110  MacroSection,
111  MacroDwoSection
112  };
113 
114 public:
115  DWARFContext(std::unique_ptr<const DWARFObject> DObj,
116  std::string DWPName = "",
117  std::function<void(Error)> RecoverableErrorHandler =
119  std::function<void(Error)> WarningHandler =
121  ~DWARFContext() override;
122 
123  DWARFContext(DWARFContext &) = delete;
124  DWARFContext &operator=(DWARFContext &) = delete;
125 
126  const DWARFObject &getDWARFObj() const { return *DObj; }
127 
128  static bool classof(const DIContext *DICtx) {
129  return DICtx->getKind() == CK_DWARF;
130  }
131 
132  /// Dump a textual representation to \p OS. If any \p DumpOffsets are present,
133  /// dump only the record at the specified offset.
134  void dump(raw_ostream &OS, DIDumpOptions DumpOpts,
135  std::array<Optional<uint64_t>, DIDT_ID_Count> DumpOffsets);
136 
137  void dump(raw_ostream &OS, DIDumpOptions DumpOpts) override {
138  std::array<Optional<uint64_t>, DIDT_ID_Count> DumpOffsets;
139  dump(OS, DumpOpts, DumpOffsets);
140  }
141 
142  bool verify(raw_ostream &OS, DIDumpOptions DumpOpts = {}) override;
143 
146 
147  /// Get units from .debug_info in this context.
149  parseNormalUnits();
150  return unit_iterator_range(NormalUnits.begin(),
151  NormalUnits.begin() +
152  NormalUnits.getNumInfoUnits());
153  }
154 
156  parseNormalUnits();
157  return NormalUnits;
158  }
159 
160  /// Get units from .debug_types in this context.
162  parseNormalUnits();
163  return unit_iterator_range(
164  NormalUnits.begin() + NormalUnits.getNumInfoUnits(), NormalUnits.end());
165  }
166 
167  /// Get compile units in this context.
170  }
171 
172  // If you want type_units(), it'll need to be a concat iterator of a filter of
173  // TUs in info_section + all the (all type) units in types_section
174 
175  /// Get all normal compile/type units in this context.
177  parseNormalUnits();
178  return unit_iterator_range(NormalUnits.begin(), NormalUnits.end());
179  }
180 
181  /// Get units from .debug_info..dwo in the DWO context.
183  parseDWOUnits();
184  return unit_iterator_range(DWOUnits.begin(),
185  DWOUnits.begin() + DWOUnits.getNumInfoUnits());
186  }
187 
189  parseDWOUnits();
190  return DWOUnits;
191  }
192 
193  /// Get units from .debug_types.dwo in the DWO context.
195  parseDWOUnits();
196  return unit_iterator_range(DWOUnits.begin() + DWOUnits.getNumInfoUnits(),
197  DWOUnits.end());
198  }
199 
200  /// Get compile units in the DWO context.
203  }
204 
205  // If you want dwo_type_units(), it'll need to be a concat iterator of a
206  // filter of TUs in dwo_info_section + all the (all type) units in
207  // dwo_types_section.
208 
209  /// Get all units in the DWO context.
211  parseDWOUnits();
212  return unit_iterator_range(DWOUnits.begin(), DWOUnits.end());
213  }
214 
215  /// Get the number of compile units in this context.
216  unsigned getNumCompileUnits() {
217  parseNormalUnits();
218  return NormalUnits.getNumInfoUnits();
219  }
220 
221  /// Get the number of type units in this context.
222  unsigned getNumTypeUnits() {
223  parseNormalUnits();
224  return NormalUnits.getNumTypesUnits();
225  }
226 
227  /// Get the number of compile units in the DWO context.
229  parseDWOUnits();
230  return DWOUnits.getNumInfoUnits();
231  }
232 
233  /// Get the number of type units in the DWO context.
234  unsigned getNumDWOTypeUnits() {
235  parseDWOUnits();
236  return DWOUnits.getNumTypesUnits();
237  }
238 
239  /// Get the unit at the specified index.
241  parseNormalUnits();
242  return NormalUnits[index].get();
243  }
244 
245  /// Get the unit at the specified index for the DWO units.
247  parseDWOUnits();
248  return DWOUnits[index].get();
249  }
250 
253 
254  /// Return the compile unit that includes an offset (relative to .debug_info).
256 
257  /// Get a DIE given an exact offset.
259 
260  unsigned getMaxVersion() {
261  // Ensure info units have been parsed to discover MaxVersion
263  return MaxVersion;
264  }
265 
266  unsigned getMaxDWOVersion() {
267  // Ensure DWO info units have been parsed to discover MaxVersion
269  return MaxVersion;
270  }
271 
273  if (Version > MaxVersion)
274  MaxVersion = Version;
275  }
276 
277  const DWARFUnitIndex &getCUIndex();
279  const DWARFUnitIndex &getTUIndex();
280 
281  /// Get a pointer to the parsed DebugAbbrev object.
283 
284  /// Get a pointer to the parsed DebugLoc object.
285  const DWARFDebugLoc *getDebugLoc();
286 
287  /// Get a pointer to the parsed dwo abbreviations object.
289 
290  /// Get a pointer to the parsed DebugAranges object.
292 
293  /// Get a pointer to the parsed frame information object.
295 
296  /// Get a pointer to the parsed eh frame information object.
298 
299  /// Get a pointer to the parsed DebugMacinfo information object.
301 
302  /// Get a pointer to the parsed DebugMacinfoDWO information object.
304 
305  /// Get a pointer to the parsed DebugMacro information object.
307 
308  /// Get a pointer to the parsed DebugMacroDWO information object.
310 
311  /// Get a reference to the parsed accelerator table object.
313 
314  /// Get a reference to the parsed accelerator table object.
316 
317  /// Get a reference to the parsed accelerator table object.
319 
320  /// Get a reference to the parsed accelerator table object.
322 
323  /// Get a reference to the parsed accelerator table object.
325 
326  /// Get a pointer to a parsed line table corresponding to a compile unit.
327  /// Report any parsing issues as warnings on stderr.
329 
330  /// Get a pointer to a parsed line table corresponding to a compile unit.
331  /// Report any recoverable parsing problems using the handler.
334  function_ref<void(Error)> RecoverableErrorHandler);
335 
336  // Clear the line table object corresponding to a compile unit for memory
337  // management purpose. When it's referred to again, it'll be re-populated.
339 
341  return DataExtractor(DObj->getStrSection(), false, 0);
342  }
344  return DataExtractor(DObj->getStrDWOSection(), false, 0);
345  }
347  return DataExtractor(DObj->getLineStrSection(), false, 0);
348  }
349 
350  /// Wraps the returned DIEs for a given address.
351  struct DIEsForAddress {
355  explicit operator bool() const { return CompileUnit != nullptr; }
356  };
357 
358  /// Get the compilation unit, the function DIE and lexical block DIE for the
359  /// given address where applicable.
360  /// TODO: change input parameter from "uint64_t Address"
361  /// into "SectionedAddress Address"
362  DIEsForAddress getDIEsForAddress(uint64_t Address);
363 
365  object::SectionedAddress Address,
366  DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override;
367  DILineInfo
370  object::SectionedAddress Address, uint64_t Size,
371  DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override;
373  object::SectionedAddress Address,
374  DILineInfoSpecifier Specifier = DILineInfoSpecifier()) override;
375 
376  std::vector<DILocal>
378 
379  bool isLittleEndian() const { return DObj->isLittleEndian(); }
380  static unsigned getMaxSupportedVersion() { return 5; }
381  static bool isSupportedVersion(unsigned version) {
382  return version >= 2 && version <= getMaxSupportedVersion();
383  }
384 
386  return {2, 4, 8};
387  }
388  static bool isAddressSizeSupported(unsigned AddressSize) {
389  return llvm::is_contained(getSupportedAddressSizes(), AddressSize);
390  }
391  template <typename... Ts>
392  static Error checkAddressSizeSupported(unsigned AddressSize,
393  std::error_code EC, char const *Fmt,
394  const Ts &...Vals) {
395  if (isAddressSizeSupported(AddressSize))
396  return Error::success();
397  std::string Buffer;
398  raw_string_ostream Stream(Buffer);
399  Stream << format(Fmt, Vals...)
400  << " has unsupported address size: " << AddressSize
401  << " (supported are ";
402  ListSeparator LS;
403  for (unsigned Size : DWARFContext::getSupportedAddressSizes())
404  Stream << LS << Size;
405  Stream << ')';
406  return make_error<StringError>(Stream.str(), EC);
407  }
408 
409  std::shared_ptr<DWARFContext> getDWOContext(StringRef AbsolutePath);
410 
411  const MCRegisterInfo *getRegisterInfo() const { return RegInfo.get(); }
412 
414  return RecoverableErrorHandler;
415  }
416 
417  function_ref<void(Error)> getWarningHandler() { return WarningHandler; }
418 
420 
421  static std::unique_ptr<DWARFContext>
422  create(const object::ObjectFile &Obj,
424  const LoadedObjectInfo *L = nullptr, std::string DWPName = "",
425  std::function<void(Error)> RecoverableErrorHandler =
427  std::function<void(Error)> WarningHandler =
429 
430  static std::unique_ptr<DWARFContext>
431  create(const StringMap<std::unique_ptr<MemoryBuffer>> &Sections,
432  uint8_t AddrSize, bool isLittleEndian = sys::IsLittleEndianHost,
433  std::function<void(Error)> RecoverableErrorHandler =
435  std::function<void(Error)> WarningHandler =
437 
438  /// Loads register info for the architecture of the provided object file.
439  /// Improves readability of dumped DWARF expressions. Requires the caller to
440  /// have initialized the relevant target descriptions.
442 
443  /// Get address size from CUs.
444  /// TODO: refactor compile_units() to make this const.
445  uint8_t getCUAddrSize();
446 
448  return getDWARFObj().getFile()->getArch();
449  }
450 
451  /// Return the compile unit which contains instruction with provided
452  /// address.
453  /// TODO: change input parameter from "uint64_t Address"
454  /// into "SectionedAddress Address"
456 
457 private:
458  /// Parse a macro[.dwo] or macinfo[.dwo] section.
459  std::unique_ptr<DWARFDebugMacro>
460  parseMacroOrMacinfo(MacroSecType SectionType);
461 
462  void addLocalsForDie(DWARFCompileUnit *CU, DWARFDie Subprogram, DWARFDie Die,
463  std::vector<DILocal> &Result);
464 };
465 
466 } // end namespace llvm
467 
468 #endif // LLVM_DEBUGINFO_DWARF_DWARFCONTEXT_H
llvm::DWARFContext::getDebugNames
const DWARFDebugNames & getDebugNames()
Get a reference to the parsed accelerator table object.
Definition: DWARFContext.cpp:940
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:967
llvm::DWARFContext::dump
void dump(raw_ostream &OS, DIDumpOptions DumpOpts) override
Definition: DWARFContext.h:137
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
llvm::DWARFContext::types_section_units
unit_iterator_range types_section_units()
Get units from .debug_types in this context.
Definition: DWARFContext.h:161
llvm::DWARFContext::create
static std::unique_ptr< DWARFContext > create(const object::ObjectFile &Obj, ProcessDebugRelocations RelocAction=ProcessDebugRelocations::Process, const LoadedObjectInfo *L=nullptr, std::string DWPName="", std::function< void(Error)> RecoverableErrorHandler=WithColor::defaultErrorHandler, std::function< void(Error)> WarningHandler=WithColor::defaultWarningHandler)
Definition: DWARFContext.cpp:1999
llvm::DWARFContext::getEHFrame
Expected< const DWARFDebugFrame * > getEHFrame()
Get a pointer to the parsed eh frame information object.
Definition: DWARFContext.cpp:886
llvm::DWARFContext::unit_iterator_range
DWARFUnitVector::iterator_range unit_iterator_range
Definition: DWARFContext.h:144
llvm::DWARFContext::compile_unit_range
DWARFUnitVector::compile_unit_range compile_unit_range
Definition: DWARFContext.h:145
llvm::DIInliningInfo
A format-neutral container for inlined code description.
Definition: DIContext.h:87
llvm::DILineInfoSpecifier
Controls which fields of DILineInfo container should be filled with data.
Definition: DIContext.h:139
StringRef.h
llvm::DWARFContext::getAppleNames
const AppleAcceleratorTable & getAppleNames()
Get a reference to the parsed accelerator table object.
Definition: DWARFContext.cpp:945
DWARFObject.h
llvm::raw_string_ostream
A raw_ostream that writes to an std::string.
Definition: raw_ostream.h:628
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:1182
llvm::DWARFContext::getNumTypeUnits
unsigned getNumTypeUnits()
Get the number of type units in this context.
Definition: DWARFContext.h:222
llvm::DWARFContext::getDWOCompileUnitForHash
DWARFCompileUnit * getDWOCompileUnitForHash(uint64_t Hash)
Definition: DWARFContext.cpp:730
llvm::Error::success
static ErrorSuccess success()
Create a success value.
Definition: Error.h:329
llvm::DWARFContext::getLineInfoForAddressRange
DILineInfoTable getLineInfoForAddressRange(object::SectionedAddress Address, uint64_t Size, DILineInfoSpecifier Specifier=DILineInfoSpecifier()) override
Definition: DWARFContext.cpp:1278
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:340
llvm::DWARFContext::info_section_units
unit_iterator_range info_section_units()
Get units from .debug_info in this context.
Definition: DWARFContext.h:148
llvm::DWARFContext
DWARFContext This data structure is the top level entity that deals with dwarf debug information pars...
Definition: DWARFContext.h:47
llvm::WithColor::defaultErrorHandler
static void defaultErrorHandler(Error Err)
Implement default handling for Error.
Definition: WithColor.cpp:158
llvm::DWARFContext::getLineInfoForDataAddress
DILineInfo getLineInfoForDataAddress(object::SectionedAddress Address) override
Definition: DWARFContext.cpp:1264
llvm::object::ObjectFile::getArch
virtual Triple::ArchType getArch() const =0
llvm::DWARFContext::getSupportedAddressSizes
static SmallVector< uint8_t, 3 > getSupportedAddressSizes()
Definition: DWARFContext.h:385
llvm::Optional
Definition: APInt.h:33
llvm::DWARFContext::getDebugAbbrevDWO
const DWARFDebugAbbrev * getDebugAbbrevDWO()
Get a pointer to the parsed dwo abbreviations object.
Definition: DWARFContext.cpp:827
llvm::DIContext::CK_DWARF
@ CK_DWARF
Definition: DIContext.h:227
llvm::Expected
Tagged union holding either a T or a Error.
Definition: APFloat.h:41
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:194
llvm::DWARFUnitVector::getNumTypesUnits
unsigned getNumTypesUnits() const
Returns number of units from all .debug_types[.dwo] sections.
Definition: DWARFUnit.h:167
llvm::DWARFContext::getLocalsForAddress
std::vector< DILocal > getLocalsForAddress(object::SectionedAddress Address) override
Definition: DWARFContext.cpp:1230
llvm::DWARFContext::getDebugMacroDWO
const DWARFDebugMacro * getDebugMacroDWO()
Get a pointer to the parsed DebugMacroDWO information object.
Definition: DWARFContext.cpp:908
llvm::WithColor::defaultWarningHandler
static void defaultWarningHandler(Error Warning)
Implement default handling for Warning.
Definition: WithColor.cpp:164
llvm::DWARFContext::ProcessDebugRelocations::Process
@ Process
llvm::DWARFContext::getInliningInfoForAddress
DIInliningInfo getInliningInfoForAddress(object::SectionedAddress Address, DILineInfoSpecifier Specifier=DILineInfoSpecifier()) override
Definition: DWARFContext.cpp:1333
llvm::DWARFContext::getAppleObjC
const AppleAcceleratorTable & getAppleObjC()
Get a reference to the parsed accelerator table object.
Definition: DWARFContext.cpp:961
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:914
llvm::DWARFContext::getDebugAranges
const DWARFDebugAranges * getDebugAranges()
Get a pointer to the parsed DebugAranges object.
Definition: DWARFContext.cpp:851
llvm::DWARFContext::getDWOUnitsVector
const DWARFUnitVector & getDWOUnitsVector()
Definition: DWARFContext.h:188
llvm::DWARFUnitVector::getNumInfoUnits
unsigned getNumInfoUnits() const
Returns number of units from all .debug_info[.dwo] sections.
Definition: DWARFUnit.h:163
llvm::Triple::ArchType
ArchType
Definition: Triple.h:46
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:182
llvm::DWARFContext::getDebugMacinfoDWO
const DWARFDebugMacro * getDebugMacinfoDWO()
Get a pointer to the parsed DebugMacinfoDWO information object.
Definition: DWARFContext.cpp:920
llvm::DWARFDebugAbbrev
Definition: DWARFDebugAbbrev.h:56
llvm::DWARFUnitIndex
Definition: DWARFUnitIndex.h:99
llvm::DWARFContext::getMaxVersion
unsigned getMaxVersion()
Definition: DWARFContext.h:260
llvm::DIContext
Definition: DIContext.h:225
llvm::DWARFContext::getNumCompileUnits
unsigned getNumCompileUnits()
Get the number of compile units in this context.
Definition: DWARFContext.h:216
DWARFDie.h
llvm::DWARFContext::getArch
Triple::ArchType getArch() const
Definition: DWARFContext.h:447
llvm::DWARFContext::checkAddressSizeSupported
static Error checkAddressSizeSupported(unsigned AddressSize, std::error_code EC, char const *Fmt, const Ts &...Vals)
Definition: DWARFContext.h:392
llvm::raw_ostream
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition: raw_ostream.h:52
llvm::DWARFObject
Definition: DWARFObject.h:25
llvm::IndexedInstrProf::Version
const uint64_t Version
Definition: InstrProf.h:1056
llvm::DWARFContext::getStringDWOExtractor
DataExtractor getStringDWOExtractor() const
Definition: DWARFContext.h:343
llvm::DWARFContext::operator=
DWARFContext & operator=(DWARFContext &)=delete
llvm::DWARFContext::ProcessDebugRelocations::Ignore
@ Ignore
llvm::DWARFContext::compile_units
compile_unit_range compile_units()
Get compile units in this context.
Definition: DWARFContext.h:168
llvm::StringMap
StringMap - This is an unconventional map that is specialized for handling keys that are "strings",...
Definition: StringMap.h:110
llvm::DWARFContext::getMaxDWOVersion
unsigned getMaxDWOVersion()
Definition: DWARFContext.h:266
llvm::DWARFContext::getDebugMacro
const DWARFDebugMacro * getDebugMacro()
Get a pointer to the parsed DebugMacro information object.
Definition: DWARFContext.cpp:902
llvm::DWARFContext::dwo_units
unit_iterator_range dwo_units()
Get all units in the DWO context.
Definition: DWARFContext.h:210
llvm::DWARFContext::verify
bool verify(raw_ostream &OS, DIDumpOptions DumpOpts={}) override
Definition: DWARFContext.cpp:767
llvm::DWARFCompileUnit
Definition: DWARFCompileUnit.h:22
llvm::function_ref
An efficient, type-erasing, non-owning reference to a callable.
Definition: STLFunctionalExtras.h:36
llvm::DWARFContext::getNormalUnitsVector
const DWARFUnitVector & getNormalUnitsVector()
Definition: DWARFContext.h:155
llvm::DWARFGdbIndex
Definition: DWARFGdbIndex.h:22
llvm::DIDT_ID_Count
@ DIDT_ID_Count
Definition: DIContext.h:171
llvm::DWARFContext::getTypeUnitForHash
DWARFTypeUnit * getTypeUnitForHash(uint16_t Version, uint64_t Hash, bool IsDWO)
Definition: DWARFContext.cpp:702
llvm::DWARFContext::getNumDWOTypeUnits
unsigned getNumDWOTypeUnits()
Get the number of type units in the DWO context.
Definition: DWARFContext.h:234
index
splat index
Definition: README_ALTIVEC.txt:181
llvm::DWARFDebugLoc
Definition: DWARFDebugLoc.h:89
uint64_t
llvm::DWARFContext::getDebugAbbrev
const DWARFDebugAbbrev * getDebugAbbrev()
Get a pointer to the parsed DebugAbbrev object.
Definition: DWARFContext.cpp:816
llvm::CompileUnit
Stores all information relating to a compile unit, be it in its original instance in the object file ...
Definition: DWARFLinkerCompileUnit.h:47
llvm::DWARFContext::clearLineTableForUnit
void clearLineTableForUnit(DWARFUnit *U)
Definition: DWARFContext.cpp:1006
llvm::DWARFContext::getCUAddrSize
uint8_t getCUAddrSize()
Get address size from CUs.
Definition: DWARFContext.cpp:2039
llvm::DWARFContext::dwo_compile_units
compile_unit_range dwo_compile_units()
Get compile units in the DWO context.
Definition: DWARFContext.h:201
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:417
llvm::is_contained
bool is_contained(R &&Range, const E &Element)
Wrapper function around std::find to detect if an element exists in a container.
Definition: STLExtras.h:1673
llvm::DWARFContext::DIEsForAddress::BlockDIE
DWARFDie BlockDIE
Definition: DWARFContext.h:354
ObjectFile.h
llvm::DWARFContext::isAddressSizeSupported
static bool isAddressSizeSupported(unsigned AddressSize)
Definition: DWARFContext.h:388
llvm::DWARFContext::getUnitAtIndex
DWARFUnit * getUnitAtIndex(unsigned index)
Get the unit at the specified index.
Definition: DWARFContext.h:240
function
print Print MemDeps of function
Definition: MemDepPrinter.cpp:82
llvm::DWARFContext::getTUIndex
const DWARFUnitIndex & getTUIndex()
Definition: DWARFContext.cpp:795
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:1077
llvm::DWARFContext::getGdbIndex
DWARFGdbIndex & getGdbIndex()
Definition: DWARFContext.cpp:806
llvm::DWARFContext::getDWOContext
std::shared_ptr< DWARFContext > getDWOContext(StringRef AbsolutePath)
Definition: DWARFContext.cpp:1402
llvm::DWARFContext::getDebugFrame
Expected< const DWARFDebugFrame * > getDebugFrame()
Get a pointer to the parsed frame information object.
Definition: DWARFContext.cpp:860
llvm::DWARFContext::isLittleEndian
bool isLittleEndian() const
Definition: DWARFContext.h:379
llvm::DWARFContext::getDebugLoc
const DWARFDebugLoc * getDebugLoc()
Get a pointer to the parsed DebugLoc object.
Definition: DWARFContext.cpp:837
RegInfo
Definition: AMDGPUAsmParser.cpp:2561
llvm::StringRef
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
llvm::object::ObjectFile
This class is the base class for all object file types.
Definition: ObjectFile.h:228
llvm::DWARFContext::DIEsForAddress::FunctionDIE
DWARFDie FunctionDIE
Definition: DWARFContext.h:353
llvm::DWARFUnitVector::compile_unit_range
decltype(make_filter_range(std::declval< iterator_range >(), isCompileUnit)) compile_unit_range
Definition: DWARFUnit.h:137
llvm::DWARFContext::normal_units
unit_iterator_range normal_units()
Get all normal compile/type units in this context.
Definition: DWARFContext.h:176
llvm::DWARFContext::getLineStringExtractor
DataExtractor getLineStringExtractor() const
Definition: DWARFContext.h:346
llvm::AppleAcceleratorTable
This implements the Apple accelerator table format, a precursor of the DWARF 5 accelerator table form...
Definition: DWARFAcceleratorTable.h:83
llvm::format
format_object< Ts... > format(const char *Fmt, const Ts &... Vals)
These are helper functions used to produce formatted output.
Definition: Format.h:124
llvm::DWARFContext::getNumDWOCompileUnits
unsigned getNumDWOCompileUnits()
Get the number of compile units in the DWO context.
Definition: DWARFContext.h:228
llvm::DWARFDebugMacro
Definition: DWARFDebugMacro.h:22
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:512
llvm::DWARFContext::getDIEForOffset
DWARFDie getDIEForOffset(uint64_t Offset)
Get a DIE given an exact offset.
Definition: DWARFContext.cpp:760
llvm::DWARFContext::getCUIndex
const DWARFUnitIndex & getCUIndex()
Definition: DWARFContext.cpp:784
llvm::DWARFContext::getLineInfoForAddress
DILineInfo getLineInfoForAddress(object::SectionedAddress Address, DILineInfoSpecifier Specifier=DILineInfoSpecifier()) override
Definition: DWARFContext.cpp:1242
llvm::DWARFContext::~DWARFContext
~DWARFContext() override
DIContext.h
llvm::DWARFContext::setMaxVersionIfGreater
void setMaxVersionIfGreater(unsigned Version)
Definition: DWARFContext.h:272
llvm::DWARFContext::getDWOUnitAtIndex
DWARFUnit * getDWOUnitAtIndex(unsigned index)
Get the unit at the specified index for the DWO units.
Definition: DWARFContext.h:246
llvm::DWARFTypeUnit
Definition: DWARFTypeUnit.h:24
uint16_t
llvm::DWARFContext::getRegisterInfo
const MCRegisterInfo * getRegisterInfo() const
Definition: DWARFContext.h:411
llvm::object::OwningBinary
Definition: RuntimeDyld.h:36
llvm::DWARFUnit
Definition: DWARFUnit.h:207
llvm::Error
Lightweight error class with error context and mandatory checking.
Definition: Error.h:155
llvm::AArch64CC::LS
@ LS
Definition: AArch64BaseInfo.h:264
llvm::DWARFContext::getCompileUnitForOffset
DWARFCompileUnit * getCompileUnitForOffset(uint64_t Offset)
Return the compile unit that includes an offset (relative to .debug_info).
Definition: DWARFContext.cpp:1046
DataExtractor.h
llvm::DWARFContext::getRecoverableErrorHandler
function_ref< void(Error)> getRecoverableErrorHandler()
Definition: DWARFContext.h:413
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
llvm::DWARFContext::classof
static bool classof(const DIContext *DICtx)
Definition: DWARFContext.h:128
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:126
llvm::object::SectionedAddress
Definition: ObjectFile.h:144
llvm::iterator_range
A range adaptor for a pair of iterators.
Definition: iterator_range.h:30
llvm::DWARFDebugLine::LineTable
Definition: DWARFDebugLine.h:226
llvm::isCompileUnit
bool isCompileUnit(const std::unique_ptr< DWARFUnit > &U)
Definition: DWARFUnit.h:574
llvm::DWARFContext::getCompileUnitForAddress
DWARFCompileUnit * getCompileUnitForAddress(uint64_t Address)
Return the compile unit which contains instruction with provided address.
Definition: DWARFContext.cpp:1052
llvm::DWARFUnitVector::iterator_range
llvm::iterator_range< typename UnitVector::iterator > iterator_range
Definition: DWARFUnit.h:134
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
StringMap.h
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:73
llvm::DWARFContext::DIEsForAddress
Wraps the returned DIEs for a given address.
Definition: DWARFContext.h:351
llvm::DWARFContext::ProcessDebugRelocations
ProcessDebugRelocations
Definition: DWARFContext.h:419
llvm::DWARFContext::isSupportedVersion
static bool isSupportedVersion(unsigned version)
Definition: DWARFContext.h:381
llvm::DWARFDebugAranges
Definition: DWARFDebugAranges.h:23
llvm::raw_string_ostream::str
std::string & str()
Returns the string's reference.
Definition: raw_ostream.h:646
CU
Definition: AArch64AsmBackend.cpp:504
llvm::DWARFContext::getAppleTypes
const AppleAcceleratorTable & getAppleTypes()
Get a reference to the parsed accelerator table object.
Definition: DWARFContext.cpp:950
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:352
llvm::DWARFContext::getAppleNamespaces
const AppleAcceleratorTable & getAppleNamespaces()
Get a reference to the parsed accelerator table object.
Definition: DWARFContext.cpp:955
llvm::DWARFContext::loadRegisterInfo
Error loadRegisterInfo(const object::ObjectFile &Obj)
Loads register info for the architecture of the provided object file.
Definition: DWARFContext.cpp:2022
llvm::DWARFContext::getMaxSupportedVersion
static unsigned getMaxSupportedVersion()
Definition: DWARFContext.h:380
llvm::MachO::SectionType
SectionType
These are the section type and attributes fields.
Definition: MachO.h:122
llvm::DIContext::getKind
DIContextKind getKind() const
Definition: DIContext.h:232
llvm::DIDumpOptions
Container for dump options that control which debug information will be dumped.
Definition: DIContext.h:188
llvm::DWARFUnitVector
Describe a collection of units.
Definition: DWARFUnit.h:124