DwarfDebug/Unit: Remove another case of label recreation by storing the gnu_ranges label in the unit.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@196793 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
David Blaikie
2013-12-09 17:51:30 +00:00
parent 1a803295d0
commit c3b96bacc8
2 changed files with 14 additions and 6 deletions

View File

@ -2901,10 +2901,9 @@ void DwarfDebug::emitDebugRanges() {
E = CUMap.end(); E = CUMap.end();
I != E; ++I) { I != E; ++I) {
CompileUnit *TheCU = I->second; CompileUnit *TheCU = I->second;
unsigned ID = TheCU->getUniqueID();
// Emit a symbol so we can find the beginning of our ranges. // 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. // Iterate over the misc ranges for the compile units in the module.
const SmallVectorImpl<RangeSpanList> &RangeLists = TheCU->getRangeLists(); 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); DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
CompileUnit *NewCU = new CompileUnit(CU->getUniqueID(), Die, CU->getNode(), CompileUnit *NewCU = new CompileUnit(CU->getUniqueID(), Die, CU->getNode(),
Asm, this, &SkeletonHolder); Asm, this, &SkeletonHolder);
NewCU->initSection(Asm->getObjFileLowering().getDwarfInfoSection(),
DwarfInfoSectionSym);
NewCU->addLocalString(Die, dwarf::DW_AT_GNU_dwo_name, NewCU->addLocalString(Die, dwarf::DW_AT_GNU_dwo_name,
CU->getNode().getSplitDebugFilename()); CU->getNode().getSplitDebugFilename());
@ -2992,11 +2993,8 @@ CompileUnit *DwarfDebug::constructSkeletonCU(const CompileUnit *CU) {
// unit. // unit.
if (!CU->getRangeLists().empty()) if (!CU->getRangeLists().empty())
addSectionLabel(Asm, NewCU, Die, dwarf::DW_AT_GNU_ranges_base, addSectionLabel(Asm, NewCU, Die, dwarf::DW_AT_GNU_ranges_base,
Asm->GetTempSymbol("gnu_ranges", NewCU->getUniqueID()), NewCU->getLabelRange(), DwarfDebugRangeSectionSym);
DwarfDebugRangeSectionSym);
NewCU->initSection(Asm->getObjFileLowering().getDwarfInfoSection(),
DwarfInfoSectionSym);
SkeletonHolder.addUnit(NewCU); SkeletonHolder.addUnit(NewCU);
return NewCU; return NewCU;

View File

@ -140,6 +140,9 @@ protected:
/// The end of the unit within its section. /// The end of the unit within its section.
MCSymbol *LabelEnd; 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, Unit(unsigned UID, DIE *D, DICompileUnit CU, AsmPrinter *A, DwarfDebug *DW,
DwarfFile *DWU); DwarfFile *DWU);
@ -157,7 +160,9 @@ public:
Asm->GetTempSymbol(Section->getLabelBeginName(), getUniqueID()); Asm->GetTempSymbol(Section->getLabelBeginName(), getUniqueID());
this->LabelEnd = this->LabelEnd =
Asm->GetTempSymbol(Section->getLabelEndName(), getUniqueID()); Asm->GetTempSymbol(Section->getLabelEndName(), getUniqueID());
this->LabelRange = Asm->GetTempSymbol("gnu_ranges", getUniqueID());
} }
const MCSection *getSection() const { const MCSection *getSection() const {
assert(Section); assert(Section);
return Section; return Section;
@ -178,6 +183,11 @@ public:
return LabelEnd; return LabelEnd;
} }
MCSymbol *getLabelRange() const {
assert(Section);
return LabelRange;
}
// Accessors. // Accessors.
unsigned getUniqueID() const { return UniqueID; } unsigned getUniqueID() const { return UniqueID; }
virtual uint16_t getLanguage() const = 0; virtual uint16_t getLanguage() const = 0;