Add dump() routines to help debug debug info :)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63353 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Devang Patel 2009-01-30 01:03:10 +00:00
parent 35247c3513
commit bf3f5a08ee
2 changed files with 128 additions and 0 deletions

View File

@ -114,6 +114,9 @@ namespace llvm {
/// Verify - Verify that a compile unit is well formed.
bool Verify() const;
/// dump - print compile unit.
void dump() const;
};
/// DIEnumerator - A wrapper for an enumerator (e.g. X and Y in 'enum {X,Y}').
@ -189,6 +192,9 @@ namespace llvm {
assert (0 && "Invalid DIDescriptor");
return "";
}
/// dump - print type.
void dump() const;
};
/// DIBasicType - A basic type, like 'int' or 'float'.
@ -199,6 +205,9 @@ namespace llvm {
unsigned getEncoding() const { return getUnsignedField(9); }
std::string getFilename() const { return getStringField(10); }
std::string getDirectory() const { return getStringField(11); }
/// dump - print basic type.
void dump() const;
};
/// DIDerivedType - A simple derived type, like a const qualified type,
@ -213,6 +222,9 @@ namespace llvm {
DIType getTypeDerivedFrom() const { return getFieldAs<DIType>(9); }
std::string getFilename() const { return getStringField(10); }
std::string getDirectory() const { return getStringField(11); }
/// dump - print derived type.
void dump() const;
};
/// DICompositeType - This descriptor holds a type that can refer to multiple
@ -228,6 +240,9 @@ namespace llvm {
/// Verify - Verify that a composite type descriptor is well formed.
bool Verify() const;
/// dump - print composite type.
void dump() const;
};
/// DIGlobal - This is a common class for global variables and subprograms.
@ -273,6 +288,9 @@ namespace llvm {
assert (0 && "Invalid DIDescriptor");
return "";
}
/// dump - print global.
void dump() const;
};
/// DISubprogram - This is a wrapper for a subprogram (e.g. a function).
@ -285,6 +303,9 @@ namespace llvm {
/// Verify - Verify that a subprogram descriptor is well formed.
bool Verify() const;
/// dump - print subprogram.
void dump() const;
};
/// DIGlobalVariable - This is a wrapper for a global variable.
@ -298,6 +319,9 @@ namespace llvm {
/// Verify - Verify that a global variable descriptor is well formed.
bool Verify() const;
/// dump - print global variable.
void dump() const;
};
/// DIVariable - This is a wrapper for a variable (e.g. parameter, local,
@ -319,6 +343,9 @@ namespace llvm {
/// Verify - Verify that a variable descriptor is well formed.
bool Verify() const;
/// dump - print variable.
void dump() const;
};
/// DIBlock - This is a wrapper for a block (e.g. a function, scope, etc).

View File

@ -20,6 +20,7 @@
#include "llvm/Instructions.h"
#include "llvm/Module.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/Support/Streams.h"
using namespace llvm;
//===----------------------------------------------------------------------===//
@ -870,3 +871,103 @@ namespace llvm {
}
}
/// dump - print compile unit.
void DICompileUnit::dump() const {
cerr << " [" << dwarf::LanguageString(getLanguage()) << "] ";
cerr << " [" << getDirectory() << "/" << getFilename() << " ]";
}
/// dump - print type.
void DIType::dump() const {
if (isNull()) return;
if (!getName().empty())
cerr << " [" << getName() << "] ";
unsigned Tag = getTag();
cerr << " [" << dwarf::TagString(Tag) << "] ";
// TODO : Print context
getCompileUnit().dump();
cerr << " ["
<< getLineNumber() << ", "
<< getSizeInBits() << ", "
<< getAlignInBits() << ", "
<< getOffsetInBits()
<< "] ";
if (isPrivate())
cerr << " [private] ";
else if (isProtected())
cerr << " [protected] ";
if (isForwardDecl())
cerr << " [fwd] ";
if (isBasicType(Tag))
DIBasicType(GV).dump();
else if (isDerivedType(Tag))
DIDerivedType(GV).dump();
else if (isCompositeType(Tag))
DICompositeType(GV).dump();
else {
cerr << "Invalid DIType\n";
return;
}
cerr << "\n";
}
/// dump - print basic type.
void DIBasicType::dump() const {
cerr << " [" << dwarf::AttributeEncodingString(getEncoding()) << "] ";
}
/// dump - print derived type.
void DIDerivedType::dump() const {
cerr << "\n\t Derived From: "; getTypeDerivedFrom().dump();
}
/// dump - print composite type.
void DICompositeType::dump() const {
DIArray A = getTypeArray();
if (A.isNull())
return;
cerr << " [" << A.getNumElements() << " elements]";
}
/// dump - print global.
void DIGlobal::dump() const {
if (!getName().empty())
cerr << " [" << getName() << "] ";
unsigned Tag = getTag();
cerr << " [" << dwarf::TagString(Tag) << "] ";
// TODO : Print context
getCompileUnit().dump();
cerr << " [" << getLineNumber() << "] ";
if (isLocalToUnit())
cerr << " [local] ";
if (isDefinition())
cerr << " [def] ";
if (isGlobalVariable(Tag))
DIGlobalVariable(GV).dump();
cerr << "\n";
}
/// dump - print subprogram.
void DISubprogram::dump() const {
DIGlobal::dump();
}
/// dump - print global variable.
void DIGlobalVariable::dump() const {
cerr << " ["; getGlobal()->dump(); cerr << "] ";
}
/// dump - print variable.
void DIVariable::dump() const {
if (!getName().empty())
cerr << " [" << getName() << "] ";
getCompileUnit().dump();
cerr << " [" << getLineNumber() << "] ";
getType().dump();
cerr << "\n";
}