diff options
author | David Blaikie <dblaikie@gmail.com> | 2014-03-25 05:34:24 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2014-03-25 05:34:24 +0000 |
commit | 3ffe4dd67f004ff4fa9d563f957889288519a243 (patch) | |
tree | 6c4ed4b56b77c8bc78dad4fa82aa7d6d9795615d /llvm/lib | |
parent | 1425622ad857d5ddf2062c1d1d43f14e5d0cf346 (diff) | |
download | bcm5719-llvm-3ffe4dd67f004ff4fa9d563f957889288519a243.tar.gz bcm5719-llvm-3ffe4dd67f004ff4fa9d563f957889288519a243.zip |
DebugInfo: Add GNU_addr_base and GNU_ranges_base only when there are addresses or ranges
Based on code review feedback from Eric in r204672.
llvm-svn: 204702
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index a9ed9dbcb5b..f4182d0b79b 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -956,6 +956,17 @@ void DwarfDebug::finalizeModuleInfo() { dwarf::DW_FORM_data8, ID); SkCU->addUInt(SkCU->getUnitDie(), dwarf::DW_AT_GNU_dwo_id, dwarf::DW_FORM_data8, ID); + + // We don't keep track of which addresses are used in which CU so this + // is a bit pessimistic under LTO. + if (!InfoHolder.getAddrPool()->empty()) + addSectionLabel(Asm, SkCU, SkCU->getUnitDie(), + dwarf::DW_AT_GNU_addr_base, DwarfAddrSectionSym, + DwarfAddrSectionSym); + if (!TheU->getRangeLists().empty()) + addSectionLabel(Asm, SkCU, SkCU->getUnitDie(), + dwarf::DW_AT_GNU_ranges_base, + DwarfDebugRangeSectionSym, DwarfDebugRangeSectionSym); } // If we have code split among multiple sections or non-contiguous @@ -2660,19 +2671,6 @@ DwarfCompileUnit *DwarfDebug::constructSkeletonCU(const DwarfCompileUnit *CU) { initSkeletonUnit(CU, Die, NewCU); - // Relocate to the beginning of the addr_base section, else 0 for the - // beginning of the one for this compile unit. - // We could shave off some space if we deferred adding these attributes until - // the end of the CU to see if we have a non-empty debug_addr and debug_ranges - // sections so we don't bother with extra attributes and relocations. - if (Asm->MAI->doesDwarfUseRelocationsAcrossSections()) { - NewCU->addSectionLabel(Die, dwarf::DW_AT_GNU_addr_base, DwarfAddrSectionSym); - NewCU->addSectionLabel(Die, dwarf::DW_AT_GNU_ranges_base, DwarfDebugRangeSectionSym); - } else { - NewCU->addSectionOffset(Die, dwarf::DW_AT_GNU_addr_base, 0); - NewCU->addSectionOffset(Die, dwarf::DW_AT_GNU_ranges_base, 0); - } - return NewCU; } |