diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 14d784e8a26..1032f941f2d 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -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 &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; diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.h b/lib/CodeGen/AsmPrinter/DwarfUnit.h index 0ffaacf02a1..98415548fcd 100644 --- a/lib/CodeGen/AsmPrinter/DwarfUnit.h +++ b/lib/CodeGen/AsmPrinter/DwarfUnit.h @@ -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;