mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-23 16:19:52 +00:00
DebugInfo: Remove DIType
This is the last major parent class, so I'll probably start deleting classes in batches now. Looks like many of the references to the DI* hierarchy were updated organically along the way. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235331 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -51,7 +51,6 @@ class DISubprogram;
|
|||||||
class DILexicalBlock;
|
class DILexicalBlock;
|
||||||
class DILexicalBlockFile;
|
class DILexicalBlockFile;
|
||||||
class DIVariable;
|
class DIVariable;
|
||||||
class DIType;
|
|
||||||
class DIObjCProperty;
|
class DIObjCProperty;
|
||||||
|
|
||||||
/// \brief Maps from type identifier to the actual MDNode.
|
/// \brief Maps from type identifier to the actual MDNode.
|
||||||
@@ -63,7 +62,6 @@ typedef DenseMap<const MDString *, MDNode *> DITypeIdentifierMap;
|
|||||||
template <> struct simplify_type<DESC>;
|
template <> struct simplify_type<DESC>;
|
||||||
DECLARE_SIMPLIFY_DESCRIPTOR(DISubrange)
|
DECLARE_SIMPLIFY_DESCRIPTOR(DISubrange)
|
||||||
DECLARE_SIMPLIFY_DESCRIPTOR(DIEnumerator)
|
DECLARE_SIMPLIFY_DESCRIPTOR(DIEnumerator)
|
||||||
DECLARE_SIMPLIFY_DESCRIPTOR(DIType)
|
|
||||||
DECLARE_SIMPLIFY_DESCRIPTOR(DIBasicType)
|
DECLARE_SIMPLIFY_DESCRIPTOR(DIBasicType)
|
||||||
DECLARE_SIMPLIFY_DESCRIPTOR(DIDerivedType)
|
DECLARE_SIMPLIFY_DESCRIPTOR(DIDerivedType)
|
||||||
DECLARE_SIMPLIFY_DESCRIPTOR(DICompositeType)
|
DECLARE_SIMPLIFY_DESCRIPTOR(DICompositeType)
|
||||||
@@ -110,17 +108,6 @@ public:
|
|||||||
MDEnumerator &operator*() const { return *N; }
|
MDEnumerator &operator*() const { return *N; }
|
||||||
};
|
};
|
||||||
|
|
||||||
class DIType {
|
|
||||||
MDType *N;
|
|
||||||
|
|
||||||
public:
|
|
||||||
DIType(const MDType *N = nullptr) : N(const_cast<MDType *>(N)) {}
|
|
||||||
|
|
||||||
operator MDType *() const { return N; }
|
|
||||||
MDType *operator->() const { return N; }
|
|
||||||
MDType &operator*() const { return *N; }
|
|
||||||
};
|
|
||||||
|
|
||||||
class DIBasicType {
|
class DIBasicType {
|
||||||
MDBasicType *N;
|
MDBasicType *N;
|
||||||
|
|
||||||
@@ -128,7 +115,6 @@ public:
|
|||||||
DIBasicType(const MDBasicType *N = nullptr)
|
DIBasicType(const MDBasicType *N = nullptr)
|
||||||
: N(const_cast<MDBasicType *>(N)) {}
|
: N(const_cast<MDBasicType *>(N)) {}
|
||||||
|
|
||||||
operator DIType() const { return N; }
|
|
||||||
operator MDBasicType *() const { return N; }
|
operator MDBasicType *() const { return N; }
|
||||||
MDBasicType *operator->() const { return N; }
|
MDBasicType *operator->() const { return N; }
|
||||||
MDBasicType &operator*() const { return *N; }
|
MDBasicType &operator*() const { return *N; }
|
||||||
@@ -141,7 +127,6 @@ public:
|
|||||||
DIDerivedType(const MDDerivedTypeBase *N = nullptr)
|
DIDerivedType(const MDDerivedTypeBase *N = nullptr)
|
||||||
: N(const_cast<MDDerivedTypeBase *>(N)) {}
|
: N(const_cast<MDDerivedTypeBase *>(N)) {}
|
||||||
|
|
||||||
operator DIType() const { return N; }
|
|
||||||
operator MDDerivedTypeBase *() const { return N; }
|
operator MDDerivedTypeBase *() const { return N; }
|
||||||
MDDerivedTypeBase *operator->() const { return N; }
|
MDDerivedTypeBase *operator->() const { return N; }
|
||||||
MDDerivedTypeBase &operator*() const { return *N; }
|
MDDerivedTypeBase &operator*() const { return *N; }
|
||||||
@@ -154,7 +139,6 @@ public:
|
|||||||
DICompositeType(const MDCompositeTypeBase *N = nullptr)
|
DICompositeType(const MDCompositeTypeBase *N = nullptr)
|
||||||
: N(const_cast<MDCompositeTypeBase *>(N)) {}
|
: N(const_cast<MDCompositeTypeBase *>(N)) {}
|
||||||
|
|
||||||
operator DIType() const { return N; }
|
|
||||||
operator MDCompositeTypeBase *() const { return N; }
|
operator MDCompositeTypeBase *() const { return N; }
|
||||||
MDCompositeTypeBase *operator->() const { return N; }
|
MDCompositeTypeBase *operator->() const { return N; }
|
||||||
MDCompositeTypeBase &operator*() const { return *N; }
|
MDCompositeTypeBase &operator*() const { return *N; }
|
||||||
@@ -167,7 +151,6 @@ public:
|
|||||||
DISubroutineType(const MDSubroutineType *N = nullptr)
|
DISubroutineType(const MDSubroutineType *N = nullptr)
|
||||||
: N(const_cast<MDSubroutineType *>(N)) {}
|
: N(const_cast<MDSubroutineType *>(N)) {}
|
||||||
|
|
||||||
operator DIType() const { return N; }
|
|
||||||
operator DICompositeType() const { return N; }
|
operator DICompositeType() const { return N; }
|
||||||
operator MDSubroutineType *() const { return N; }
|
operator MDSubroutineType *() const { return N; }
|
||||||
MDSubroutineType *operator->() const { return N; }
|
MDSubroutineType *operator->() const { return N; }
|
||||||
@@ -348,7 +331,6 @@ public:
|
|||||||
template <> struct simplify_type<DESC> : simplify_type<const DESC> {};
|
template <> struct simplify_type<DESC> : simplify_type<const DESC> {};
|
||||||
SIMPLIFY_DESCRIPTOR(DISubrange)
|
SIMPLIFY_DESCRIPTOR(DISubrange)
|
||||||
SIMPLIFY_DESCRIPTOR(DIEnumerator)
|
SIMPLIFY_DESCRIPTOR(DIEnumerator)
|
||||||
SIMPLIFY_DESCRIPTOR(DIType)
|
|
||||||
SIMPLIFY_DESCRIPTOR(DIBasicType)
|
SIMPLIFY_DESCRIPTOR(DIBasicType)
|
||||||
SIMPLIFY_DESCRIPTOR(DIDerivedType)
|
SIMPLIFY_DESCRIPTOR(DIDerivedType)
|
||||||
SIMPLIFY_DESCRIPTOR(DICompositeType)
|
SIMPLIFY_DESCRIPTOR(DICompositeType)
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ bool DbgVariable::isBlockByrefVariable() const {
|
|||||||
->isBlockByrefStruct();
|
->isBlockByrefStruct();
|
||||||
}
|
}
|
||||||
|
|
||||||
DIType DbgVariable::getType() const {
|
const MDType *DbgVariable::getType() const {
|
||||||
MDType *Ty = Var->getType().resolve(DD->getTypeIdentifierMap());
|
MDType *Ty = Var->getType().resolve(DD->getTypeIdentifierMap());
|
||||||
// FIXME: isBlockByrefVariable should be reformulated in terms of complex
|
// FIXME: isBlockByrefVariable should be reformulated in terms of complex
|
||||||
// addresses instead.
|
// addresses instead.
|
||||||
@@ -459,17 +459,15 @@ void DwarfDebug::beginModule() {
|
|||||||
CU.getOrCreateGlobalVariableDIE(GV);
|
CU.getOrCreateGlobalVariableDIE(GV);
|
||||||
for (auto *SP : CUNode->getSubprograms())
|
for (auto *SP : CUNode->getSubprograms())
|
||||||
SPMap.insert(std::make_pair(SP, &CU));
|
SPMap.insert(std::make_pair(SP, &CU));
|
||||||
for (DIType Ty : CUNode->getEnumTypes()) {
|
for (auto *Ty : CUNode->getEnumTypes()) {
|
||||||
// The enum types array by design contains pointers to
|
// The enum types array by design contains pointers to
|
||||||
// MDNodes rather than DIRefs. Unique them here.
|
// MDNodes rather than DIRefs. Unique them here.
|
||||||
DIType UniqueTy = cast<MDType>(resolve(Ty->getRef()));
|
CU.getOrCreateTypeDIE(cast<MDType>(resolve(Ty->getRef())));
|
||||||
CU.getOrCreateTypeDIE(UniqueTy);
|
|
||||||
}
|
}
|
||||||
for (DIType Ty : CUNode->getRetainedTypes()) {
|
for (auto *Ty : CUNode->getRetainedTypes()) {
|
||||||
// The retained types array by design contains pointers to
|
// The retained types array by design contains pointers to
|
||||||
// MDNodes rather than DIRefs. Unique them here.
|
// MDNodes rather than DIRefs. Unique them here.
|
||||||
DIType UniqueTy = cast<MDType>(resolve(Ty->getRef()));
|
CU.getOrCreateTypeDIE(cast<MDType>(resolve(Ty->getRef())));
|
||||||
CU.getOrCreateTypeDIE(UniqueTy);
|
|
||||||
}
|
}
|
||||||
// Emit imported_modules last so that the relevant context is already
|
// Emit imported_modules last so that the relevant context is already
|
||||||
// available.
|
// available.
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ public:
|
|||||||
return Expr.back()->getNumElements() > 0;
|
return Expr.back()->getNumElements() > 0;
|
||||||
}
|
}
|
||||||
bool isBlockByrefVariable() const;
|
bool isBlockByrefVariable() const;
|
||||||
DIType getType() const;
|
const MDType *getType() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// resolve - Look in the DwarfDebug map for the MDNode that
|
/// resolve - Look in the DwarfDebug map for the MDNode that
|
||||||
|
|||||||
@@ -421,7 +421,7 @@ void DwarfUnit::addSourceLine(DIE &Die, DISubprogram SP) {
|
|||||||
|
|
||||||
/// addSourceLine - Add location information to specified debug information
|
/// addSourceLine - Add location information to specified debug information
|
||||||
/// entry.
|
/// entry.
|
||||||
void DwarfUnit::addSourceLine(DIE &Die, DIType Ty) {
|
void DwarfUnit::addSourceLine(DIE &Die, const MDType *Ty) {
|
||||||
assert(Ty);
|
assert(Ty);
|
||||||
|
|
||||||
addSourceLine(Die, Ty->getLine(), Ty->getFilename(), Ty->getDirectory());
|
addSourceLine(Die, Ty->getLine(), Ty->getFilename(), Ty->getDirectory());
|
||||||
@@ -519,8 +519,8 @@ bool DwarfUnit::addRegisterOffset(DIELoc &TheDie, unsigned Reg,
|
|||||||
void DwarfUnit::addBlockByrefAddress(const DbgVariable &DV, DIE &Die,
|
void DwarfUnit::addBlockByrefAddress(const DbgVariable &DV, DIE &Die,
|
||||||
dwarf::Attribute Attribute,
|
dwarf::Attribute Attribute,
|
||||||
const MachineLocation &Location) {
|
const MachineLocation &Location) {
|
||||||
DIType Ty = DV.getType();
|
const MDType *Ty = DV.getType();
|
||||||
DIType TmpTy = Ty;
|
const MDType *TmpTy = Ty;
|
||||||
uint16_t Tag = Ty->getTag();
|
uint16_t Tag = Ty->getTag();
|
||||||
bool isPointer = false;
|
bool isPointer = false;
|
||||||
|
|
||||||
@@ -594,7 +594,7 @@ void DwarfUnit::addBlockByrefAddress(const DbgVariable &DV, DIE &Die,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Return true if type encoding is unsigned.
|
/// Return true if type encoding is unsigned.
|
||||||
static bool isUnsignedDIType(DwarfDebug *DD, DIType Ty) {
|
static bool isUnsignedDIType(DwarfDebug *DD, const MDType *Ty) {
|
||||||
if (DIDerivedType DTy = dyn_cast<MDDerivedTypeBase>(Ty)) {
|
if (DIDerivedType DTy = dyn_cast<MDDerivedTypeBase>(Ty)) {
|
||||||
dwarf::Tag T = (dwarf::Tag)Ty->getTag();
|
dwarf::Tag T = (dwarf::Tag)Ty->getTag();
|
||||||
// Encode pointer constants as unsigned bytes. This is used at least for
|
// Encode pointer constants as unsigned bytes. This is used at least for
|
||||||
@@ -698,13 +698,14 @@ void DwarfUnit::addConstantFPValue(DIE &Die, const ConstantFP *CFP) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// addConstantValue - Add constant value entry in variable DIE.
|
/// addConstantValue - Add constant value entry in variable DIE.
|
||||||
void DwarfUnit::addConstantValue(DIE &Die, const ConstantInt *CI, DIType Ty) {
|
void DwarfUnit::addConstantValue(DIE &Die, const ConstantInt *CI,
|
||||||
|
const MDType *Ty) {
|
||||||
addConstantValue(Die, CI->getValue(), Ty);
|
addConstantValue(Die, CI->getValue(), Ty);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// addConstantValue - Add constant value entry in variable DIE.
|
/// addConstantValue - Add constant value entry in variable DIE.
|
||||||
void DwarfUnit::addConstantValue(DIE &Die, const MachineOperand &MO,
|
void DwarfUnit::addConstantValue(DIE &Die, const MachineOperand &MO,
|
||||||
DIType Ty) {
|
const MDType *Ty) {
|
||||||
assert(MO.isImm() && "Invalid machine operand!");
|
assert(MO.isImm() && "Invalid machine operand!");
|
||||||
|
|
||||||
addConstantValue(Die, isUnsignedDIType(DD, Ty), MO.getImm());
|
addConstantValue(Die, isUnsignedDIType(DD, Ty), MO.getImm());
|
||||||
@@ -717,7 +718,7 @@ void DwarfUnit::addConstantValue(DIE &Die, bool Unsigned, uint64_t Val) {
|
|||||||
Unsigned ? dwarf::DW_FORM_udata : dwarf::DW_FORM_sdata, Val);
|
Unsigned ? dwarf::DW_FORM_udata : dwarf::DW_FORM_sdata, Val);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DwarfUnit::addConstantValue(DIE &Die, const APInt &Val, DIType Ty) {
|
void DwarfUnit::addConstantValue(DIE &Die, const APInt &Val, const MDType *Ty) {
|
||||||
addConstantValue(Die, Val, isUnsignedDIType(DD, Ty));
|
addConstantValue(Die, Val, isUnsignedDIType(DD, Ty));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -801,7 +802,7 @@ DIE *DwarfUnit::createTypeDIE(DICompositeType Ty) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// getOrCreateTypeDIE - Find existing DIE or create new DIE for the
|
/// getOrCreateTypeDIE - Find existing DIE or create new DIE for the
|
||||||
/// given DIType.
|
/// given type.
|
||||||
DIE *DwarfUnit::getOrCreateTypeDIE(const MDNode *TyNode) {
|
DIE *DwarfUnit::getOrCreateTypeDIE(const MDNode *TyNode) {
|
||||||
if (!TyNode)
|
if (!TyNode)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
@@ -865,7 +866,8 @@ void DwarfUnit::updateAcceleratorTables(const MDScope *Context,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// addType - Add a new type attribute to the specified entity.
|
/// addType - Add a new type attribute to the specified entity.
|
||||||
void DwarfUnit::addType(DIE &Entity, DIType Ty, dwarf::Attribute Attribute) {
|
void DwarfUnit::addType(DIE &Entity, const MDType *Ty,
|
||||||
|
dwarf::Attribute Attribute) {
|
||||||
assert(Ty && "Trying to add a type that doesn't exist?");
|
assert(Ty && "Trying to add a type that doesn't exist?");
|
||||||
|
|
||||||
// Check for pre-existence.
|
// Check for pre-existence.
|
||||||
@@ -952,7 +954,7 @@ void DwarfUnit::constructTypeDIE(DIE &Buffer, DIDerivedType DTy) {
|
|||||||
uint16_t Tag = Buffer.getTag();
|
uint16_t Tag = Buffer.getTag();
|
||||||
|
|
||||||
// Map to main type, void will not have a type.
|
// Map to main type, void will not have a type.
|
||||||
DIType FromTy = resolve(DTy->getBaseType());
|
const MDType *FromTy = resolve(DTy->getBaseType());
|
||||||
if (FromTy)
|
if (FromTy)
|
||||||
addType(Buffer, FromTy);
|
addType(Buffer, FromTy);
|
||||||
|
|
||||||
@@ -977,7 +979,7 @@ void DwarfUnit::constructTypeDIE(DIE &Buffer, DIDerivedType DTy) {
|
|||||||
/// constructSubprogramArguments - Construct function argument DIEs.
|
/// constructSubprogramArguments - Construct function argument DIEs.
|
||||||
void DwarfUnit::constructSubprogramArguments(DIE &Buffer, DITypeArray Args) {
|
void DwarfUnit::constructSubprogramArguments(DIE &Buffer, DITypeArray Args) {
|
||||||
for (unsigned i = 1, N = Args.size(); i < N; ++i) {
|
for (unsigned i = 1, N = Args.size(); i < N; ++i) {
|
||||||
DIType Ty = resolve(Args[i]);
|
const MDType *Ty = resolve(Args[i]);
|
||||||
if (!Ty) {
|
if (!Ty) {
|
||||||
assert(i == N-1 && "Unspecified parameter must be the last argument");
|
assert(i == N-1 && "Unspecified parameter must be the last argument");
|
||||||
createAndAddDIE(dwarf::DW_TAG_unspecified_parameters, Buffer);
|
createAndAddDIE(dwarf::DW_TAG_unspecified_parameters, Buffer);
|
||||||
@@ -1424,7 +1426,7 @@ void DwarfUnit::constructEnumTypeDIE(DIE &Buffer, DICompositeType CTy) {
|
|||||||
Value);
|
Value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DIType DTy = resolve(CTy->getBaseType());
|
const MDType *DTy = resolve(CTy->getBaseType());
|
||||||
if (DTy) {
|
if (DTy) {
|
||||||
addType(Buffer, DTy);
|
addType(Buffer, DTy);
|
||||||
addFlag(Buffer, dwarf::DW_AT_enum_class);
|
addFlag(Buffer, dwarf::DW_AT_enum_class);
|
||||||
@@ -1556,7 +1558,7 @@ DIE *DwarfUnit::getOrCreateStaticMemberDIE(DIDerivedType DT_) {
|
|||||||
|
|
||||||
DIE &StaticMemberDIE = createAndAddDIE(DT->getTag(), *ContextDIE, DT);
|
DIE &StaticMemberDIE = createAndAddDIE(DT->getTag(), *ContextDIE, DT);
|
||||||
|
|
||||||
DIType Ty = resolve(DT->getBaseType());
|
const MDType *Ty = resolve(DT->getBaseType());
|
||||||
|
|
||||||
addString(StaticMemberDIE, dwarf::DW_AT_name, DT->getName());
|
addString(StaticMemberDIE, dwarf::DW_AT_name, DT->getName());
|
||||||
addType(StaticMemberDIE, Ty);
|
addType(StaticMemberDIE, Ty);
|
||||||
|
|||||||
@@ -239,14 +239,14 @@ public:
|
|||||||
void addSourceLine(DIE &Die, DIVariable V);
|
void addSourceLine(DIE &Die, DIVariable V);
|
||||||
void addSourceLine(DIE &Die, DIGlobalVariable G);
|
void addSourceLine(DIE &Die, DIGlobalVariable G);
|
||||||
void addSourceLine(DIE &Die, DISubprogram SP);
|
void addSourceLine(DIE &Die, DISubprogram SP);
|
||||||
void addSourceLine(DIE &Die, DIType Ty);
|
void addSourceLine(DIE &Die, const MDType *Ty);
|
||||||
void addSourceLine(DIE &Die, DINameSpace NS);
|
void addSourceLine(DIE &Die, DINameSpace NS);
|
||||||
void addSourceLine(DIE &Die, DIObjCProperty Ty);
|
void addSourceLine(DIE &Die, DIObjCProperty Ty);
|
||||||
|
|
||||||
/// addConstantValue - Add constant value entry in variable DIE.
|
/// addConstantValue - Add constant value entry in variable DIE.
|
||||||
void addConstantValue(DIE &Die, const MachineOperand &MO, DIType Ty);
|
void addConstantValue(DIE &Die, const MachineOperand &MO, const MDType *Ty);
|
||||||
void addConstantValue(DIE &Die, const ConstantInt *CI, DIType Ty);
|
void addConstantValue(DIE &Die, const ConstantInt *CI, const MDType *Ty);
|
||||||
void addConstantValue(DIE &Die, const APInt &Val, DIType Ty);
|
void addConstantValue(DIE &Die, const APInt &Val, const MDType *Ty);
|
||||||
void addConstantValue(DIE &Die, const APInt &Val, bool Unsigned);
|
void addConstantValue(DIE &Die, const APInt &Val, bool Unsigned);
|
||||||
void addConstantValue(DIE &Die, bool Unsigned, uint64_t Val);
|
void addConstantValue(DIE &Die, bool Unsigned, uint64_t Val);
|
||||||
|
|
||||||
@@ -284,7 +284,7 @@ public:
|
|||||||
/// addType - Add a new type attribute to the specified entity. This takes
|
/// addType - Add a new type attribute to the specified entity. This takes
|
||||||
/// and attribute parameter because DW_AT_friend attributes are also
|
/// and attribute parameter because DW_AT_friend attributes are also
|
||||||
/// type references.
|
/// type references.
|
||||||
void addType(DIE &Entity, DIType Ty,
|
void addType(DIE &Entity, const MDType *Ty,
|
||||||
dwarf::Attribute Attribute = dwarf::DW_AT_type);
|
dwarf::Attribute Attribute = dwarf::DW_AT_type);
|
||||||
|
|
||||||
/// getOrCreateNameSpace - Create a DIE for DINameSpace.
|
/// getOrCreateNameSpace - Create a DIE for DINameSpace.
|
||||||
@@ -297,7 +297,7 @@ public:
|
|||||||
bool Minimal = false);
|
bool Minimal = false);
|
||||||
|
|
||||||
/// getOrCreateTypeDIE - Find existing DIE or create new DIE for the
|
/// getOrCreateTypeDIE - Find existing DIE or create new DIE for the
|
||||||
/// given DIType.
|
/// given type.
|
||||||
DIE *getOrCreateTypeDIE(const MDNode *N);
|
DIE *getOrCreateTypeDIE(const MDNode *N);
|
||||||
|
|
||||||
/// getOrCreateContextDIE - Get context owner's DIE.
|
/// getOrCreateContextDIE - Get context owner's DIE.
|
||||||
|
|||||||
@@ -251,8 +251,8 @@ protected:
|
|||||||
Instruction* Terminator = IBuilder.CreateRetVoid();
|
Instruction* Terminator = IBuilder.CreateRetVoid();
|
||||||
|
|
||||||
// Create a local variable around the alloca
|
// Create a local variable around the alloca
|
||||||
DIType IntType = DBuilder.createBasicType("int", 32, 0,
|
auto *IntType =
|
||||||
dwarf::DW_ATE_signed);
|
DBuilder.createBasicType("int", 32, 0, dwarf::DW_ATE_signed);
|
||||||
DIExpression E = DBuilder.createExpression();
|
DIExpression E = DBuilder.createExpression();
|
||||||
DIVariable Variable = DBuilder.createLocalVariable(
|
DIVariable Variable = DBuilder.createLocalVariable(
|
||||||
dwarf::DW_TAG_auto_variable, Subprogram, "x", File, 5, IntType, true);
|
dwarf::DW_TAG_auto_variable, Subprogram, "x", File, 5, IntType, true);
|
||||||
|
|||||||
Reference in New Issue
Block a user