diff options
author | David Blaikie <dblaikie@gmail.com> | 2014-03-24 21:07:27 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2014-03-24 21:07:27 +0000 |
commit | 26b2bd04fd7a4fbd80e1791c07722467d66329ba (patch) | |
tree | 347b372979174ec27dd19e4682c6defb3b398421 /llvm/lib/CodeGen | |
parent | 3c9a3cc495c3eed7b60dc9cac6d816524a0cf47d (diff) | |
download | bcm5719-llvm-26b2bd04fd7a4fbd80e1791c07722467d66329ba.tar.gz bcm5719-llvm-26b2bd04fd7a4fbd80e1791c07722467d66329ba.zip |
DebugInfo: Implement relative addressing for DW_AT_ranges under fission
This removes the debug_ranges relocations from debug_info.dwo (but
doesn't implement the DW_AT_GNU_ranges_base which is also necessary for
correct functioning)
llvm-svn: 204668
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index eb769fe7ae3..a368f03f753 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -456,8 +456,15 @@ void DwarfDebug::addScopeRangeList(DwarfCompileUnit *TheCU, DIE *ScopeDIE, // Emit offset in .debug_range as a relocatable label. emitDIE will handle // emitting it appropriately. MCSymbol *RangeSym = Asm->GetTempSymbol("debug_ranges", GlobalRangeCount++); - addSectionLabel(Asm, TheCU, ScopeDIE, dwarf::DW_AT_ranges, RangeSym, - DwarfDebugRangeSectionSym); + + // Under fission, ranges are specified by constant offsets relative to the + // CU's DW_AT_GNU_ranges_base. + if (useSplitDwarf()) + TheCU->addSectionDelta(ScopeDIE, dwarf::DW_AT_ranges, RangeSym, + DwarfDebugRangeSectionSym); + else + addSectionLabel(Asm, TheCU, ScopeDIE, dwarf::DW_AT_ranges, RangeSym, + DwarfDebugRangeSectionSym); RangeSpanList List(RangeSym); for (const InsnRange &R : Range) { |