diff options
author | David Blaikie <dblaikie@gmail.com> | 2019-12-16 15:19:25 -0800 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2019-12-18 16:28:19 -0800 |
commit | 64fa76ef553c15b556fbd06383c1d28baf0bc142 (patch) | |
tree | 185c38a3c5c682c687b7746c7e68e9c7d8f1ac6f /llvm/lib/CodeGen/AsmPrinter | |
parent | d15241ed2c23ba1319d3a53b55dcd8251d8f98f3 (diff) | |
download | bcm5719-llvm-64fa76ef553c15b556fbd06383c1d28baf0bc142.tar.gz bcm5719-llvm-64fa76ef553c15b556fbd06383c1d28baf0bc142.zip |
Reapply "NFC: DebugInfo: Refactor RangeSpanList to be a struct, like DebugLocStream::List"
Move these data structures closer together so their emission code can
eventually share more of its implementation.
Was an egregious bug (completely untested, evidently) where I hadn't
inverted a DWARFv5 test as needed, so it was doing the exact opposite of
what was required & thus tried to emit a DWARFv5 range list header in
DWARFv4.
Reapply 8e04896288d22ed8bef7ac367923374f96b753d6 which was
reverted in a8154e5e0c83d2f0f65f3b4fb1a0bc68785bd975.
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp | 4 | ||||
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 11 | ||||
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfFile.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfFile.h | 13 |
4 files changed, 11 insertions, 19 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp index 0f3d8c689fa..5707f962b4b 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp @@ -503,10 +503,10 @@ void DwarfCompileUnit::addScopeRangeList(DIE &ScopeDIE, const MCSymbol *RangeSectionSym = TLOF.getDwarfRangesSection()->getBeginSymbol(); if (isDwoUnit()) - addSectionDelta(ScopeDIE, dwarf::DW_AT_ranges, List.getSym(), + addSectionDelta(ScopeDIE, dwarf::DW_AT_ranges, List.Label, RangeSectionSym); else - addSectionLabel(ScopeDIE, dwarf::DW_AT_ranges, List.getSym(), + addSectionLabel(ScopeDIE, dwarf::DW_AT_ranges, List.Label, RangeSectionSym); } } diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index b8905ce5c9d..6d62d4b3e69 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -2331,7 +2331,7 @@ static MCSymbol *emitRnglistsTableHeader(AsmPrinter *Asm, Asm->OutStreamer->EmitLabel(Holder.getRnglistsTableBaseSym()); for (const RangeSpanList &List : Holder.getRangeLists()) - Asm->EmitLabelDifference(List.getSym(), Holder.getRnglistsTableBaseSym(), + Asm->EmitLabelDifference(List.Label, Holder.getRnglistsTableBaseSym(), 4); return TableEnd; @@ -2688,11 +2688,11 @@ void DwarfDebug::emitDebugARanges() { /// Emit a single range list. We handle both DWARF v5 and earlier. static void emitRangeList(DwarfDebug &DD, AsmPrinter *Asm, const RangeSpanList &List) { - emitRangeList(DD, Asm, List.getSym(), List.getRanges(), List.getCU(), + emitRangeList(DD, Asm, List.Label, List.Ranges, *List.CU, dwarf::DW_RLE_base_addressx, dwarf::DW_RLE_offset_pair, dwarf::DW_RLE_startx_length, dwarf::DW_RLE_end_of_list, llvm::dwarf::RangeListEncodingString, - List.getCU().getCUNode()->getRangesBaseAddress() || + List.CU->getCUNode()->getRangesBaseAddress() || DD.getDwarfVersion() >= 5, [](auto) {}); } @@ -2709,8 +2709,9 @@ void DwarfDebug::emitDebugRangesImpl(const DwarfFile &Holder, MCSection *Section Asm->OutStreamer->SwitchSection(Section); - MCSymbol *TableEnd = - getDwarfVersion() < 5 ? nullptr : emitRnglistsTableHeader(Asm, Holder); + MCSymbol *TableEnd = nullptr; + if (getDwarfVersion() >= 5) + TableEnd = emitRnglistsTableHeader(Asm, Holder); for (const RangeSpanList &List : Holder.getRangeLists()) emitRangeList(*this, Asm, List); diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfFile.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfFile.cpp index e3c9095d134..e5c4db58f47 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfFile.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfFile.cpp @@ -126,6 +126,6 @@ void DwarfFile::addScopeLabel(LexicalScope *LS, DbgLabel *Label) { std::pair<uint32_t, RangeSpanList *> DwarfFile::addRange(const DwarfCompileUnit &CU, SmallVector<RangeSpan, 2> R) { CURangeLists.push_back( - RangeSpanList(Asm->createTempSymbol("debug_ranges"), CU, std::move(R))); + RangeSpanList{Asm->createTempSymbol("debug_ranges"), &CU, std::move(R)}); return std::make_pair(CURangeLists.size() - 1, &CURangeLists.back()); } diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfFile.h b/llvm/lib/CodeGen/AsmPrinter/DwarfFile.h index 35fa51fb24c..cf293d7534d 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfFile.h +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfFile.h @@ -37,21 +37,12 @@ struct RangeSpan { const MCSymbol *End; }; -class RangeSpanList { -private: +struct RangeSpanList { // Index for locating within the debug_range section this particular span. - MCSymbol *RangeSym; + MCSymbol *Label; const DwarfCompileUnit *CU; // List of ranges. SmallVector<RangeSpan, 2> Ranges; - -public: - RangeSpanList(MCSymbol *Sym, const DwarfCompileUnit &CU, - SmallVector<RangeSpan, 2> Ranges) - : RangeSym(Sym), CU(&CU), Ranges(std::move(Ranges)) {} - MCSymbol *getSym() const { return RangeSym; } - const DwarfCompileUnit &getCU() const { return *CU; } - const SmallVectorImpl<RangeSpan> &getRanges() const { return Ranges; } }; class DwarfFile { |