diff options
Diffstat (limited to 'llvm/tools/llvm-pdbdump')
-rw-r--r-- | llvm/tools/llvm-pdbdump/TypeDumper.cpp | 17 | ||||
-rw-r--r-- | llvm/tools/llvm-pdbdump/TypeDumper.h | 2 | ||||
-rw-r--r-- | llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp | 60 |
3 files changed, 48 insertions, 31 deletions
diff --git a/llvm/tools/llvm-pdbdump/TypeDumper.cpp b/llvm/tools/llvm-pdbdump/TypeDumper.cpp index 7b705961441..d0df9fec7ba 100644 --- a/llvm/tools/llvm-pdbdump/TypeDumper.cpp +++ b/llvm/tools/llvm-pdbdump/TypeDumper.cpp @@ -10,14 +10,12 @@ #include "TypeDumper.h" #include "ClassDefinitionDumper.h" -#include "FunctionDumper.h" #include "llvm-pdbdump.h" #include "TypedefDumper.h" #include "llvm/DebugInfo/PDB/IPDBSession.h" #include "llvm/DebugInfo/PDB/PDBSymbolExe.h" #include "llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h" -#include "llvm/DebugInfo/PDB/PDBSymbolTypeFunctionSig.h" #include "llvm/DebugInfo/PDB/PDBSymbolTypeTypedef.h" #include "llvm/DebugInfo/PDB/PDBSymbolTypeUDT.h" @@ -32,12 +30,6 @@ void TypeDumper::start(const PDBSymbolExe &Exe, raw_ostream &OS, int Indent) { while (auto Enum = Enums->getNext()) Enum->dump(OS, Indent + 2, *this); - auto FuncSigs = Exe.findAllChildren<PDBSymbolTypeFunctionSig>(); - OS << newline(Indent); - OS << "Function Signatures: (" << FuncSigs->getChildCount() << " items)"; - while (auto Sig = FuncSigs->getNext()) - Sig->dump(OS, Indent + 2, *this); - auto Typedefs = Exe.findAllChildren<PDBSymbolTypeTypedef>(); OS << newline(Indent) << "Typedefs: (" << Typedefs->getChildCount() << " items)"; @@ -62,15 +54,6 @@ void TypeDumper::dump(const PDBSymbolTypeEnum &Symbol, raw_ostream &OS, OS << "enum " << Symbol.getName(); } -void TypeDumper::dump(const PDBSymbolTypeFunctionSig &Symbol, raw_ostream &OS, - int Indent) { - if (!InlineDump) - OS << newline(Indent); - - FunctionDumper Dumper; - Dumper.start(Symbol, nullptr, FunctionDumper::PointerType::None, OS); -} - void TypeDumper::dump(const PDBSymbolTypeTypedef &Symbol, raw_ostream &OS, int Indent) { if (!InlineDump) diff --git a/llvm/tools/llvm-pdbdump/TypeDumper.h b/llvm/tools/llvm-pdbdump/TypeDumper.h index d96c24c87fa..93e492429ff 100644 --- a/llvm/tools/llvm-pdbdump/TypeDumper.h +++ b/llvm/tools/llvm-pdbdump/TypeDumper.h @@ -22,8 +22,6 @@ public: void dump(const PDBSymbolTypeEnum &Symbol, raw_ostream &OS, int Indent) override; - void dump(const PDBSymbolTypeFunctionSig &Symbol, raw_ostream &OS, - int Indent) override; void dump(const PDBSymbolTypeTypedef &Symbol, raw_ostream &OS, int Indent) override; void dump(const PDBSymbolTypeUDT &Symbol, raw_ostream &OS, diff --git a/llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp b/llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp index e33e71562d3..e8a105d35d2 100644 --- a/llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp +++ b/llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp @@ -15,7 +15,9 @@ #include "llvm-pdbdump.h" #include "CompilandDumper.h" +#include "FunctionDumper.h" #include "TypeDumper.h" +#include "VariableDumper.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/StringExtras.h" @@ -25,7 +27,10 @@ #include "llvm/DebugInfo/PDB/IPDBSession.h" #include "llvm/DebugInfo/PDB/PDB.h" #include "llvm/DebugInfo/PDB/PDBSymbolCompiland.h" +#include "llvm/DebugInfo/PDB/PDBSymbolData.h" #include "llvm/DebugInfo/PDB/PDBSymbolExe.h" +#include "llvm/DebugInfo/PDB/PDBSymbolFunc.h" +#include "llvm/DebugInfo/PDB/PDBSymbolThunk.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/ConvertUTF.h" #include "llvm/Support/FileSystem.h" @@ -50,12 +55,13 @@ cl::list<std::string> InputFilenames(cl::Positional, cl::desc("<input PDB files>"), cl::OneOrMore); -cl::opt<bool> DumpCompilands("compilands", cl::desc("Display compilands")); -cl::opt<bool> DumpSymbols("symbols", - cl::desc("Display symbols (implies --compilands")); -cl::opt<bool> DumpTypes("types", cl::desc("Display types")); -cl::opt<bool> DumpClassDefs("class-definitions", - cl::desc("Display full class definitions")); +cl::opt<bool> Compilands("compilands", cl::desc("Display compilands")); +cl::opt<bool> Symbols("symbols", + cl::desc("Display symbols for each compiland")); +cl::opt<bool> Globals("globals", cl::desc("Dump global symbols")); +cl::opt<bool> Types("types", cl::desc("Display types")); +cl::opt<bool> ClassDefs("class-definitions", + cl::desc("Display full class definitions")); } static void dumpInput(StringRef Path) { @@ -85,18 +91,48 @@ static void dumpInput(StringRef Path) { if (GlobalScope->hasPrivateSymbols()) outs() << "HasPrivateSymbols "; - if (opts::DumpTypes) { - outs() << "\nDumping types"; - TypeDumper Dumper(false, opts::DumpClassDefs); + if (opts::Compilands) { + outs() << "\n---COMPILANDS---"; + auto Compilands = GlobalScope->findAllChildren<PDBSymbolCompiland>(); + CompilandDumper Dumper; + while (auto Compiland = Compilands->getNext()) + Dumper.start(*Compiland, outs(), 2, false); + } + + if (opts::Types) { + outs() << "\n---TYPES---"; + TypeDumper Dumper(false, opts::ClassDefs); Dumper.start(*GlobalScope, outs(), 2); } - if (opts::DumpSymbols || opts::DumpCompilands) { - outs() << "\nDumping compilands"; + if (opts::Symbols) { + outs() << "\n---SYMBOLS---"; auto Compilands = GlobalScope->findAllChildren<PDBSymbolCompiland>(); CompilandDumper Dumper; while (auto Compiland = Compilands->getNext()) - Dumper.start(*Compiland, outs(), 2, opts::DumpSymbols); + Dumper.start(*Compiland, outs(), 2, true); + } + + if (opts::Globals) { + outs() << "\n---GLOBALS---"; + { + FunctionDumper Dumper; + auto Functions = GlobalScope->findAllChildren<PDBSymbolFunc>(); + while (auto Function = Functions->getNext()) + Dumper.start(*Function, FunctionDumper::PointerType::None, outs(), 2); + } + { + auto Vars = GlobalScope->findAllChildren<PDBSymbolData>(); + VariableDumper Dumper; + while (auto Var = Vars->getNext()) + Dumper.start(*Var, outs(), 2); + } + { + auto Thunks = GlobalScope->findAllChildren<PDBSymbolThunk>(); + CompilandDumper Dumper; + while (auto Thunk = Thunks->getNext()) + Dumper.dump(*Thunk, outs(), 2); + } } outs().flush(); } |