Sink DwarfUnit::Skeleton down into DwarfCompileUnit

Type units no longer have skeletons and it's misleading to be able to
query for a type unit's skeleton (it might incorrectly lead one to
conclude that if a unit doesn't have a skeleton it's not in a .dwo
file... ).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221055 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
David Blaikie
2014-11-01 18:18:07 +00:00
parent 20dc677021
commit 4e35ac1b48
4 changed files with 25 additions and 25 deletions

View File

@ -18,7 +18,8 @@ namespace llvm {
DwarfCompileUnit::DwarfCompileUnit(unsigned UID, DICompileUnit Node, DwarfCompileUnit::DwarfCompileUnit(unsigned UID, DICompileUnit Node,
AsmPrinter *A, DwarfDebug *DW, AsmPrinter *A, DwarfDebug *DW,
DwarfFile *DWU) DwarfFile *DWU)
: DwarfUnit(UID, dwarf::DW_TAG_compile_unit, Node, A, DW, DWU) { : DwarfUnit(UID, dwarf::DW_TAG_compile_unit, Node, A, DW, DWU),
Skeleton(nullptr) {
insertDIE(Node, &getUnitDie()); insertDIE(Node, &getUnitDie());
} }

View File

@ -33,6 +33,9 @@ class DwarfCompileUnit : public DwarfUnit {
/// the need to search for it in applyStmtList. /// the need to search for it in applyStmtList.
unsigned stmtListIndex; unsigned stmtListIndex;
/// Skeleton unit associated with this unit.
DwarfUnit *Skeleton;
/// \brief Construct a DIE for the given DbgVariable without initializing the /// \brief Construct a DIE for the given DbgVariable without initializing the
/// DbgVariable's DIE reference. /// DbgVariable's DIE reference.
std::unique_ptr<DIE> constructVariableDIEImpl(const DbgVariable &DV, std::unique_ptr<DIE> constructVariableDIEImpl(const DbgVariable &DV,
@ -134,6 +137,25 @@ public:
void finishSubprogramDefinition(DISubprogram SP); void finishSubprogramDefinition(DISubprogram SP);
void collectDeadVariables(DISubprogram SP); void collectDeadVariables(DISubprogram SP);
/// If there's a skeleton then return the begin label for the skeleton unit,
/// otherwise return the local label for this unit.
MCSymbol *getLocalLabelBegin() const {
if (Skeleton)
return Skeleton->getLabelBegin();
return getLabelBegin();
}
/// If there's a skeleton then return the section symbol for the skeleton
/// unit, otherwise return the section symbol for this unit.
MCSymbol *getLocalSectionSym() const {
if (Skeleton)
return Skeleton->getSectionSym();
return getSectionSym();
}
/// Set the skeleton unit associated with this unit.
void setSkeleton(DwarfUnit &Skel) { Skeleton = &Skel; }
}; };
} // end llvm namespace } // end llvm namespace

View File

@ -47,8 +47,7 @@ GenerateDwarfTypeUnits("generate-type-units", cl::Hidden,
DwarfUnit::DwarfUnit(unsigned UID, dwarf::Tag UnitTag, DICompileUnit Node, DwarfUnit::DwarfUnit(unsigned UID, dwarf::Tag UnitTag, DICompileUnit Node,
AsmPrinter *A, DwarfDebug *DW, DwarfFile *DWU) AsmPrinter *A, DwarfDebug *DW, DwarfFile *DWU)
: UniqueID(UID), CUNode(Node), UnitDie(UnitTag), DebugInfoOffset(0), Asm(A), : UniqueID(UID), CUNode(Node), UnitDie(UnitTag), DebugInfoOffset(0), Asm(A),
DD(DW), DU(DWU), IndexTyDie(nullptr), Section(nullptr), DD(DW), DU(DWU), IndexTyDie(nullptr), Section(nullptr) {
Skeleton(nullptr) {
assert(UnitTag == dwarf::DW_TAG_compile_unit || assert(UnitTag == dwarf::DW_TAG_compile_unit ||
UnitTag == dwarf::DW_TAG_type_unit); UnitTag == dwarf::DW_TAG_type_unit);
DIEIntegerOne = new (DIEValueAllocator) DIEInteger(1); DIEIntegerOne = new (DIEValueAllocator) DIEInteger(1);

View File

@ -138,18 +138,12 @@ protected:
/// The end of the unit within its section. /// The end of the unit within its section.
MCSymbol *LabelEnd; MCSymbol *LabelEnd;
/// Skeleton unit associated with this unit.
DwarfUnit *Skeleton;
DwarfUnit(unsigned UID, dwarf::Tag, DICompileUnit CU, AsmPrinter *A, DwarfUnit(unsigned UID, dwarf::Tag, DICompileUnit CU, AsmPrinter *A,
DwarfDebug *DW, DwarfFile *DWU); DwarfDebug *DW, DwarfFile *DWU);
public: public:
virtual ~DwarfUnit(); virtual ~DwarfUnit();
/// Set the skeleton unit associated with this unit.
void setSkeleton(DwarfUnit &Skel) { Skeleton = &Skel; }
/// Pass in the SectionSym even though we could recreate it in every compile /// Pass in the SectionSym even though we could recreate it in every compile
/// unit (type units will have actually distinct symbols once they're in /// unit (type units will have actually distinct symbols once they're in
/// comdat sections). /// comdat sections).
@ -168,27 +162,11 @@ public:
return Section; return Section;
} }
/// If there's a skeleton then return the section symbol for the skeleton
/// unit, otherwise return the section symbol for this unit.
MCSymbol *getLocalSectionSym() const {
if (Skeleton)
return Skeleton->getSectionSym();
return getSectionSym();
}
MCSymbol *getSectionSym() const { MCSymbol *getSectionSym() const {
assert(Section); assert(Section);
return SectionSym; return SectionSym;
} }
/// If there's a skeleton then return the begin label for the skeleton unit,
/// otherwise return the local label for this unit.
MCSymbol *getLocalLabelBegin() const {
if (Skeleton)
return Skeleton->getLabelBegin();
return getLabelBegin();
}
MCSymbol *getLabelBegin() const { MCSymbol *getLabelBegin() const {
assert(Section); assert(Section);
return LabelBegin; return LabelBegin;