llvm-pdbutil.h revision 341825
1319780Sdim//===- llvm-pdbutil.h ----------------------------------------- *- C++ --*-===// 2319780Sdim// 3319780Sdim// The LLVM Compiler Infrastructure 4319780Sdim// 5319780Sdim// This file is distributed under the University of Illinois Open Source 6319780Sdim// License. See LICENSE.TXT for details. 7319780Sdim// 8319780Sdim//===----------------------------------------------------------------------===// 9319780Sdim 10319780Sdim#ifndef LLVM_TOOLS_LLVMPDBDUMP_LLVMPDBDUMP_H 11319780Sdim#define LLVM_TOOLS_LLVMPDBDUMP_LLVMPDBDUMP_H 12319780Sdim 13327952Sdim#include "llvm/ADT/DenseMap.h" 14319780Sdim#include "llvm/ADT/Optional.h" 15327952Sdim#include "llvm/ADT/PointerUnion.h" 16319780Sdim#include "llvm/Support/CommandLine.h" 17319780Sdim#include "llvm/Support/raw_ostream.h" 18319780Sdim 19319780Sdim#include <memory> 20319780Sdim#include <stdint.h> 21319780Sdim 22319780Sdimnamespace llvm { 23327952Sdimnamespace object { 24327952Sdimclass COFFObjectFile; 25327952Sdim} 26319780Sdimnamespace pdb { 27319780Sdimclass PDBSymbolData; 28319780Sdimclass PDBSymbolFunc; 29327952Sdimclass PDBFile; 30319780Sdimuint32_t getTypeLength(const PDBSymbolData &Symbol); 31319780Sdim} 32327952Sdimtypedef llvm::PointerUnion<object::COFFObjectFile *, pdb::PDBFile *> 33327952Sdim PdbOrCoffObj; 34319780Sdim} 35319780Sdim 36319780Sdimnamespace opts { 37319780Sdim 38320041Sdimenum class DumpLevel { None, Basic, Verbose }; 39320041Sdim 40319780Sdimenum class ModuleSubsection { 41319780Sdim Unknown, 42319780Sdim Lines, 43319780Sdim FileChecksums, 44319780Sdim InlineeLines, 45319780Sdim CrossScopeImports, 46319780Sdim CrossScopeExports, 47319780Sdim StringTable, 48319780Sdim Symbols, 49319780Sdim FrameData, 50319780Sdim CoffSymbolRVAs, 51319780Sdim All 52319780Sdim}; 53319780Sdim 54319780Sdimnamespace pretty { 55319780Sdim 56319780Sdimenum class ClassDefinitionFormat { None, Layout, All }; 57319780Sdimenum class ClassSortMode { 58319780Sdim None, 59319780Sdim Name, 60319780Sdim Size, 61319780Sdim Padding, 62319780Sdim PaddingPct, 63319780Sdim PaddingImmediate, 64319780Sdim PaddingPctImmediate 65319780Sdim}; 66319780Sdim 67319780Sdimenum class SymbolSortMode { None, Name, Size }; 68319780Sdim 69319780Sdimenum class SymLevel { Functions, Data, Thunks, All }; 70319780Sdim 71319780Sdimbool shouldDumpSymLevel(SymLevel Level); 72319780Sdimbool compareFunctionSymbols( 73319780Sdim const std::unique_ptr<llvm::pdb::PDBSymbolFunc> &F1, 74319780Sdim const std::unique_ptr<llvm::pdb::PDBSymbolFunc> &F2); 75319780Sdimbool compareDataSymbols(const std::unique_ptr<llvm::pdb::PDBSymbolData> &F1, 76319780Sdim const std::unique_ptr<llvm::pdb::PDBSymbolData> &F2); 77319780Sdim 78341825Sdimextern llvm::cl::list<std::string> WithName; 79341825Sdim 80319780Sdimextern llvm::cl::opt<bool> Compilands; 81319780Sdimextern llvm::cl::opt<bool> Symbols; 82319780Sdimextern llvm::cl::opt<bool> Globals; 83319780Sdimextern llvm::cl::opt<bool> Classes; 84319780Sdimextern llvm::cl::opt<bool> Enums; 85319780Sdimextern llvm::cl::opt<bool> Typedefs; 86319780Sdimextern llvm::cl::opt<bool> All; 87319780Sdimextern llvm::cl::opt<bool> ExcludeCompilerGenerated; 88319780Sdim 89319780Sdimextern llvm::cl::opt<bool> NoEnumDefs; 90319780Sdimextern llvm::cl::list<std::string> ExcludeTypes; 91319780Sdimextern llvm::cl::list<std::string> ExcludeSymbols; 92319780Sdimextern llvm::cl::list<std::string> ExcludeCompilands; 93319780Sdimextern llvm::cl::list<std::string> IncludeTypes; 94319780Sdimextern llvm::cl::list<std::string> IncludeSymbols; 95319780Sdimextern llvm::cl::list<std::string> IncludeCompilands; 96319780Sdimextern llvm::cl::opt<SymbolSortMode> SymbolOrder; 97319780Sdimextern llvm::cl::opt<ClassSortMode> ClassOrder; 98319780Sdimextern llvm::cl::opt<uint32_t> SizeThreshold; 99319780Sdimextern llvm::cl::opt<uint32_t> PaddingThreshold; 100319780Sdimextern llvm::cl::opt<uint32_t> ImmediatePaddingThreshold; 101319780Sdimextern llvm::cl::opt<ClassDefinitionFormat> ClassFormat; 102319780Sdimextern llvm::cl::opt<uint32_t> ClassRecursionDepth; 103319780Sdim} 104319780Sdim 105320397Sdimnamespace bytes { 106320397Sdimstruct NumberRange { 107320397Sdim uint64_t Min; 108320397Sdim llvm::Optional<uint64_t> Max; 109319780Sdim}; 110319780Sdim 111320397Sdimextern llvm::Optional<NumberRange> DumpBlockRange; 112320397Sdimextern llvm::Optional<NumberRange> DumpByteRange; 113320397Sdimextern llvm::cl::list<std::string> DumpStreamData; 114320397Sdimextern llvm::cl::opt<bool> NameMap; 115327952Sdimextern llvm::cl::opt<bool> Fpm; 116320397Sdim 117320397Sdimextern llvm::cl::opt<bool> SectionContributions; 118320397Sdimextern llvm::cl::opt<bool> SectionMap; 119320397Sdimextern llvm::cl::opt<bool> ModuleInfos; 120320397Sdimextern llvm::cl::opt<bool> FileInfo; 121320397Sdimextern llvm::cl::opt<bool> TypeServerMap; 122320397Sdimextern llvm::cl::opt<bool> ECData; 123320397Sdim 124320397Sdimextern llvm::cl::list<uint32_t> TypeIndex; 125320397Sdimextern llvm::cl::list<uint32_t> IdIndex; 126320397Sdim 127320397Sdimextern llvm::cl::opt<uint32_t> ModuleIndex; 128320397Sdimextern llvm::cl::opt<bool> ModuleSyms; 129320397Sdimextern llvm::cl::opt<bool> ModuleC11; 130320397Sdimextern llvm::cl::opt<bool> ModuleC13; 131320397Sdimextern llvm::cl::opt<bool> SplitChunks; 132320397Sdim} // namespace bytes 133320397Sdim 134320397Sdimnamespace dump { 135320397Sdim 136320041Sdimextern llvm::cl::opt<bool> DumpSummary; 137327952Sdimextern llvm::cl::opt<bool> DumpFpm; 138320041Sdimextern llvm::cl::opt<bool> DumpStreams; 139327952Sdimextern llvm::cl::opt<bool> DumpSymbolStats; 140327952Sdimextern llvm::cl::opt<bool> DumpUdtStats; 141320397Sdimextern llvm::cl::opt<bool> DumpStreamBlocks; 142319780Sdim 143320041Sdimextern llvm::cl::opt<bool> DumpLines; 144320041Sdimextern llvm::cl::opt<bool> DumpInlineeLines; 145320041Sdimextern llvm::cl::opt<bool> DumpXmi; 146320041Sdimextern llvm::cl::opt<bool> DumpXme; 147341825Sdimextern llvm::cl::opt<bool> DumpNamedStreams; 148320041Sdimextern llvm::cl::opt<bool> DumpStringTable; 149341825Sdimextern llvm::cl::opt<bool> DumpStringTableDetails; 150320041Sdimextern llvm::cl::opt<bool> DumpTypes; 151320041Sdimextern llvm::cl::opt<bool> DumpTypeData; 152320041Sdimextern llvm::cl::opt<bool> DumpTypeExtras; 153320397Sdimextern llvm::cl::list<uint32_t> DumpTypeIndex; 154320572Sdimextern llvm::cl::opt<bool> DumpTypeDependents; 155327952Sdimextern llvm::cl::opt<bool> DumpSectionHeaders; 156320397Sdim 157320041Sdimextern llvm::cl::opt<bool> DumpIds; 158320041Sdimextern llvm::cl::opt<bool> DumpIdData; 159320041Sdimextern llvm::cl::opt<bool> DumpIdExtras; 160320397Sdimextern llvm::cl::list<uint32_t> DumpIdIndex; 161327952Sdimextern llvm::cl::opt<uint32_t> DumpModi; 162327952Sdimextern llvm::cl::opt<bool> JustMyCode; 163320041Sdimextern llvm::cl::opt<bool> DumpSymbols; 164320041Sdimextern llvm::cl::opt<bool> DumpSymRecordBytes; 165341825Sdimextern llvm::cl::opt<bool> DumpGSIRecords; 166327952Sdimextern llvm::cl::opt<bool> DumpGlobals; 167327952Sdimextern llvm::cl::opt<bool> DumpGlobalExtras; 168319780Sdimextern llvm::cl::opt<bool> DumpPublics; 169327952Sdimextern llvm::cl::opt<bool> DumpPublicExtras; 170319780Sdimextern llvm::cl::opt<bool> DumpSectionContribs; 171319780Sdimextern llvm::cl::opt<bool> DumpSectionMap; 172320041Sdimextern llvm::cl::opt<bool> DumpModules; 173320041Sdimextern llvm::cl::opt<bool> DumpModuleFiles; 174320041Sdimextern llvm::cl::opt<bool> RawAll; 175319780Sdim} 176319780Sdim 177319780Sdimnamespace pdb2yaml { 178319780Sdimextern llvm::cl::opt<bool> All; 179319780Sdimextern llvm::cl::opt<bool> NoFileHeaders; 180319780Sdimextern llvm::cl::opt<bool> Minimal; 181319780Sdimextern llvm::cl::opt<bool> StreamMetadata; 182319780Sdimextern llvm::cl::opt<bool> StreamDirectory; 183319780Sdimextern llvm::cl::opt<bool> StringTable; 184319780Sdimextern llvm::cl::opt<bool> PdbStream; 185319780Sdimextern llvm::cl::opt<bool> DbiStream; 186319780Sdimextern llvm::cl::opt<bool> TpiStream; 187319780Sdimextern llvm::cl::opt<bool> IpiStream; 188319780Sdimextern llvm::cl::list<std::string> InputFilename; 189319780Sdimextern llvm::cl::opt<bool> DumpModules; 190319780Sdimextern llvm::cl::opt<bool> DumpModuleFiles; 191319780Sdimextern llvm::cl::list<ModuleSubsection> DumpModuleSubsections; 192319780Sdimextern llvm::cl::opt<bool> DumpModuleSyms; 193320041Sdim} // namespace pdb2yaml 194320970Sdim 195341825Sdimnamespace explain { 196341825Sdimenum class InputFileType { PDBFile, PDBStream, DBIStream, Names, ModuleStream }; 197341825Sdim 198341825Sdimextern llvm::cl::list<std::string> InputFilename; 199341825Sdimextern llvm::cl::list<uint64_t> Offsets; 200341825Sdimextern llvm::cl::opt<InputFileType> InputType; 201341825Sdim} // namespace explain 202341825Sdim 203341825Sdimnamespace exportstream { 204341825Sdimextern llvm::cl::opt<std::string> OutputFile; 205341825Sdimextern llvm::cl::opt<std::string> Stream; 206341825Sdimextern llvm::cl::opt<bool> ForceName; 207341825Sdim} // namespace exportstream 208319780Sdim} 209319780Sdim 210319780Sdim#endif 211