| //===- 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 <memory> | |
| #include <stdint.h> | |
| namespace llvm { | |
| namespace object { | |
| class COFFObjectFile; | |
| } | |
| namespace pdb { | |
| class PDBSymbolData; | |
| class PDBSymbolFunc; | |
| class PDBFile; | |
| uint32_t getTypeLength(const PDBSymbolData &Symbol); | |
| } | |
| typedef llvm::PointerUnion<object::COFFObjectFile *, pdb::PDBFile *> | |
| 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<llvm::pdb::PDBSymbolFunc> &F1, | |
| const std::unique_ptr<llvm::pdb::PDBSymbolFunc> &F2); | |
| bool compareDataSymbols(const std::unique_ptr<llvm::pdb::PDBSymbolData> &F1, | |
| const std::unique_ptr<llvm::pdb::PDBSymbolData> &F2); | |
| extern llvm::cl::list<std::string> WithName; | |
| extern llvm::cl::opt<bool> Compilands; | |
| extern llvm::cl::opt<bool> Symbols; | |
| extern llvm::cl::opt<bool> Globals; | |
| extern llvm::cl::opt<bool> Classes; | |
| extern llvm::cl::opt<bool> Enums; | |
| extern llvm::cl::opt<bool> Typedefs; | |
| extern llvm::cl::opt<bool> All; | |
| extern llvm::cl::opt<bool> ExcludeCompilerGenerated; | |
| extern llvm::cl::opt<bool> NoEnumDefs; | |
| extern llvm::cl::list<std::string> ExcludeTypes; | |
| extern llvm::cl::list<std::string> ExcludeSymbols; | |
| extern llvm::cl::list<std::string> ExcludeCompilands; | |
| extern llvm::cl::list<std::string> IncludeTypes; | |
| extern llvm::cl::list<std::string> IncludeSymbols; | |
| extern llvm::cl::list<std::string> IncludeCompilands; | |
| extern llvm::cl::opt<SymbolSortMode> SymbolOrder; | |
| extern llvm::cl::opt<ClassSortMode> ClassOrder; | |
| extern llvm::cl::opt<uint32_t> SizeThreshold; | |
| extern llvm::cl::opt<uint32_t> PaddingThreshold; | |
| extern llvm::cl::opt<uint32_t> ImmediatePaddingThreshold; | |
| extern llvm::cl::opt<ClassDefinitionFormat> ClassFormat; | |
| extern llvm::cl::opt<uint32_t> ClassRecursionDepth; | |
| } | |
| namespace bytes { | |
| struct NumberRange { | |
| uint64_t Min; | |
| llvm::Optional<uint64_t> Max; | |
| }; | |
| extern llvm::Optional<NumberRange> DumpBlockRange; | |
| extern llvm::Optional<NumberRange> DumpByteRange; | |
| extern llvm::cl::list<std::string> DumpStreamData; | |
| extern llvm::cl::opt<bool> NameMap; | |
| extern llvm::cl::opt<bool> Fpm; | |
| extern llvm::cl::opt<bool> SectionContributions; | |
| extern llvm::cl::opt<bool> SectionMap; | |
| extern llvm::cl::opt<bool> ModuleInfos; | |
| extern llvm::cl::opt<bool> FileInfo; | |
| extern llvm::cl::opt<bool> TypeServerMap; | |
| extern llvm::cl::opt<bool> ECData; | |
| extern llvm::cl::list<uint32_t> TypeIndex; | |
| extern llvm::cl::list<uint32_t> IdIndex; | |
| extern llvm::cl::opt<uint32_t> ModuleIndex; | |
| extern llvm::cl::opt<bool> ModuleSyms; | |
| extern llvm::cl::opt<bool> ModuleC11; | |
| extern llvm::cl::opt<bool> ModuleC13; | |
| extern llvm::cl::opt<bool> SplitChunks; | |
| } // namespace bytes | |
| namespace dump { | |
| extern llvm::cl::opt<bool> DumpSummary; | |
| extern llvm::cl::opt<bool> DumpFpm; | |
| extern llvm::cl::opt<bool> DumpStreams; | |
| extern llvm::cl::opt<bool> DumpSymbolStats; | |
| extern llvm::cl::opt<bool> DumpUdtStats; | |
| extern llvm::cl::opt<bool> DumpStreamBlocks; | |
| extern llvm::cl::opt<bool> DumpLines; | |
| extern llvm::cl::opt<bool> DumpInlineeLines; | |
| extern llvm::cl::opt<bool> DumpXmi; | |
| extern llvm::cl::opt<bool> DumpXme; | |
| extern llvm::cl::opt<bool> DumpNamedStreams; | |
| extern llvm::cl::opt<bool> DumpStringTable; | |
| extern llvm::cl::opt<bool> DumpStringTableDetails; | |
| extern llvm::cl::opt<bool> DumpTypes; | |
| extern llvm::cl::opt<bool> DumpTypeData; | |
| extern llvm::cl::opt<bool> DumpTypeExtras; | |
| extern llvm::cl::list<uint32_t> DumpTypeIndex; | |
| extern llvm::cl::opt<bool> DumpTypeDependents; | |
| extern llvm::cl::opt<bool> DumpSectionHeaders; | |
| extern llvm::cl::opt<bool> DumpIds; | |
| extern llvm::cl::opt<bool> DumpIdData; | |
| extern llvm::cl::opt<bool> DumpIdExtras; | |
| extern llvm::cl::list<uint32_t> DumpIdIndex; | |
| extern llvm::cl::opt<uint32_t> DumpModi; | |
| extern llvm::cl::opt<bool> JustMyCode; | |
| extern llvm::cl::opt<bool> DumpSymbols; | |
| extern llvm::cl::opt<bool> DumpSymRecordBytes; | |
| extern llvm::cl::opt<bool> DumpGSIRecords; | |
| extern llvm::cl::opt<bool> DumpGlobals; | |
| extern llvm::cl::opt<bool> DumpGlobalExtras; | |
| extern llvm::cl::opt<bool> DumpPublics; | |
| extern llvm::cl::opt<bool> DumpPublicExtras; | |
| extern llvm::cl::opt<bool> DumpSectionContribs; | |
| extern llvm::cl::opt<bool> DumpSectionMap; | |
| extern llvm::cl::opt<bool> DumpModules; | |
| extern llvm::cl::opt<bool> DumpModuleFiles; | |
| extern llvm::cl::opt<bool> RawAll; | |
| } | |
| namespace pdb2yaml { | |
| extern llvm::cl::opt<bool> All; | |
| extern llvm::cl::opt<bool> NoFileHeaders; | |
| extern llvm::cl::opt<bool> Minimal; | |
| extern llvm::cl::opt<bool> StreamMetadata; | |
| extern llvm::cl::opt<bool> StreamDirectory; | |
| extern llvm::cl::opt<bool> StringTable; | |
| extern llvm::cl::opt<bool> PdbStream; | |
| extern llvm::cl::opt<bool> DbiStream; | |
| extern llvm::cl::opt<bool> TpiStream; | |
| extern llvm::cl::opt<bool> IpiStream; | |
| extern llvm::cl::list<std::string> InputFilename; | |
| extern llvm::cl::opt<bool> DumpModules; | |
| extern llvm::cl::opt<bool> DumpModuleFiles; | |
| extern llvm::cl::list<ModuleSubsection> DumpModuleSubsections; | |
| extern llvm::cl::opt<bool> DumpModuleSyms; | |
| } // namespace pdb2yaml | |
| namespace explain { | |
| enum class InputFileType { PDBFile, PDBStream, DBIStream, Names, ModuleStream }; | |
| extern llvm::cl::list<std::string> InputFilename; | |
| extern llvm::cl::list<uint64_t> Offsets; | |
| extern llvm::cl::opt<InputFileType> InputType; | |
| } // namespace explain | |
| namespace exportstream { | |
| extern llvm::cl::opt<std::string> OutputFile; | |
| extern llvm::cl::opt<std::string> Stream; | |
| extern llvm::cl::opt<bool> ForceName; | |
| } // namespace exportstream | |
| } | |
| #endif |