Skip to content

Commit 89b7f16

Browse files
committed
DebugInfo: Streamline debug_ranges/rnglists/rnglists.dwo emission code
More code reuse, better basis for modelling debug_loc/loclists/loclists.dwo emission support.
1 parent 42465f4 commit 89b7f16

File tree

2 files changed

+23
-47
lines changed

2 files changed

+23
-47
lines changed

llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp

Lines changed: 22 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -2655,10 +2655,23 @@ static void emitRangeList(DwarfDebug &DD, AsmPrinter *Asm,
26552655
[](auto) {});
26562656
}
26572657

2658-
static void emitDebugRangesImpl(DwarfDebug &DD, AsmPrinter *Asm,
2659-
const DwarfFile &Holder, MCSymbol *TableEnd) {
2658+
void DwarfDebug::emitDebugRangesImpl(const DwarfFile &Holder, MCSection *Section) {
2659+
if (Holder.getRangeLists().empty())
2660+
return;
2661+
2662+
assert(useRangesSection());
2663+
assert(!CUMap.empty());
2664+
assert(llvm::any_of(CUMap, [](const decltype(CUMap)::value_type &Pair) {
2665+
return !Pair.second->getCUNode()->isDebugDirectivesOnly();
2666+
}));
2667+
2668+
Asm->OutStreamer->SwitchSection(Section);
2669+
2670+
MCSymbol *TableEnd =
2671+
getDwarfVersion() < 5 ? nullptr : emitRnglistsTableHeader(Asm, Holder);
2672+
26602673
for (const RangeSpanList &List : Holder.getRangeLists())
2661-
emitRangeList(DD, Asm, List);
2674+
emitRangeList(*this, Asm, List);
26622675

26632676
if (TableEnd)
26642677
Asm->OutStreamer->EmitLabel(TableEnd);
@@ -2667,55 +2680,17 @@ static void emitDebugRangesImpl(DwarfDebug &DD, AsmPrinter *Asm,
26672680
/// Emit address ranges into the .debug_ranges section or into the DWARF v5
26682681
/// .debug_rnglists section.
26692682
void DwarfDebug::emitDebugRanges() {
2670-
if (CUMap.empty())
2671-
return;
2672-
26732683
const auto &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
26742684

2675-
if (Holder.getRangeLists().empty())
2676-
return;
2677-
2678-
assert(useRangesSection());
2679-
assert(llvm::none_of(CUMap, [](const decltype(CUMap)::value_type &Pair) {
2680-
return Pair.second->getCUNode()->isDebugDirectivesOnly();
2681-
}));
2682-
2683-
// Start the dwarf ranges section.
2684-
MCSymbol *TableEnd = nullptr;
2685-
if (getDwarfVersion() >= 5) {
2686-
Asm->OutStreamer->SwitchSection(
2687-
Asm->getObjFileLowering().getDwarfRnglistsSection());
2688-
TableEnd = emitRnglistsTableHeader(Asm, Holder);
2689-
} else
2690-
Asm->OutStreamer->SwitchSection(
2691-
Asm->getObjFileLowering().getDwarfRangesSection());
2692-
2693-
emitDebugRangesImpl(*this, Asm, Holder, TableEnd);
2685+
emitDebugRangesImpl(Holder,
2686+
getDwarfVersion() >= 5
2687+
? Asm->getObjFileLowering().getDwarfRnglistsSection()
2688+
: Asm->getObjFileLowering().getDwarfRangesSection());
26942689
}
26952690

26962691
void DwarfDebug::emitDebugRangesDWO() {
2697-
assert(useSplitDwarf());
2698-
2699-
if (CUMap.empty())
2700-
return;
2701-
2702-
const auto &Holder = InfoHolder;
2703-
2704-
if (Holder.getRangeLists().empty())
2705-
return;
2706-
2707-
assert(getDwarfVersion() >= 5);
2708-
assert(useRangesSection());
2709-
assert(llvm::none_of(CUMap, [](const decltype(CUMap)::value_type &Pair) {
2710-
return Pair.second->getCUNode()->isDebugDirectivesOnly();
2711-
}));
2712-
2713-
// Start the dwarf ranges section.
2714-
Asm->OutStreamer->SwitchSection(
2715-
Asm->getObjFileLowering().getDwarfRnglistsDWOSection());
2716-
MCSymbol *TableEnd = emitRnglistsTableHeader(Asm, Holder);
2717-
2718-
emitDebugRangesImpl(*this, Asm, Holder, TableEnd);
2692+
emitDebugRangesImpl(InfoHolder,
2693+
Asm->getObjFileLowering().getDwarfRnglistsDWOSection());
27192694
}
27202695

27212696
void DwarfDebug::handleMacroNodes(DIMacroNodeArray Nodes, DwarfCompileUnit &U) {

llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,7 @@ class DwarfDebug : public DebugHandlerBase {
504504
/// Emit address ranges into a debug ranges section.
505505
void emitDebugRanges();
506506
void emitDebugRangesDWO();
507+
void emitDebugRangesImpl(const DwarfFile &Holder, MCSection *Section);
507508

508509
/// Emit macros into a debug macinfo section.
509510
void emitDebugMacinfo();

0 commit comments

Comments
 (0)