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,
AsmPrinter *A, DwarfDebug *DW,
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());
}

View File

@ -33,6 +33,9 @@ class DwarfCompileUnit : public DwarfUnit {
/// the need to search for it in applyStmtList.
unsigned stmtListIndex;
/// Skeleton unit associated with this unit.
DwarfUnit *Skeleton;
/// \brief Construct a DIE for the given DbgVariable without initializing the
/// DbgVariable's DIE reference.
std::unique_ptr<DIE> constructVariableDIEImpl(const DbgVariable &DV,
@ -134,6 +137,25 @@ public:
void finishSubprogramDefinition(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

View File

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

View File

@ -138,18 +138,12 @@ protected:
/// The end of the unit within its section.
MCSymbol *LabelEnd;
/// Skeleton unit associated with this unit.
DwarfUnit *Skeleton;
DwarfUnit(unsigned UID, dwarf::Tag, DICompileUnit CU, AsmPrinter *A,
DwarfDebug *DW, DwarfFile *DWU);
public:
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
/// unit (type units will have actually distinct symbols once they're in
/// comdat sections).
@ -168,27 +162,11 @@ public:
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 {
assert(Section);
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 {
assert(Section);
return LabelBegin;