// This DIE has the following attributes: DW_AT_comp_dir, DW_AT_dwo_name,
// DW_AT_addr_base.
-DwarfTypeUnit *DwarfDebug::constructSkeletonTU(const DwarfTypeUnit *TU) {
+DwarfTypeUnit *DwarfDebug::constructSkeletonTU(DwarfTypeUnit *TU) {
DIE *Die = new DIE(dwarf::DW_TAG_type_unit);
DwarfTypeUnit *NewTU = new DwarfTypeUnit(
- TU->getUniqueID(), Die, TU->getCUNode(), Asm, this, &SkeletonHolder);
+ TU->getUniqueID(), Die, TU->getCU(), Asm, this, &SkeletonHolder);
NewTU->setTypeSignature(TU->getTypeSignature());
NewTU->setType(NULL);
NewTU->initSection(
OffSec, StrSym);
}
-void DwarfDebug::addDwarfTypeUnitType(DICompileUnit CUNode,
+void DwarfDebug::addDwarfTypeUnitType(DwarfCompileUnit &CU,
StringRef Identifier, DIE *RefDie,
DICompositeType CTy) {
// Flag the type unit reference as a declaration so that if it contains
// members (implicit special members, static data member definitions, member
// declarations for definitions in this CU, etc) consumers don't get confused
// and think this is a full definition.
- CUMap.begin()->second->addFlag(RefDie, dwarf::DW_AT_declaration);
+ CU.addFlag(RefDie, dwarf::DW_AT_declaration);
const DwarfTypeUnit *&TU = DwarfTypeUnits[CTy];
if (TU) {
- CUMap.begin()->second->addDIETypeSignature(RefDie, *TU);
+ CU.addDIETypeSignature(RefDie, *TU);
return;
}
DIE *UnitDie = new DIE(dwarf::DW_TAG_type_unit);
DwarfTypeUnit *NewTU = new DwarfTypeUnit(
- InfoHolder.getUnits().size(), UnitDie, CUNode, Asm, this, &InfoHolder);
+ InfoHolder.getUnits().size(), UnitDie, CU, Asm, this, &InfoHolder);
TU = NewTU;
InfoHolder.addUnit(NewTU);
NewTU->addUInt(UnitDie, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
- CUNode.getLanguage());
+ CU.getLanguage());
MD5 Hash;
Hash.update(Identifier);
? Asm->getObjFileLowering().getDwarfTypesDWOSection(Signature)
: Asm->getObjFileLowering().getDwarfTypesSection(Signature));
- CUMap.begin()->second->addDIETypeSignature(RefDie, *NewTU);
+ CU.addDIETypeSignature(RefDie, *NewTU);
}
/// \brief Construct the split debug info compile unit for the debug info
/// section.
- DwarfTypeUnit *constructSkeletonTU(const DwarfTypeUnit *TU);
+ DwarfTypeUnit *constructSkeletonTU(DwarfTypeUnit *TU);
/// \brief Emit the debug info dwo section.
void emitDebugInfoDWO();
/// \brief Add a DIE to the set of types that we're going to pull into
/// type units.
- void addDwarfTypeUnitType(DICompileUnit CUNode, StringRef Identifier,
+ void addDwarfTypeUnitType(DwarfCompileUnit &CU, StringRef Identifier,
DIE *Die, DICompositeType CTy);
/// \brief Add a label so that arange data can be generated for it.
insertDIE(Node, D);
}
-DwarfTypeUnit::DwarfTypeUnit(unsigned UID, DIE *D, DICompileUnit CUNode,
+DwarfTypeUnit::DwarfTypeUnit(unsigned UID, DIE *D, DwarfCompileUnit &CU,
AsmPrinter *A, DwarfDebug *DW, DwarfFile *DWU)
- : DwarfUnit(UID, D, CUNode, A, DW, DWU) {}
+ : DwarfUnit(UID, D, CU.getCUNode(), A, DW, DWU), CU(CU) {
+ (void)CU;
+}
/// ~Unit - Destructor for compile unit.
DwarfUnit::~DwarfUnit() {
DICompositeType CTy(Ty);
if (GenerateDwarfTypeUnits && !Ty.isForwardDecl())
if (MDString *TypeId = CTy.getIdentifier()) {
- DD->addDwarfTypeUnitType(getCUNode(), TypeId->getString(), TyDIE, CTy);
+ DD->addDwarfTypeUnitType(getCU(), TypeId->getString(), TyDIE, CTy);
// Skip updating the accellerator tables since this is not the full type
return TyDIE;
}
class ConstantInt;
class ConstantFP;
class DbgVariable;
+class DwarfCompileUnit;
// Data structure to hold a range for range lists.
class RangeSpan {
virtual void emitHeader(const MCSection *ASection,
const MCSymbol *ASectionSym) const;
+ virtual DwarfCompileUnit &getCU() = 0;
protected:
/// getOrCreateStaticMemberDIE - Create new static data member DIE.
DIE *getOrCreateStaticMemberDIE(DIDerivedType DT);
/// addLabelAddress - Add a dwarf label attribute data and value using
/// either DW_FORM_addr or DW_FORM_GNU_addr_index.
void addLabelAddress(DIE *Die, dwarf::Attribute Attribute, MCSymbol *Label);
+
+ DwarfCompileUnit &getCU() LLVM_OVERRIDE {
+ return *this;
+ }
};
class DwarfTypeUnit : public DwarfUnit {
private:
uint64_t TypeSignature;
const DIE *Ty;
+ DwarfCompileUnit &CU;
public:
- DwarfTypeUnit(unsigned UID, DIE *D, DICompileUnit CUNode, AsmPrinter *A,
+ DwarfTypeUnit(unsigned UID, DIE *D, DwarfCompileUnit &CU, AsmPrinter *A,
DwarfDebug *DW, DwarfFile *DWU);
virtual ~DwarfTypeUnit() LLVM_OVERRIDE;
sizeof(uint32_t); // Type DIE Offset
}
void initSection(const MCSection *Section);
+ DwarfCompileUnit &getCU() LLVM_OVERRIDE {
+ return CU;
+ }
};
} // end llvm namespace
#endif