//===- llvm-pdbutil.h ----------------------------------------- *- C++ --*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef LLVM_TOOLS_LLVMPDBDUMP_LLVMPDBDUMP_H #define LLVM_TOOLS_LLVMPDBDUMP_LLVMPDBDUMP_H #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/Optional.h" #include "llvm/ADT/PointerUnion.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/raw_ostream.h" #include #include namespace llvm { namespace object { class COFFObjectFile; } namespace pdb { class PDBSymbolData; class PDBSymbolFunc; class PDBFile; uint32_t getTypeLength(const PDBSymbolData &Symbol); } typedef llvm::PointerUnion PdbOrCoffObj; } namespace opts { enum class DumpLevel { None, Basic, Verbose }; enum class ModuleSubsection { Unknown, Lines, FileChecksums, InlineeLines, CrossScopeImports, CrossScopeExports, StringTable, Symbols, FrameData, CoffSymbolRVAs, All }; namespace pretty { enum class ClassDefinitionFormat { None, Layout, All }; enum class ClassSortMode { None, Name, Size, Padding, PaddingPct, PaddingImmediate, PaddingPctImmediate }; enum class SymbolSortMode { None, Name, Size }; enum class SymLevel { Functions, Data, Thunks, All }; bool shouldDumpSymLevel(SymLevel Level); bool compareFunctionSymbols( const std::unique_ptr &F1, const std::unique_ptr &F2); bool compareDataSymbols(const std::unique_ptr &F1, const std::unique_ptr &F2); extern llvm::cl::opt Compilands; extern llvm::cl::opt Symbols; extern llvm::cl::opt Globals; extern llvm::cl::opt Classes; extern llvm::cl::opt Enums; extern llvm::cl::opt Typedefs; extern llvm::cl::opt All; extern llvm::cl::opt ExcludeCompilerGenerated; extern llvm::cl::opt NoEnumDefs; extern llvm::cl::list ExcludeTypes; extern llvm::cl::list ExcludeSymbols; extern llvm::cl::list ExcludeCompilands; extern llvm::cl::list IncludeTypes; extern llvm::cl::list IncludeSymbols; extern llvm::cl::list IncludeCompilands; extern llvm::cl::opt SymbolOrder; extern llvm::cl::opt ClassOrder; extern llvm::cl::opt SizeThreshold; extern llvm::cl::opt PaddingThreshold; extern llvm::cl::opt ImmediatePaddingThreshold; extern llvm::cl::opt ClassFormat; extern llvm::cl::opt ClassRecursionDepth; } namespace bytes { struct NumberRange { uint64_t Min; llvm::Optional Max; }; extern llvm::Optional DumpBlockRange; extern llvm::Optional DumpByteRange; extern llvm::cl::list DumpStreamData; extern llvm::cl::opt NameMap; extern llvm::cl::opt Fpm; extern llvm::cl::opt SectionContributions; extern llvm::cl::opt SectionMap; extern llvm::cl::opt ModuleInfos; extern llvm::cl::opt FileInfo; extern llvm::cl::opt TypeServerMap; extern llvm::cl::opt ECData; extern llvm::cl::list TypeIndex; extern llvm::cl::list IdIndex; extern llvm::cl::opt ModuleIndex; extern llvm::cl::opt ModuleSyms; extern llvm::cl::opt ModuleC11; extern llvm::cl::opt ModuleC13; extern llvm::cl::opt SplitChunks; } // namespace bytes namespace dump { extern llvm::cl::opt DumpSummary; extern llvm::cl::opt DumpFpm; extern llvm::cl::opt DumpStreams; extern llvm::cl::opt DumpSymbolStats; extern llvm::cl::opt DumpUdtStats; extern llvm::cl::opt DumpStreamBlocks; extern llvm::cl::opt DumpLines; extern llvm::cl::opt DumpInlineeLines; extern llvm::cl::opt DumpXmi; extern llvm::cl::opt DumpXme; extern llvm::cl::opt DumpStringTable; extern llvm::cl::opt DumpTypes; extern llvm::cl::opt DumpTypeData; extern llvm::cl::opt DumpTypeExtras; extern llvm::cl::list DumpTypeIndex; extern llvm::cl::opt DumpTypeDependents; extern llvm::cl::opt DumpSectionHeaders; extern llvm::cl::opt DumpIds; extern llvm::cl::opt DumpIdData; extern llvm::cl::opt DumpIdExtras; extern llvm::cl::list DumpIdIndex; extern llvm::cl::opt DumpModi; extern llvm::cl::opt JustMyCode; extern llvm::cl::opt DumpSymbols; extern llvm::cl::opt DumpSymRecordBytes; extern llvm::cl::opt DumpGlobals; extern llvm::cl::opt DumpGlobalExtras; extern llvm::cl::opt DumpPublics; extern llvm::cl::opt DumpPublicExtras; extern llvm::cl::opt DumpSectionContribs; extern llvm::cl::opt DumpSectionMap; extern llvm::cl::opt DumpModules; extern llvm::cl::opt DumpModuleFiles; extern llvm::cl::opt RawAll; } namespace pdb2yaml { extern llvm::cl::opt All; extern llvm::cl::opt NoFileHeaders; extern llvm::cl::opt Minimal; extern llvm::cl::opt StreamMetadata; extern llvm::cl::opt StreamDirectory; extern llvm::cl::opt StringTable; extern llvm::cl::opt PdbStream; extern llvm::cl::opt DbiStream; extern llvm::cl::opt TpiStream; extern llvm::cl::opt IpiStream; extern llvm::cl::list InputFilename; extern llvm::cl::opt DumpModules; extern llvm::cl::opt DumpModuleFiles; extern llvm::cl::list DumpModuleSubsections; extern llvm::cl::opt DumpModuleSyms; } // namespace pdb2yaml namespace diff { extern llvm::cl::opt PrintValueColumns; extern llvm::cl::opt PrintResultColumn; extern llvm::DenseMap Equivalences; extern llvm::cl::opt LeftRoot; extern llvm::cl::opt RightRoot; } // namespace diff } #endif