mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-24 20:29:53 +00:00
Subprogram is a scope. Derive DISubprogram from DIScope.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80637 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5e005d814f
commit
82dfc0cd8c
@ -342,11 +342,26 @@ namespace llvm {
|
||||
};
|
||||
|
||||
/// DISubprogram - This is a wrapper for a subprogram (e.g. a function).
|
||||
class DISubprogram : public DIGlobal {
|
||||
class DISubprogram : public DIScope {
|
||||
public:
|
||||
explicit DISubprogram(MDNode *N = 0)
|
||||
: DIGlobal(N, dwarf::DW_TAG_subprogram) {}
|
||||
explicit DISubprogram(MDNode *N = 0) {
|
||||
DbgNode = N;
|
||||
if (DbgNode && !isSubprogram())
|
||||
DbgNode = 0;
|
||||
}
|
||||
|
||||
DIDescriptor getContext() const { return getDescriptorField(2); }
|
||||
const std::string &getName(std::string &F) const {
|
||||
return getStringField(3, F);
|
||||
}
|
||||
const std::string &getDisplayName(std::string &F) const {
|
||||
return getStringField(4, F);
|
||||
}
|
||||
const std::string &getLinkageName(std::string &F) const {
|
||||
return getStringField(5, F);
|
||||
}
|
||||
DICompileUnit getCompileUnit() const{ return getFieldAs<DICompileUnit>(6); }
|
||||
unsigned getLineNumber() const { return getUnsignedField(7); }
|
||||
DICompositeType getType() const { return getFieldAs<DICompositeType>(8); }
|
||||
|
||||
/// getReturnTypeName - Subprogram return types are encoded either as
|
||||
@ -362,6 +377,11 @@ namespace llvm {
|
||||
return T.getName(F);
|
||||
}
|
||||
|
||||
/// isLocalToUnit - Return true if this subprogram is local to the current
|
||||
/// compile unit, like 'static' in C.
|
||||
unsigned isLocalToUnit() const { return getUnsignedField(9); }
|
||||
unsigned isDefinition() const { return getUnsignedField(10); }
|
||||
|
||||
/// Verify - Verify that a subprogram descriptor is well formed.
|
||||
bool Verify() const;
|
||||
|
||||
|
@ -494,7 +494,24 @@ void DIGlobal::dump() const {
|
||||
|
||||
/// dump - Print subprogram.
|
||||
void DISubprogram::dump() const {
|
||||
DIGlobal::dump();
|
||||
std::string Res;
|
||||
if (!getName(Res).empty())
|
||||
errs() << " [" << Res << "] ";
|
||||
|
||||
unsigned Tag = getTag();
|
||||
errs() << " [" << dwarf::TagString(Tag) << "] ";
|
||||
|
||||
// TODO : Print context
|
||||
getCompileUnit().dump();
|
||||
errs() << " [" << getLineNumber() << "] ";
|
||||
|
||||
if (isLocalToUnit())
|
||||
errs() << " [local] ";
|
||||
|
||||
if (isDefinition())
|
||||
errs() << " [def] ";
|
||||
|
||||
errs() << "\n";
|
||||
}
|
||||
|
||||
/// dump - Print global variable.
|
||||
|
@ -487,6 +487,23 @@ void DwarfDebug::AddSourceLine(DIE *Die, const DIGlobal *G) {
|
||||
AddUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
|
||||
AddUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
|
||||
}
|
||||
|
||||
/// AddSourceLine - Add location information to specified debug information
|
||||
/// entry.
|
||||
void DwarfDebug::AddSourceLine(DIE *Die, const DISubprogram *SP) {
|
||||
// If there is no compile unit specified, don't add a line #.
|
||||
if (SP->getCompileUnit().isNull())
|
||||
return;
|
||||
|
||||
unsigned Line = SP->getLineNumber();
|
||||
unsigned FileID = FindCompileUnit(SP->getCompileUnit()).getID();
|
||||
assert(FileID && "Invalid file id");
|
||||
AddUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
|
||||
AddUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
|
||||
}
|
||||
|
||||
/// AddSourceLine - Add location information to specified debug information
|
||||
/// entry.
|
||||
void DwarfDebug::AddSourceLine(DIE *Die, const DIType *Ty) {
|
||||
// If there is no compile unit specified, don't add a line #.
|
||||
DICompileUnit CU = Ty->getCompileUnit();
|
||||
|
@ -275,11 +275,8 @@ class VISIBILITY_HIDDEN DwarfDebug : public Dwarf {
|
||||
/// AddSourceLine - Add location information to specified debug information
|
||||
/// entry.
|
||||
void AddSourceLine(DIE *Die, const DIVariable *V);
|
||||
|
||||
/// AddSourceLine - Add location information to specified debug information
|
||||
/// entry.
|
||||
void AddSourceLine(DIE *Die, const DIGlobal *G);
|
||||
|
||||
void AddSourceLine(DIE *Die, const DISubprogram *SP);
|
||||
void AddSourceLine(DIE *Die, const DIType *Ty);
|
||||
|
||||
/// AddAddress - Add an address attribute to a die based on the location
|
||||
|
Loading…
Reference in New Issue
Block a user