diff options
Diffstat (limited to 'tools/llvm-pdbutil/llvm-pdbutil.h')
-rw-r--r-- | tools/llvm-pdbutil/llvm-pdbutil.h | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/tools/llvm-pdbutil/llvm-pdbutil.h b/tools/llvm-pdbutil/llvm-pdbutil.h new file mode 100644 index 0000000000000..f1699d0bb5575 --- /dev/null +++ b/tools/llvm-pdbutil/llvm-pdbutil.h @@ -0,0 +1,157 @@ +//===- 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/Optional.h" +#include "llvm/Support/CommandLine.h" +#include "llvm/Support/raw_ostream.h" + +#include <memory> +#include <stdint.h> + +namespace llvm { +namespace pdb { +class PDBSymbolData; +class PDBSymbolFunc; +uint32_t getTypeLength(const PDBSymbolData &Symbol); +} +} + +namespace opts { + +enum class ModuleSubsection { + Unknown, + Lines, + FileChecksums, + InlineeLines, + CrossScopeImports, + CrossScopeExports, + StringTable, + Symbols, + FrameData, + CoffSymbolRVAs, + All +}; + +bool checkModuleSubsection(ModuleSubsection Kind); + +template <typename... Ts> +bool checkModuleSubsection(ModuleSubsection K1, ModuleSubsection K2, + Ts &&... Rest) { + return checkModuleSubsection(K1) || + checkModuleSubsection(K2, std::forward<Ts>(Rest)...); +} + +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::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 raw { +struct BlockRange { + uint32_t Min; + llvm::Optional<uint32_t> Max; +}; + +extern llvm::Optional<BlockRange> DumpBlockRange; +extern llvm::cl::list<std::string> DumpStreamData; + +extern llvm::cl::opt<bool> CompactRecords; +extern llvm::cl::opt<bool> DumpGlobals; +extern llvm::cl::opt<bool> DumpHeaders; +extern llvm::cl::opt<bool> DumpStreamBlocks; +extern llvm::cl::opt<bool> DumpStreamSummary; +extern llvm::cl::opt<bool> DumpPageStats; +extern llvm::cl::opt<bool> DumpTpiHash; +extern llvm::cl::opt<bool> DumpTpiRecordBytes; +extern llvm::cl::opt<bool> DumpTpiRecords; +extern llvm::cl::opt<bool> DumpIpiRecords; +extern llvm::cl::opt<bool> DumpIpiRecordBytes; +extern llvm::cl::opt<bool> DumpPublics; +extern llvm::cl::opt<bool> DumpSectionContribs; +extern llvm::cl::opt<bool> DumpSectionMap; +extern llvm::cl::opt<bool> DumpSymRecordBytes; +extern llvm::cl::opt<bool> DumpSectionHeaders; +extern llvm::cl::opt<bool> DumpFpo; +extern llvm::cl::opt<bool> DumpStringTable; +} + +namespace diff { +extern llvm::cl::opt<bool> Pedantic; +} + +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; +} + +namespace shared { +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 shared +} + +#endif |