From a055e3856f813f73d82e992cfe78dcdb918a39c5 Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Sun, 17 May 2020 12:17:31 -0700 Subject: [PATCH] DebugInfo: Reduce long-distance dependence on what will/won't emit a debug_addr section This is a no-op/NFC at the moment & generally makes the code /somewhat/ cleaner/less reliant on assumptions about what will produce a debug_addr section. It's still a bit "spooky action at a distance" - the add ranges code pre-emptively inserts addresses into the address pool it knows will eventually be used by the range emission code (or low/high pc). The 'ideal' would be either to actually compute the addresses needed for range (& loc) emission earlier - which would mean decanonicalizing the range/loc representation earlier to account for whether it was going to use addrx encodings or not (which would be unfortunate, but could be refactored to be relatively unobtrusive). Alternatively, emitting the range/loc sections earlier would cause them to request the needed addresses sooner - but then you endup having to split finalizeModuleInfo because some things need to be handled there before the ranges/locs are emitted, I think... --- llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index aefa94cec24..befda85a2ac 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -1271,8 +1271,7 @@ void DwarfDebug::finalizeModuleInfo() { // We don't keep track of which addresses are used in which CU so this // is a bit pessimistic under LTO. - if ((!AddrPool.isEmpty() || TheCU.hasRangeLists()) && - (getDwarfVersion() >= 5 || HasSplitUnit)) + if ((HasSplitUnit || getDwarfVersion() >= 5) && !AddrPool.isEmpty()) U.addAddrTableBase(); if (getDwarfVersion() >= 5) { @@ -3271,5 +3270,7 @@ const MCSymbol *DwarfDebug::getSectionLabel(const MCSection *S) { return SectionLabels.find(S)->second; } void DwarfDebug::insertSectionLabel(const MCSymbol *S) { - SectionLabels.insert(std::make_pair(&S->getSection(), S)); + if (SectionLabels.insert(std::make_pair(&S->getSection(), S)).second) + if (useSplitDwarf() || getDwarfVersion() >= 5) + AddrPool.getIndex(S); } -- 2.11.0