LLVM 22.0.0git
DwarfCompileUnit.h
Go to the documentation of this file.
1//===- llvm/CodeGen/DwarfCompileUnit.h - Dwarf Compile Unit -----*- 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// This file contains support for writing dwarf compile unit.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_LIB_CODEGEN_ASMPRINTER_DWARFCOMPILEUNIT_H
14#define LLVM_LIB_CODEGEN_ASMPRINTER_DWARFCOMPILEUNIT_H
15
16#include "DwarfDebug.h"
17#include "DwarfUnit.h"
18#include "llvm/ADT/ArrayRef.h"
19#include "llvm/ADT/DenseMap.h"
21#include "llvm/ADT/StringMap.h"
22#include "llvm/ADT/StringRef.h"
28#include <cstdint>
29#include <memory>
30
31namespace llvm {
32
33class AsmPrinter;
34class DIE;
35class DIELoc;
36class DIEValueList;
37class DwarfFile;
38class GlobalVariable;
39class MCExpr;
40class MCSymbol;
41class MDNode;
42
43enum class UnitKind { Skeleton, Full };
44
45class DwarfCompileUnit final : public DwarfUnit {
46 bool HasRangeLists = false;
47
48 /// The start of the unit line section, this is also
49 /// reused in appyStmtList.
50 MCSymbol *LineTableStartSym;
51
52 /// Skeleton unit associated with this unit.
53 DwarfCompileUnit *Skeleton = nullptr;
54
55 /// The start of the unit macro info within macro section.
56 MCSymbol *MacroLabelBegin;
57
58 /// GlobalNames - A map of globally visible named entities for this unit.
59 StringMap<const DIE *> GlobalNames;
60
61 /// GlobalTypes - A map of globally visible types for this unit.
62 StringMap<const DIE *> GlobalTypes;
63
64 // List of ranges for a given compile unit.
66
67 // The base address of this unit, if any. Used for relative references in
68 // ranges/locs.
69 const MCSymbol *BaseAddress = nullptr;
70
71 using MDNodeSetVector =
74
75 // List of entities (either static locals, types or imports) that
76 // belong to subprograms within this CU.
77 MDNodeSetVector DeferredLocalDecls;
78
79 // List of concrete lexical block scopes belong to subprograms within this CU.
81
82 // List of abstract local scopes (either DISubprogram or DILexicalBlock).
83 DenseMap<const DILocalScope *, DIE *> AbstractLocalScopeDIEs;
84
85 // List of inlined lexical block scopes that belong to subprograms within this
86 // CU.
88
90
91 /// DWO ID for correlating skeleton and split units.
92 uint64_t DWOId = 0;
93
94 const DIFile *LastFile = nullptr;
95 unsigned LastFileID;
96
97 /// \anchor applyConcreteDbgVariableAttribute
98 /// \name applyConcreteDbgVariableAttribute
99 /// Overload set which applies attributes to \c VariableDie based on
100 /// the active variant of \c DV, which is passed as the first argument.
101 ///@{
102
103 /// See \ref applyConcreteDbgVariableAttribute
104 void applyConcreteDbgVariableAttributes(const Loc::Single &Single,
105 const DbgVariable &DV,
106 DIE &VariableDie);
107 /// See \ref applyConcreteDbgVariableAttribute
108 void applyConcreteDbgVariableAttributes(const Loc::Multi &Multi,
109 const DbgVariable &DV,
110 DIE &VariableDie);
111 /// See \ref applyConcreteDbgVariableAttribute
112 void applyConcreteDbgVariableAttributes(const Loc::MMI &MMI,
113 const DbgVariable &DV,
114 DIE &VariableDie);
115 /// See \ref applyConcreteDbgVariableAttribute
116 void applyConcreteDbgVariableAttributes(const Loc::EntryValue &EntryValue,
117 const DbgVariable &DV,
118 DIE &VariableDie);
119 /// See \ref applyConcreteDbgVariableAttribute
120 void applyConcreteDbgVariableAttributes(const std::monostate &,
121 const DbgVariable &DV,
122 DIE &VariableDie);
123
124 ///@}
125
126 bool isDwoUnit() const override;
127
128 DenseMap<const DILocalScope *, DIE *> &getAbstractScopeDIEs() {
129 if (isDwoUnit() && !DD->shareAcrossDWOCUs())
130 return AbstractLocalScopeDIEs;
131 return DU->getAbstractScopeDIEs();
132 }
133
135 if (isDwoUnit() && !DD->shareAcrossDWOCUs())
136 return AbstractEntities;
137 return DU->getAbstractEntities();
138 }
139
140 void finishNonUnitTypeDIE(DIE& D, const DICompositeType *CTy) override;
141
142 /// Add info for Wasm-global-based relocation.
143 void addWasmRelocBaseGlobal(DIELoc *Loc, StringRef GlobalName,
144 uint64_t GlobalIndex);
145
146public:
147 DwarfCompileUnit(unsigned UID, const DICompileUnit *Node, AsmPrinter *A,
148 DwarfDebug *DW, DwarfFile *DWU,
149 UnitKind Kind = UnitKind::Full);
150
151 bool hasRangeLists() const { return HasRangeLists; }
152
154 return Skeleton;
155 }
156
157 bool includeMinimalInlineScopes() const;
158
159 bool emitFuncLineTableOffsets() const;
160
161 void initStmtList();
162
163 /// Apply the DW_AT_stmt_list from this compile unit to the specified DIE.
164 void applyStmtList(DIE &D);
165
166 /// Get line table start symbol for this unit.
167 MCSymbol *getLineTableStartSym() const { return LineTableStartSym; }
168
169 /// A pair of GlobalVariable and DIExpression.
170 struct GlobalExpr {
173 };
174
175 struct BaseTypeRef {
178 unsigned BitSize;
180 DIE *Die = nullptr;
181 };
182
183 std::vector<BaseTypeRef> ExprRefedBaseTypes;
184
185 /// Get or create global variable DIE.
186 DIE *
188 ArrayRef<GlobalExpr> GlobalExprs);
189
191 ArrayRef<GlobalExpr> GlobalExprs);
192
193 void addLocationAttribute(DIE *ToDIE, const DIGlobalVariable *GV,
194 ArrayRef<GlobalExpr> GlobalExprs);
195
196 /// addLabelAddress - Add a dwarf label attribute data and value using
197 /// either DW_FORM_addr or DW_FORM_GNU_addr_index.
199 const MCSymbol *Label);
200
201 /// addLocalLabelAddress - Add a dwarf label attribute data and value using
202 /// DW_FORM_addr only.
204 const MCSymbol *Label);
205
206 DwarfCompileUnit &getCU() override { return *this; }
207
208 unsigned getOrCreateSourceID(const DIFile *File) override;
209
210 /// addRange - Add an address range to the list of ranges for this unit.
212
213 void attachLowHighPC(DIE &D, const MCSymbol *Begin, const MCSymbol *End);
214
215 /// Find DIE for the given subprogram and attach appropriate
216 /// DW_AT_low_pc, DW_AT_high_pc and DW_AT_LLVM_stmt_sequence attributes.
217 /// If there are global variables in this scope then create and insert DIEs
218 /// for these variables.
219 DIE &updateSubprogramScopeDIE(const DISubprogram *SP, MCSymbol *LineTableSym);
220
221 void constructScopeDIE(LexicalScope *Scope, DIE &ParentScopeDIE);
222
223 /// A helper function to construct a RangeSpanList for a given
224 /// lexical scope.
226
228
230 const SmallVectorImpl<InsnRange> &Ranges);
231
232 /// This scope represents an inlined body of a function. Construct a
233 /// DIE to represent this concrete inlined copy of the function.
234 DIE *constructInlinedScopeDIE(LexicalScope *Scope, DIE &ParentScopeDIE);
235
236 /// Construct new DW_TAG_lexical_block for this scope and
237 /// attach DW_AT_low_pc/DW_AT_high_pc labels.
239
240 /// Get a DIE for the given DILexicalBlock.
241 /// Note that this function assumes that the DIE has been already created
242 /// and it's an error, if it hasn't.
244
245 /// Construct a DIE for the given DbgVariable.
246 DIE *constructVariableDIE(DbgVariable &DV, bool Abstract = false);
247
248 /// Convenience overload which writes the DIE pointer into an out variable
249 /// ObjectPointer in addition to returning it.
251 DIE *&ObjectPointer);
252
253 /// Construct a DIE for the given DbgLabel.
255
256 void createBaseTypeDIEs();
257
258 /// Construct a DIE for a given scope.
259 /// This instance of 'getOrCreateContextDIE()' can handle DILocalScope.
260 DIE *getOrCreateContextDIE(const DIScope *Ty) override;
261
262 /// Construct a DIE for this subprogram scope.
264 MCSymbol *LineTableSym);
265
266 DIE *createAndAddScopeChildren(LexicalScope *Scope, DIE &ScopeDIE);
267
269
270 /// Whether to use the GNU analog for a DWARF5 tag, attribute, or location
271 /// atom. Only applicable when emitting otherwise DWARF4-compliant debug info.
272 bool useGNUAnalogForDwarf5Feature() const;
273
274 /// This takes a DWARF 5 tag and returns it or a GNU analog.
276
277 /// This takes a DWARF 5 attribute and returns it or a GNU analog.
279
280 /// This takes a DWARF 5 location atom and either returns it or a GNU analog.
282
283 /// Construct a call site entry DIE describing a call within \p Scope to a
284 /// callee described by \p CalleeSP.
285 /// \p IsTail specifies whether the call is a tail call.
286 /// \p PCAddr points to the PC value after the call instruction.
287 /// \p CallAddr points to the PC value at the call instruction (or is null).
288 /// \p CallReg is a register location for an indirect call. For direct calls
289 /// the \p CallReg is set to 0.
290 DIE &constructCallSiteEntryDIE(DIE &ScopeDIE, const DISubprogram *CalleeSP,
291 bool IsTail, const MCSymbol *PCAddr,
292 const MCSymbol *CallAddr, unsigned CallReg,
293 DIType *AllocSiteTy);
294 /// Construct call site parameter DIEs for the \p CallSiteDIE. The \p Params
295 /// were collected by the \ref collectCallSiteParameters.
296 /// Note: The order of parameters does not matter, since debuggers recognize
297 /// call site parameters by the DW_AT_location attribute.
298 void constructCallSiteParmEntryDIEs(DIE &CallSiteDIE,
300
301 /// Get or create a DIE for an imported entity.
304
306 void finishEntityDefinition(const DbgEntity *Entity);
308
309 /// Find abstract variable associated with Var.
312 void createAbstractEntity(const DINode *Node, LexicalScope *Scope);
313
314 /// Set the skeleton unit associated with this unit.
315 void setSkeleton(DwarfCompileUnit &Skel) { Skeleton = &Skel; }
316
317 unsigned getHeaderSize() const override {
318 // DWARF v5 added the DWO ID to the header for split/skeleton units.
319 unsigned DWOIdSize =
320 DD->getDwarfVersion() >= 5 && DD->useSplitDwarf() ? sizeof(uint64_t)
321 : 0;
322 return DwarfUnit::getHeaderSize() + DWOIdSize;
323 }
324 unsigned getLength() {
325 return Asm->getUnitLengthFieldByteSize() + // Length field
327 }
328
329 void emitHeader(bool UseOffsets) override;
330
331 /// Add the DW_AT_addr_base attribute to the unit DIE.
332 void addAddrTableBase();
333
335 return MacroLabelBegin;
336 }
337
338 /// Add a new global name to the compile unit.
339 void addGlobalName(StringRef Name, const DIE &Die,
340 const DIScope *Context) override;
341
342 /// Add a new global name present in a type unit to this compile unit.
343 void addGlobalNameForTypeUnit(StringRef Name, const DIScope *Context);
344
345 /// Add a new global type to the compile unit.
346 void addGlobalTypeImpl(const DIType *Ty, const DIE &Die,
347 const DIScope *Context) override;
348
349 /// Add a new global type present in a type unit to this compile unit.
350 void addGlobalTypeUnitType(const DIType *Ty, const DIScope *Context);
351
352 const StringMap<const DIE *> &getGlobalNames() const { return GlobalNames; }
353 const StringMap<const DIE *> &getGlobalTypes() const { return GlobalTypes; }
354
355 /// Add DW_AT_location attribute for a DbgVariable based on provided
356 /// MachineLocation.
357 void addVariableAddress(const DbgVariable &DV, DIE &Die,
358 MachineLocation Location);
359 /// Add an address attribute to a die based on the location provided.
361 const MachineLocation &Location);
362
363 /// Start with the address based on the location provided, and generate the
364 /// DWARF information necessary to find the actual variable (navigating the
365 /// extra location information encoded in the type) based on the starting
366 /// location. Add the DWARF information to the die.
367 void addComplexAddress(const DIExpression *DIExpr, DIE &Die,
369 const MachineLocation &Location);
370
371 /// Add a Dwarf loclistptr attribute data and value.
372 void addLocationList(DIE &Die, dwarf::Attribute Attribute, unsigned Index);
373
374 /// Add attributes to \p Var which reflect the common attributes of \p
375 /// VariableDie, namely those which are not dependant on the active variant.
377 DIE &VariableDie);
378
379 /// Add a Dwarf expression attribute data and value.
380 void addExpr(DIELoc &Die, dwarf::Form Form, const MCExpr *Expr);
381
383 DIE &SPDie);
384
385 void applyLabelAttributes(const DbgLabel &Label, DIE &LabelDie);
386
387 /// getRanges - Get the list of ranges for this unit.
388 const SmallVectorImpl<RangeSpan> &getRanges() const { return CURanges; }
389 SmallVector<RangeSpan, 2> takeRanges() { return std::move(CURanges); }
390
391 void setBaseAddress(const MCSymbol *Base) { BaseAddress = Base; }
392 const MCSymbol *getBaseAddress() const { return BaseAddress; }
393
394 uint64_t getDWOId() const { return DWOId; }
395 void setDWOId(uint64_t DwoId) { DWOId = DwoId; }
396
397 bool hasDwarfPubSections() const;
398
399 void addBaseTypeRef(DIEValueList &Die, int64_t Idx);
400
401 MDNodeSetVector &getDeferredLocalDecls() { return DeferredLocalDecls; }
402};
403
404} // end namespace llvm
405
406#endif // LLVM_LIB_CODEGEN_ASMPRINTER_DWARFCOMPILEUNIT_H
This file defines the StringMap class.
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")
Returns the sub type a function will return at a given Idx Should correspond to the result type of an ExtractValue instruction executed with just that one unsigned Idx
This file defines the DenseMap class.
This file contains constants used for implementing Dwarf debug support.
std::string Name
uint32_t Index
bool End
Definition: ELF_riscv.cpp:480
ConstantRange Range(APInt(BitWidth, Low), APInt(BitWidth, High))
This file defines the SmallVector class.
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition: ArrayRef.h:41
This class is intended to be used as a driving class for all asm writers.
Definition: AsmPrinter.h:90
unsigned int getUnitLengthFieldByteSize() const
Returns 4 for DWARF32 and 12 for DWARF64.
Debug common block.
DIELoc - Represents an expression location.
Definition: DIE.h:1020
DIE & getUnitDie()
Definition: DIE.h:1009
A list of DIE values.
Definition: DIE.h:698
A structured debug information entry.
Definition: DIE.h:828
unsigned getSize() const
Definition: DIE.h:871
DWARF expression.
An imported module (C++ using directive or similar).
Debug lexical block.
Tagged DWARF-like metadata node.
Base class for scope-like contexts.
Subprogram description. Uses SubclassData1.
Base class for types.
This class is defined as the common parent of DbgVariable and DbgLabel such that it could levarage po...
Definition: DwarfDebug.h:65
This class is used to track label information.
Definition: DwarfDebug.h:289
std::pair< const DINode *, const DILocation * > InlinedEntity
This class is used to track local variable information.
Definition: DwarfDebug.h:214
bool useGNUAnalogForDwarf5Feature() const
Whether to use the GNU analog for a DWARF5 tag, attribute, or location atom.
void constructCallSiteParmEntryDIEs(DIE &CallSiteDIE, SmallVector< DbgCallSiteParam, 4 > &Params)
Construct call site parameter DIEs for the CallSiteDIE.
void attachLowHighPC(DIE &D, const MCSymbol *Begin, const MCSymbol *End)
void emitHeader(bool UseOffsets) override
Emit the header for this unit, not including the initial length field.
unsigned getHeaderSize() const override
Compute the size of a header for this unit, not including the initial length field.
dwarf::Tag getDwarf5OrGNUTag(dwarf::Tag Tag) const
This takes a DWARF 5 tag and returns it or a GNU analog.
DIE & updateSubprogramScopeDIE(const DISubprogram *SP, MCSymbol *LineTableSym)
Find DIE for the given subprogram and attach appropriate DW_AT_low_pc, DW_AT_high_pc and DW_AT_LLVM_s...
void constructAbstractSubprogramScopeDIE(LexicalScope *Scope)
bool includeMinimalInlineScopes() const
DIE * getOrCreateImportedEntityDIE(const DIImportedEntity *IE)
Get or create a DIE for an imported entity.
SmallVector< RangeSpan, 2 > takeRanges()
void addBaseTypeRef(DIEValueList &Die, int64_t Idx)
void addGlobalNameForTypeUnit(StringRef Name, const DIScope *Context)
Add a new global name present in a type unit to this compile unit.
void finishEntityDefinition(const DbgEntity *Entity)
void addRange(RangeSpan Range)
addRange - Add an address range to the list of ranges for this unit.
void addAddrTableBase()
Add the DW_AT_addr_base attribute to the unit DIE.
MCSymbol * getMacroLabelBegin() const
std::vector< BaseTypeRef > ExprRefedBaseTypes
DIE * constructInlinedScopeDIE(LexicalScope *Scope, DIE &ParentScopeDIE)
This scope represents an inlined body of a function.
void addScopeRangeList(DIE &ScopeDIE, SmallVector< RangeSpan, 2 > Range)
A helper function to construct a RangeSpanList for a given lexical scope.
uint64_t getDWOId() const
DIE * getOrCreateCommonBlock(const DICommonBlock *CB, ArrayRef< GlobalExpr > GlobalExprs)
void addVariableAddress(const DbgVariable &DV, DIE &Die, MachineLocation Location)
Add DW_AT_location attribute for a DbgVariable based on provided MachineLocation.
DbgValueHistoryMap::InlinedEntity InlinedEntity
Find abstract variable associated with Var.
MDNodeSetVector & getDeferredLocalDecls()
DIE * getLexicalBlockDIE(const DILexicalBlock *LB)
Get a DIE for the given DILexicalBlock.
void addGlobalName(StringRef Name, const DIE &Die, const DIScope *Context) override
Add a new global name to the compile unit.
void createAbstractEntity(const DINode *Node, LexicalScope *Scope)
void applyStmtList(DIE &D)
Apply the DW_AT_stmt_list from this compile unit to the specified DIE.
DIE * getOrCreateContextDIE(const DIScope *Ty) override
Construct a DIE for a given scope.
void applyCommonDbgVariableAttributes(const DbgVariable &Var, DIE &VariableDie)
Add attributes to Var which reflect the common attributes of VariableDie, namely those which are not ...
DIE & constructCallSiteEntryDIE(DIE &ScopeDIE, const DISubprogram *CalleeSP, bool IsTail, const MCSymbol *PCAddr, const MCSymbol *CallAddr, unsigned CallReg, DIType *AllocSiteTy)
Construct a call site entry DIE describing a call within Scope to a callee described by CalleeSP.
DIE & constructSubprogramScopeDIE(const DISubprogram *Sub, LexicalScope *Scope, MCSymbol *LineTableSym)
Construct a DIE for this subprogram scope.
DIE * constructVariableDIE(DbgVariable &DV, bool Abstract=false)
Construct a DIE for the given DbgVariable.
dwarf::LocationAtom getDwarf5OrGNULocationAtom(dwarf::LocationAtom Loc) const
This takes a DWARF 5 location atom and either returns it or a GNU analog.
DIE * getOrCreateGlobalVariableDIE(const DIGlobalVariable *GV, ArrayRef< GlobalExpr > GlobalExprs)
Get or create global variable DIE.
void addLocationAttribute(DIE *ToDIE, const DIGlobalVariable *GV, ArrayRef< GlobalExpr > GlobalExprs)
DwarfCompileUnit * getSkeleton() const
void applySubprogramAttributesToDefinition(const DISubprogram *SP, DIE &SPDie)
DIE * createAndAddScopeChildren(LexicalScope *Scope, DIE &ScopeDIE)
void setSkeleton(DwarfCompileUnit &Skel)
Set the skeleton unit associated with this unit.
void addExpr(DIELoc &Die, dwarf::Form Form, const MCExpr *Expr)
Add a Dwarf expression attribute data and value.
dwarf::Attribute getDwarf5OrGNUAttr(dwarf::Attribute Attr) const
This takes a DWARF 5 attribute and returns it or a GNU analog.
void addAddress(DIE &Die, dwarf::Attribute Attribute, const MachineLocation &Location)
Add an address attribute to a die based on the location provided.
void applyLabelAttributes(const DbgLabel &Label, DIE &LabelDie)
void setDWOId(uint64_t DwoId)
void addLocalLabelAddress(DIE &Die, dwarf::Attribute Attribute, const MCSymbol *Label)
addLocalLabelAddress - Add a dwarf label attribute data and value using DW_FORM_addr only.
DIE * constructLexicalScopeDIE(LexicalScope *Scope)
Construct new DW_TAG_lexical_block for this scope and attach DW_AT_low_pc/DW_AT_high_pc labels.
void addGlobalTypeImpl(const DIType *Ty, const DIE &Die, const DIScope *Context) override
Add a new global type to the compile unit.
MCSymbol * getLineTableStartSym() const
Get line table start symbol for this unit.
const SmallVectorImpl< RangeSpan > & getRanges() const
getRanges - Get the list of ranges for this unit.
unsigned getOrCreateSourceID(const DIFile *File) override
Look up the source ID for the given file.
void constructScopeDIE(LexicalScope *Scope, DIE &ParentScopeDIE)
const MCSymbol * getBaseAddress() const
const StringMap< const DIE * > & getGlobalNames() const
DIE * constructLabelDIE(DbgLabel &DL, const LexicalScope &Scope)
Construct a DIE for the given DbgLabel.
void addGlobalTypeUnitType(const DIType *Ty, const DIScope *Context)
Add a new global type present in a type unit to this compile unit.
DbgEntity * getExistingAbstractEntity(const DINode *Node)
const StringMap< const DIE * > & getGlobalTypes() const
void addLabelAddress(DIE &Die, dwarf::Attribute Attribute, const MCSymbol *Label)
addLabelAddress - Add a dwarf label attribute data and value using either DW_FORM_addr or DW_FORM_GNU...
void addLocationList(DIE &Die, dwarf::Attribute Attribute, unsigned Index)
Add a Dwarf loclistptr attribute data and value.
bool emitFuncLineTableOffsets() const
void addComplexAddress(const DIExpression *DIExpr, DIE &Die, dwarf::Attribute Attribute, const MachineLocation &Location)
Start with the address based on the location provided, and generate the DWARF information necessary t...
DIE * constructImportedEntityDIE(const DIImportedEntity *IE)
DwarfCompileUnit & getCU() override
void attachRangesOrLowHighPC(DIE &D, SmallVector< RangeSpan, 2 > Ranges)
void setBaseAddress(const MCSymbol *Base)
void finishSubprogramDefinition(const DISubprogram *SP)
Collects and handles dwarf debug information.
Definition: DwarfDebug.h:351
uint16_t getDwarfVersion() const
Returns the Dwarf Version.
bool shareAcrossDWOCUs() const
Definition: DwarfDebug.cpp:547
bool useSplitDwarf() const
Returns whether or not to change the current debug info for the split dwarf proposal support.
Definition: DwarfDebug.h:824
DenseMap< const DINode *, std::unique_ptr< DbgEntity > > & getAbstractEntities()
Definition: DwarfFile.h:173
DenseMap< const DILocalScope *, DIE * > & getAbstractScopeDIEs()
Definition: DwarfFile.h:169
This dwarf writer support class manages information associated with a source file.
Definition: DwarfUnit.h:35
DwarfDebug * DD
Definition: DwarfUnit.h:55
virtual unsigned getHeaderSize() const
Compute the size of a header for this unit, not including the initial length field.
Definition: DwarfUnit.h:293
DwarfFile * DU
Definition: DwarfUnit.h:56
AsmPrinter * Asm
Target of Dwarf emission.
Definition: DwarfUnit.h:46
LexicalScope - This class is used to track scope information.
Definition: LexicalScopes.h:45
Multi-value location description.
Definition: DwarfDebug.h:142
Single value location description.
Definition: DwarfDebug.h:131
Base class for the full range of assembler expressions which are needed for parsing.
Definition: MCExpr.h:34
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Definition: MCSymbol.h:42
SmallPtrSet - This class implements a set which is optimized for holding SmallSize or less elements.
Definition: SmallPtrSet.h:541
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
Definition: SmallVector.h:574
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
Definition: SmallVector.h:1197
StringMap - This is an unconventional map that is specialized for handling keys that are "strings",...
Definition: StringMap.h:133
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:55
Attribute
Attributes.
Definition: Dwarf.h:124
LocationAtom
Definition: Dwarf.h:137
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
@ Sub
Subtraction of integers.
BaseTypeRef(unsigned BitSize, dwarf::TypeKind Encoding)
A pair of GlobalVariable and DIExpression.
Single location defined by (potentially multiple) EntryValueInfo.
Definition: DwarfDebug.h:172
Single location defined by (potentially multiple) MMI entries.
Definition: DwarfDebug.h:159