diff options
author | Devang Patel <dpatel@apple.com> | 2009-01-30 01:03:10 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2009-01-30 01:03:10 +0000 |
commit | bf3f5a08eed98e723e920a06a0cde9699593aa41 (patch) | |
tree | c96c5f64b6fcf60387f278eaefe43b4c1b0fa4a2 /lib/Analysis/DebugInfo.cpp | |
parent | 35247c35136232bb30aa17543dbcf9c92fa24d29 (diff) |
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
Diffstat (limited to 'lib/Analysis/DebugInfo.cpp')
-rw-r--r-- | lib/Analysis/DebugInfo.cpp | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/lib/Analysis/DebugInfo.cpp b/lib/Analysis/DebugInfo.cpp index 2f336572a1..e5bbbd5aab 100644 --- a/lib/Analysis/DebugInfo.cpp +++ b/lib/Analysis/DebugInfo.cpp @@ -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"; +} |