Remove special handling for DW_AT_ranges support by constructing the

values with the correct behavior.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@196441 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Eric Christopher 2013-12-05 00:36:17 +00:00
parent 175fe68393
commit 7eca7002f2

View File

@ -465,12 +465,23 @@ bool DwarfDebug::isLexicalScopeDIENull(LexicalScope *Scope) {
return !End;
}
static void addSectionLabel(AsmPrinter *Asm, Unit *U, DIE *D,
dwarf::Attribute A, const MCSymbol *L,
const MCSymbol *Sec) {
if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
U->addSectionLabel(D, A, L);
else
U->addSectionDelta(D, A, L, Sec);
}
void DwarfDebug::addScopeRangeList(CompileUnit *TheCU, DIE *ScopeDIE,
const SmallVectorImpl<InsnRange> &Range) {
// Emit offset in .debug_range as a relocatable label. emitDIE will handle
// emitting it appropriately.
MCSymbol *RangeSym = Asm->GetTempSymbol("debug_ranges", GlobalRangeCount++);
TheCU->addSectionLabel(ScopeDIE, dwarf::DW_AT_ranges, RangeSym);
addSectionLabel(Asm, TheCU, ScopeDIE, dwarf::DW_AT_ranges, RangeSym,
DwarfDebugRangeSectionSym);
RangeSpanList List(RangeSym);
for (SmallVectorImpl<InsnRange>::const_iterator RI = Range.begin(),
RE = Range.end();
@ -724,15 +735,6 @@ unsigned DwarfDebug::getOrCreateSourceID(StringRef FileName, StringRef DirName,
return SrcId;
}
static void addSectionLabel(AsmPrinter *Asm, Unit *U, DIE *D,
dwarf::Attribute A, const MCSymbol *L,
const MCSymbol *Sec) {
if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
U->addSectionLabel(D, A, L);
else
U->addSectionDelta(D, A, L, Sec);
}
void DwarfDebug::addGnuPubAttributes(Unit *U, DIE *D) const {
if (!GenerateGnuPubSections)
return;
@ -2086,16 +2088,6 @@ void DwarfDebug::emitDIE(DIE *Die, ArrayRef<DIEAbbrev *> Abbrevs) {
}
break;
}
case dwarf::DW_AT_ranges: {
// DW_AT_range Value encodes offset in debug_range section.
DIELabel *V = cast<DIELabel>(Values[i]);
if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
Asm->EmitSectionOffset(V->getValue(), DwarfDebugRangeSectionSym);
else
Asm->EmitLabelDifference(V->getValue(), DwarfDebugRangeSectionSym, 4);
break;
}
case dwarf::DW_AT_location: {
if (DIELabel *L = dyn_cast<DIELabel>(Values[i])) {
if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())