| //===- 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 |