Remove special handling for DW_AT_ranges support by constructing the
authorEric Christopher <echristo@gmail.com>
Thu, 5 Dec 2013 00:36:17 +0000 (00:36 +0000)
committerEric Christopher <echristo@gmail.com>
Thu, 5 Dec 2013 00:36:17 +0000 (00:36 +0000)
values with the correct behavior.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@196441 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter/DwarfDebug.cpp

index 3e4b38569d52eb3661e1a429a51affa5807f8ce1..fc37a25fe736e9732b7512faabac0482c553f5a7 100644 (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())