mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-21 18:24:23 +00:00
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:
@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
Reference in New Issue
Block a user