mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-12 02:33:33 +00:00
Add support to describe template value parameter in debug info.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124755 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7e2cb11655
commit
e7d93877c6
@ -39,6 +39,7 @@ namespace llvm {
|
||||
class DILexicalBlock;
|
||||
class DISubprogram;
|
||||
class DITemplateTypeParameter;
|
||||
class DITemplateValueParameter;
|
||||
|
||||
class DIBuilder {
|
||||
private:
|
||||
@ -198,7 +199,7 @@ namespace llvm {
|
||||
|
||||
/// CreateTemplateTypeParameter - Create debugging information for template
|
||||
/// type parameter.
|
||||
/// @param Scope Scope in which this type is dfiend
|
||||
/// @param Scope Scope in which this type is defined.
|
||||
/// @param Name Type parameter name.
|
||||
/// @param Ty Parameter type.
|
||||
/// @param File File where this type parameter is defined.
|
||||
@ -209,6 +210,21 @@ namespace llvm {
|
||||
MDNode *File = 0, unsigned LineNo = 0,
|
||||
unsigned ColumnNo = 0);
|
||||
|
||||
/// CreateTemplateValueParameter - Create debugging information for template
|
||||
/// value parameter.
|
||||
/// @param Scope Scope in which this type is defined.
|
||||
/// @param Name Value parameter name.
|
||||
/// @param Ty Parameter type.
|
||||
/// @param Value Constant parameter value.
|
||||
/// @param File File where this type parameter is defined.
|
||||
/// @param LineNo Line number.
|
||||
/// @param ColumnNo Column Number.
|
||||
DITemplateValueParameter
|
||||
CreateTemplateValueParameter(DIDescriptor Scope, StringRef Name, DIType Ty,
|
||||
uint64_t Value,
|
||||
MDNode *File = 0, unsigned LineNo = 0,
|
||||
unsigned ColumnNo = 0);
|
||||
|
||||
/// CreateArrayType - Create debugging information entry for an array.
|
||||
/// @param Size Array size.
|
||||
/// @param AlignInBits Alignment.
|
||||
|
@ -123,6 +123,7 @@ namespace llvm {
|
||||
bool isGlobal() const;
|
||||
bool isUnspecifiedParameter() const;
|
||||
bool isTemplateTypeParameter() const;
|
||||
bool isTemplateValueParameter() const;
|
||||
};
|
||||
|
||||
/// DISubrange - This is used to represent ranges, for array bounds.
|
||||
@ -387,6 +388,25 @@ namespace llvm {
|
||||
unsigned getColumnNumber() const { return getUnsignedField(6); }
|
||||
};
|
||||
|
||||
/// DITemplateValueParameter - This is a wrapper for template value parameter.
|
||||
class DITemplateValueParameter : public DIDescriptor {
|
||||
public:
|
||||
explicit DITemplateValueParameter(const MDNode *N = 0) : DIDescriptor(N) {}
|
||||
|
||||
DIScope getContext() const { return getFieldAs<DIScope>(1); }
|
||||
StringRef getName() const { return getStringField(2); }
|
||||
DIType getType() const { return getFieldAs<DIType>(3); }
|
||||
uint64_t getValue() const { return getUInt64Field(4); }
|
||||
StringRef getFilename() const {
|
||||
return getFieldAs<DIFile>(5).getFilename();
|
||||
}
|
||||
StringRef getDirectory() const {
|
||||
return getFieldAs<DIFile>(5).getDirectory();
|
||||
}
|
||||
unsigned getLineNumber() const { return getUnsignedField(6); }
|
||||
unsigned getColumnNumber() const { return getUnsignedField(7); }
|
||||
};
|
||||
|
||||
/// DISubprogram - This is a wrapper for a subprogram (e.g. a function).
|
||||
class DISubprogram : public DIScope {
|
||||
public:
|
||||
|
@ -282,6 +282,27 @@ DIBuilder::CreateTemplateTypeParameter(DIDescriptor Context, StringRef Name,
|
||||
array_lengthof(Elts)));
|
||||
}
|
||||
|
||||
/// CreateTemplateValueParameter - Create debugging information for template
|
||||
/// value parameter.
|
||||
DITemplateValueParameter
|
||||
DIBuilder::CreateTemplateValueParameter(DIDescriptor Context, StringRef Name,
|
||||
DIType Ty, uint64_t Val,
|
||||
MDNode *File, unsigned LineNo,
|
||||
unsigned ColumnNo) {
|
||||
Value *Elts[] = {
|
||||
GetTagConstant(VMContext, dwarf::DW_TAG_template_value_parameter),
|
||||
Context,
|
||||
MDString::get(VMContext, Name),
|
||||
Ty,
|
||||
ConstantInt::get(Type::getInt64Ty(VMContext), Val),
|
||||
File,
|
||||
ConstantInt::get(Type::getInt32Ty(VMContext), LineNo),
|
||||
ConstantInt::get(Type::getInt32Ty(VMContext), ColumnNo)
|
||||
};
|
||||
return DITemplateValueParameter(MDNode::get(VMContext, &Elts[0],
|
||||
array_lengthof(Elts)));
|
||||
}
|
||||
|
||||
/// CreateStructType - Create debugging information entry for a struct.
|
||||
DIType DIBuilder::CreateStructType(DIDescriptor Context, StringRef Name,
|
||||
DIFile File, unsigned LineNumber,
|
||||
|
@ -227,6 +227,12 @@ bool DIDescriptor::isTemplateTypeParameter() const {
|
||||
return DbgNode && getTag() == dwarf::DW_TAG_template_type_parameter;
|
||||
}
|
||||
|
||||
/// isTemplateValueParameter - Return true if the specified tag is
|
||||
/// DW_TAG_template_value_parameter.
|
||||
bool DIDescriptor::isTemplateValueParameter() const {
|
||||
return DbgNode && getTag() == dwarf::DW_TAG_template_value_parameter;
|
||||
}
|
||||
|
||||
/// isCompileUnit - Return true if the specified tag is DW_TAG_compile_unit.
|
||||
bool DIDescriptor::isCompileUnit() const {
|
||||
return DbgNode && getTag() == dwarf::DW_TAG_compile_unit;
|
||||
|
@ -1161,6 +1161,9 @@ void DwarfDebug::constructTypeDIE(DIE &Buffer, DICompositeType CTy) {
|
||||
if (Element.isTemplateTypeParameter())
|
||||
Buffer.addChild(getOrCreateTemplateTypeParameterDIE(
|
||||
DITemplateTypeParameter(Element)));
|
||||
else if (Element.isTemplateValueParameter())
|
||||
Buffer.addChild(getOrCreateTemplateValueParameterDIE(
|
||||
DITemplateValueParameter(Element)));
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -1208,6 +1211,23 @@ DwarfDebug::getOrCreateTemplateTypeParameterDIE(DITemplateTypeParameter TP) {
|
||||
return ParamDIE;
|
||||
}
|
||||
|
||||
/// getOrCreateTemplateValueParameterDIE - Find existing DIE or create new DIE
|
||||
/// for the given DITemplateValueParameter.
|
||||
DIE *
|
||||
DwarfDebug::getOrCreateTemplateValueParameterDIE(DITemplateValueParameter TPV) {
|
||||
CompileUnit *TVCU = getCompileUnit(TPV);
|
||||
DIE *ParamDIE = TVCU->getDIE(TPV);
|
||||
if (ParamDIE)
|
||||
return ParamDIE;
|
||||
|
||||
ParamDIE = new DIE(dwarf::DW_TAG_template_value_parameter);
|
||||
addType(ParamDIE, TPV.getType());
|
||||
addString(ParamDIE, dwarf::DW_AT_name, dwarf::DW_FORM_string, TPV.getName());
|
||||
addUInt(ParamDIE, dwarf::DW_AT_const_value, dwarf::DW_FORM_udata,
|
||||
TPV.getValue());
|
||||
return ParamDIE;
|
||||
}
|
||||
|
||||
/// constructSubrangeDIE - Construct subrange DIE from DISubrange.
|
||||
void DwarfDebug::constructSubrangeDIE(DIE &Buffer, DISubrange SR, DIE *IndexTy){
|
||||
int64_t L = SR.getLo();
|
||||
|
@ -53,6 +53,7 @@ class DINameSpace;
|
||||
class DISubrange;
|
||||
class DICompositeType;
|
||||
class DITemplateTypeParameter;
|
||||
class DITemplateValueParameter;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
/// SrcLineInfo - This class is used to record source line correspondence.
|
||||
@ -347,6 +348,10 @@ private:
|
||||
/// for the given DITemplateTypeParameter.
|
||||
DIE *getOrCreateTemplateTypeParameterDIE(DITemplateTypeParameter TP);
|
||||
|
||||
/// getOrCreateTemplateValueParameterDIE - Find existing DIE or create new DIE
|
||||
/// for the given DITemplateValueParameter.
|
||||
DIE *getOrCreateTemplateValueParameterDIE(DITemplateValueParameter TVP);
|
||||
|
||||
void addPubTypes(DISubprogram SP);
|
||||
|
||||
/// constructTypeDIE - Construct basic type die from DIBasicType.
|
||||
|
Loading…
x
Reference in New Issue
Block a user