21 : Asm(AP), Abbrevs(AbbrevAllocator), StrPool(DA, *Asm, Pref) {}
24 CUs.push_back(std::move(U));
30 for (
const auto &TheU : CUs)
48 Asm->OutStreamer->switchSection(S);
53 Asm->OutStreamer->emitLabel(EndLabel);
63 for (
const auto &TheU : CUs) {
64 if (TheU->getCUNode()->isDebugDirectivesOnly())
69 if (TheU->getUnitDie().values().empty())
72 TheU->setDebugSectionOffset(SecOffset);
75 if (SecOffset > UINT32_MAX && !Asm->isDwarf64())
77 "for the 32-bit DWARF format.");
82 unsigned Offset = Asm->getUnitLengthFieldByteSize() +
101 bool UseRelativeOffsets) {
102 StrPool.emit(*Asm, StrSection, OffsetSection, UseRelativeOffsets);
106 auto &ScopeVars = ScopeVariables[LS];
108 if (
unsigned ArgNum = DV->
getArg()) {
109 auto Ret = ScopeVars.Args.insert({ArgNum, Var});
113 ScopeVars.Locals.push_back(Var);
122std::pair<uint32_t, RangeSpanList *>
124 bool CanReuseLastRange =
false;
126 if (!CURangeLists.empty()) {
127 auto Last = CURangeLists.back();
129 CanReuseLastRange =
true;
133 if (!CanReuseLastRange) {
134 CURangeLists.push_back(
RangeSpanList{Asm->createTempSymbol(
"debug_ranges"),
138 return std::make_pair(CURangeLists.size() - 1, &CURangeLists.back());
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This class is intended to be used as a driving class for all asm writers.
bool isDebugDirectivesOnly() const
MCSection * getSection() const
Return the section that this DIEUnit will be emitted into.
A structured debug information entry.
LLVM_ABI unsigned computeOffsetsAndAbbrevs(const dwarf::FormParams &FormParams, DIEAbbrevSet &AbbrevSet, unsigned CUOffset)
Compute the offset of this DIE and all its children.
This class is used to track label information.
This class is used to track local variable information.
const DILocalVariable * getVariable() const
unsigned computeSizeAndOffset(DIE &Die, unsigned Offset)
Compute the size and offset of a DIE given an incoming Offset.
void addScopeLabel(LexicalScope *LS, DbgLabel *Label)
void addUnit(std::unique_ptr< DwarfCompileUnit > U)
Add a unit to the list of CUs.
void computeSizeAndOffsets()
Compute the size and offset of all the DIEs.
unsigned computeSizeAndOffsetsForUnit(DwarfUnit *TheU)
Compute the size and offset of all the DIEs in the given unit.
void emitUnits(bool UseOffsets)
Emit all of the units to the section listed with the given abbreviation section.
void emitUnit(DwarfUnit *TheU, bool UseOffsets)
Emit the given unit to its section.
void emitAbbrevs(MCSection *)
Emit a set of abbreviations to the specific section.
DwarfFile(AsmPrinter *AP, StringRef Pref, BumpPtrAllocator &DA)
void emitStrings(MCSection *StrSection, MCSection *OffsetSection=nullptr, bool UseRelativeOffsets=false)
Emit all of the strings to the section given.
void addScopeVariable(LexicalScope *LS, DbgVariable *Var)
std::pair< uint32_t, RangeSpanList * > addRange(const DwarfCompileUnit &CU, SmallVector< RangeSpan, 2 > R)
This dwarf writer support class manages information associated with a source file.
virtual void emitHeader(bool UseOffsets)=0
Emit the header for this unit, not including the initial length field.
virtual unsigned getHeaderSize() const
Compute the size of a header for this unit, not including the initial length field.
MCSymbol * getEndLabel() const
const DICompileUnit * getCUNode() const
LexicalScope - This class is used to track scope information.
Instances of this class represent a uniqued identifier for a section in the current translation unit.
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
void push_back(const T &Elt)
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
StringRef - Represent a constant reference to a string, i.e.
This is an optimization pass for GlobalISel generic memory operations.
LLVM_ABI void report_fatal_error(Error Err, bool gen_crash_diag=true)
BumpPtrAllocatorImpl BumpPtrAllocator
The standard BumpPtrAllocator which just uses the default template parameters.