DwarfDebug/Unit: Remove another case of label recreation by storing the gnu_ranges...
authorDavid Blaikie <dblaikie@gmail.com>
Mon, 9 Dec 2013 17:51:30 +0000 (17:51 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Mon, 9 Dec 2013 17:51:30 +0000 (17:51 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@196793 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter/DwarfDebug.cpp
lib/CodeGen/AsmPrinter/DwarfUnit.h

index 14d784e8a26b089952eb31ef81b3e7230ce79235..1032f941f2d84d223cb68c486044d29ab57a632a 100644 (file)
@@ -2901,10 +2901,9 @@ void DwarfDebug::emitDebugRanges() {
                                                          E = CUMap.end();
        I != E; ++I) {
     CompileUnit *TheCU = I->second;
-    unsigned ID = TheCU->getUniqueID();
 
     // Emit a symbol so we can find the beginning of our ranges.
-    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("gnu_ranges", ID));
+    Asm->OutStreamer.EmitLabel(TheCU->getLabelRange());
 
     // Iterate over the misc ranges for the compile units in the module.
     const SmallVectorImpl<RangeSpanList> &RangeLists = TheCU->getRangeLists();
@@ -2958,6 +2957,8 @@ CompileUnit *DwarfDebug::constructSkeletonCU(const CompileUnit *CU) {
   DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
   CompileUnit *NewCU = new CompileUnit(CU->getUniqueID(), Die, CU->getNode(),
                                        Asm, this, &SkeletonHolder);
+  NewCU->initSection(Asm->getObjFileLowering().getDwarfInfoSection(),
+                     DwarfInfoSectionSym);
 
   NewCU->addLocalString(Die, dwarf::DW_AT_GNU_dwo_name,
                         CU->getNode().getSplitDebugFilename());
@@ -2992,11 +2993,8 @@ CompileUnit *DwarfDebug::constructSkeletonCU(const CompileUnit *CU) {
   // unit.
   if (!CU->getRangeLists().empty())
     addSectionLabel(Asm, NewCU, Die, dwarf::DW_AT_GNU_ranges_base,
-                    Asm->GetTempSymbol("gnu_ranges", NewCU->getUniqueID()),
-                    DwarfDebugRangeSectionSym);
+                    NewCU->getLabelRange(), DwarfDebugRangeSectionSym);
 
-  NewCU->initSection(Asm->getObjFileLowering().getDwarfInfoSection(),
-                     DwarfInfoSectionSym);
   SkeletonHolder.addUnit(NewCU);
 
   return NewCU;
index 0ffaacf02a1ec478321a4b3b1827f430c394ca4a..98415548fcdb37b2c2c60fad676f6dd0c479cac9 100644 (file)
@@ -140,6 +140,9 @@ protected:
   /// The end of the unit within its section.
   MCSymbol *LabelEnd;
 
+  /// The label for the start of the range sets for the elements of this unit.
+  MCSymbol *LabelRange;
+
   Unit(unsigned UID, DIE *D, DICompileUnit CU, AsmPrinter *A, DwarfDebug *DW,
        DwarfFile *DWU);
 
@@ -157,7 +160,9 @@ public:
         Asm->GetTempSymbol(Section->getLabelBeginName(), getUniqueID());
     this->LabelEnd =
         Asm->GetTempSymbol(Section->getLabelEndName(), getUniqueID());
+    this->LabelRange = Asm->GetTempSymbol("gnu_ranges", getUniqueID());
   }
+
   const MCSection *getSection() const {
     assert(Section);
     return Section;
@@ -178,6 +183,11 @@ public:
     return LabelEnd;
   }
 
+  MCSymbol *getLabelRange() const {
+    assert(Section);
+    return LabelRange;
+  }
+
   // Accessors.
   unsigned getUniqueID() const { return UniqueID; }
   virtual uint16_t getLanguage() const = 0;