diff options
author | David Blaikie <dblaikie@gmail.com> | 2014-11-03 21:15:30 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2014-11-03 21:15:30 +0000 |
commit | ce343492ee6337709ff971e679c15549778d33ac (patch) | |
tree | 87e72087db6e868258a6b533685a61991a329d47 /llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | |
parent | 118593a3af18af46be14cefbb5e5f2d20ea9471b (diff) | |
download | bcm5719-llvm-ce343492ee6337709ff971e679c15549778d33ac.tar.gz bcm5719-llvm-ce343492ee6337709ff971e679c15549778d33ac.zip |
Add DwarfCompileUnit::BaseAddress to track the base address used by relative addressing in debug_ranges and debug_loc
This is one of a few steps to generalize range handling to include the
CU range (thus the CU's range list will be moved into the range list
list, losing track of the base address in the process), which means
generalizing ranges from both the skeleton and full unit under fission.
And... then I can used that generalized support for ranges in
fission+gmlt where there'll be a bunch more ranges in the skeleton.
llvm-svn: 221182
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 2b432c035cb..95dedb5549b 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -592,6 +592,7 @@ void DwarfDebug::finalizeModuleInfo() { U.addUInt(U.getUnitDie(), dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, 0); } else { const RangeSpan &Range = TheCU.getRanges().back(); + TheCU.setBaseAddress(Range.getStart()); U.attachLowHighPC(U.getUnitDie(), Range.getStart(), Range.getEnd()); } } @@ -1791,9 +1792,7 @@ void DwarfDebug::emitDebugLoc() { // Set up the range. This range is relative to the entry point of the // compile unit. This is a hard coded 0 for low_pc when we're emitting // ranges, or the DW_AT_low_pc on the compile unit otherwise. - if (CU->getRanges().size() == 1) { - // Grab the begin symbol from the first range as our base. - const MCSymbol *Base = CU->getRanges()[0].getStart(); + if (auto *Base = CU->getBaseAddress()) { Asm->EmitLabelDifference(Entry.getBeginSym(), Base, Size); Asm->EmitLabelDifference(Entry.getEndSym(), Base, Size); } else { @@ -2003,9 +2002,7 @@ void DwarfDebug::emitDebugRanges() { const MCSymbol *End = Range.getEnd(); assert(Begin && "Range without a begin symbol?"); assert(End && "Range without an end symbol?"); - if (TheCU->getRanges().size() == 1) { - // Grab the begin symbol from the first range as our base. - const MCSymbol *Base = TheCU->getRanges()[0].getStart(); + if (auto *Base = TheCU->getBaseAddress()) { Asm->EmitLabelDifference(Begin, Base, Size); Asm->EmitLabelDifference(End, Base, Size); } else { |