summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2015-02-27 09:15:18 +0000
committerZachary Turner <zturner@google.com>2015-02-27 09:15:18 +0000
commitdb18f5ca76e4e699598867f67a343d0b01e3a054 (patch)
treec604fbd488cf1c1c3d6af3b392a4b001f5954aaa /llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp
parentddc4d085cce9691b70e042dc9e03d795f33225c9 (diff)
downloadbcm5719-llvm-db18f5ca76e4e699598867f67a343d0b01e3a054.tar.gz
bcm5719-llvm-db18f5ca76e4e699598867f67a343d0b01e3a054.zip
[llvm-pdbdump] Add support for dumping global variables.
llvm-svn: 230744
Diffstat (limited to 'llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp')
-rw-r--r--llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp60
1 files changed, 48 insertions, 12 deletions
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();
}
OpenPOWER on IntegriCloud