diff options
Diffstat (limited to 'llvm/tools')
| -rw-r--r-- | llvm/tools/llvm-pdbdump/LLVMOutputStyle.cpp | 24 | ||||
| -rw-r--r-- | llvm/tools/llvm-pdbdump/LLVMOutputStyle.h | 1 | ||||
| -rw-r--r-- | llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp | 3 | ||||
| -rw-r--r-- | llvm/tools/llvm-pdbdump/llvm-pdbdump.h | 1 |
4 files changed, 29 insertions, 0 deletions
diff --git a/llvm/tools/llvm-pdbdump/LLVMOutputStyle.cpp b/llvm/tools/llvm-pdbdump/LLVMOutputStyle.cpp index db39dae9e4f..c69f3849572 100644 --- a/llvm/tools/llvm-pdbdump/LLVMOutputStyle.cpp +++ b/llvm/tools/llvm-pdbdump/LLVMOutputStyle.cpp @@ -18,6 +18,7 @@ #include "llvm/DebugInfo/PDB/PDBExtras.h" #include "llvm/DebugInfo/PDB/Raw/DbiStream.h" #include "llvm/DebugInfo/PDB/Raw/EnumTables.h" +#include "llvm/DebugInfo/PDB/Raw/GlobalsStream.h" #include "llvm/DebugInfo/PDB/Raw/ISectionContribVisitor.h" #include "llvm/DebugInfo/PDB/Raw/InfoStream.h" #include "llvm/DebugInfo/PDB/Raw/ModInfo.h" @@ -122,6 +123,9 @@ Error LLVMOutputStyle::dump() { if (auto EC = dumpSectionMap()) return EC; + if (auto EC = dumpGlobalsStream()) + return EC; + if (auto EC = dumpPublicsStream()) return EC; @@ -343,6 +347,26 @@ void LLVMOutputStyle::dumpBitVector(StringRef Name, const BitVector &V) { P.printList(Name, Vec); } +Error LLVMOutputStyle::dumpGlobalsStream() { + if (!opts::raw::DumpGlobals) + return Error::success(); + + DictScope D(P, "Globals Stream"); + auto Globals = File.getPDBGlobalsStream(); + if (!Globals) + return Globals.takeError(); + + auto Dbi = File.getPDBDbiStream(); + if (!Dbi) + return Dbi.takeError(); + + P.printNumber("Stream number", Dbi->getGlobalSymbolStreamIndex()); + P.printNumber("Number of buckets", Globals->getNumBuckets()); + P.printList("Hash Buckets", Globals->getHashBuckets()); + + return Error::success(); +} + Error LLVMOutputStyle::dumpStreamBlocks() { if (!opts::raw::DumpStreamBlocks) return Error::success(); diff --git a/llvm/tools/llvm-pdbdump/LLVMOutputStyle.h b/llvm/tools/llvm-pdbdump/LLVMOutputStyle.h index f5740ec458e..72a3fd4aba5 100644 --- a/llvm/tools/llvm-pdbdump/LLVMOutputStyle.h +++ b/llvm/tools/llvm-pdbdump/LLVMOutputStyle.h @@ -31,6 +31,7 @@ private: Error dumpStreamSummary(); Error dumpFreePageMap(); Error dumpBlockRanges(); + Error dumpGlobalsStream(); Error dumpStreamBytes(); Error dumpStreamBlocks(); Error dumpInfoStream(); diff --git a/llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp b/llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp index a6dd56048ce..b356a28d218 100644 --- a/llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp +++ b/llvm/tools/llvm-pdbdump/llvm-pdbdump.cpp @@ -215,6 +215,8 @@ cl::opt<bool> DumpLineInfo("line-info", cl::cat(FileOptions), cl::sub(RawSubcommand)); // SYMBOL OPTIONS +cl::opt<bool> DumpGlobals("globals", cl::desc("dump globals stream data"), + cl::cat(SymbolOptions), cl::sub(RawSubcommand)); cl::opt<bool> DumpModuleSyms("module-syms", cl::desc("dump module symbols"), cl::cat(SymbolOptions), cl::sub(RawSubcommand)); cl::opt<bool> DumpPublics("publics", cl::desc("dump Publics stream data"), @@ -559,6 +561,7 @@ int main(int argc_, const char *argv_[]) { opts::raw::DumpModules = true; opts::raw::DumpModuleFiles = true; opts::raw::DumpModuleSyms = true; + opts::raw::DumpGlobals = true; opts::raw::DumpPublics = true; opts::raw::DumpSectionHeaders = true; opts::raw::DumpStreamSummary = true; diff --git a/llvm/tools/llvm-pdbdump/llvm-pdbdump.h b/llvm/tools/llvm-pdbdump/llvm-pdbdump.h index 72423d7e8c7..42d847a23fc 100644 --- a/llvm/tools/llvm-pdbdump/llvm-pdbdump.h +++ b/llvm/tools/llvm-pdbdump/llvm-pdbdump.h @@ -43,6 +43,7 @@ struct BlockRange { extern llvm::Optional<BlockRange> DumpBlockRange; extern llvm::cl::list<uint32_t> DumpStreamData; +extern llvm::cl::opt<bool> DumpGlobals; extern llvm::cl::opt<bool> DumpHeaders; extern llvm::cl::opt<bool> DumpStreamBlocks; extern llvm::cl::opt<bool> DumpStreamSummary; |

