llvm-pdbutil.h revision 320397
1//===- llvm-pdbutil.h ----------------------------------------- *- C++ --*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#ifndef LLVM_TOOLS_LLVMPDBDUMP_LLVMPDBDUMP_H 11#define LLVM_TOOLS_LLVMPDBDUMP_LLVMPDBDUMP_H 12 13#include "llvm/ADT/Optional.h" 14#include "llvm/Support/CommandLine.h" 15#include "llvm/Support/raw_ostream.h" 16 17#include <memory> 18#include <stdint.h> 19 20namespace llvm { 21namespace pdb { 22class PDBSymbolData; 23class PDBSymbolFunc; 24uint32_t getTypeLength(const PDBSymbolData &Symbol); 25} 26} 27 28namespace opts { 29 30enum class DumpLevel { None, Basic, Verbose }; 31 32enum class ModuleSubsection { 33 Unknown, 34 Lines, 35 FileChecksums, 36 InlineeLines, 37 CrossScopeImports, 38 CrossScopeExports, 39 StringTable, 40 Symbols, 41 FrameData, 42 CoffSymbolRVAs, 43 All 44}; 45 46namespace pretty { 47 48enum class ClassDefinitionFormat { None, Layout, All }; 49enum class ClassSortMode { 50 None, 51 Name, 52 Size, 53 Padding, 54 PaddingPct, 55 PaddingImmediate, 56 PaddingPctImmediate 57}; 58 59enum class SymbolSortMode { None, Name, Size }; 60 61enum class SymLevel { Functions, Data, Thunks, All }; 62 63bool shouldDumpSymLevel(SymLevel Level); 64bool compareFunctionSymbols( 65 const std::unique_ptr<llvm::pdb::PDBSymbolFunc> &F1, 66 const std::unique_ptr<llvm::pdb::PDBSymbolFunc> &F2); 67bool compareDataSymbols(const std::unique_ptr<llvm::pdb::PDBSymbolData> &F1, 68 const std::unique_ptr<llvm::pdb::PDBSymbolData> &F2); 69 70extern llvm::cl::opt<bool> Compilands; 71extern llvm::cl::opt<bool> Symbols; 72extern llvm::cl::opt<bool> Globals; 73extern llvm::cl::opt<bool> Classes; 74extern llvm::cl::opt<bool> Enums; 75extern llvm::cl::opt<bool> Typedefs; 76extern llvm::cl::opt<bool> All; 77extern llvm::cl::opt<bool> ExcludeCompilerGenerated; 78 79extern llvm::cl::opt<bool> NoEnumDefs; 80extern llvm::cl::list<std::string> ExcludeTypes; 81extern llvm::cl::list<std::string> ExcludeSymbols; 82extern llvm::cl::list<std::string> ExcludeCompilands; 83extern llvm::cl::list<std::string> IncludeTypes; 84extern llvm::cl::list<std::string> IncludeSymbols; 85extern llvm::cl::list<std::string> IncludeCompilands; 86extern llvm::cl::opt<SymbolSortMode> SymbolOrder; 87extern llvm::cl::opt<ClassSortMode> ClassOrder; 88extern llvm::cl::opt<uint32_t> SizeThreshold; 89extern llvm::cl::opt<uint32_t> PaddingThreshold; 90extern llvm::cl::opt<uint32_t> ImmediatePaddingThreshold; 91extern llvm::cl::opt<ClassDefinitionFormat> ClassFormat; 92extern llvm::cl::opt<uint32_t> ClassRecursionDepth; 93} 94 95namespace bytes { 96struct NumberRange { 97 uint64_t Min; 98 llvm::Optional<uint64_t> Max; 99}; 100 101extern llvm::Optional<NumberRange> DumpBlockRange; 102extern llvm::Optional<NumberRange> DumpByteRange; 103extern llvm::cl::list<std::string> DumpStreamData; 104extern llvm::cl::opt<bool> NameMap; 105 106extern llvm::cl::opt<bool> SectionContributions; 107extern llvm::cl::opt<bool> SectionMap; 108extern llvm::cl::opt<bool> ModuleInfos; 109extern llvm::cl::opt<bool> FileInfo; 110extern llvm::cl::opt<bool> TypeServerMap; 111extern llvm::cl::opt<bool> ECData; 112 113extern llvm::cl::list<uint32_t> TypeIndex; 114extern llvm::cl::list<uint32_t> IdIndex; 115 116extern llvm::cl::opt<uint32_t> ModuleIndex; 117extern llvm::cl::opt<bool> ModuleSyms; 118extern llvm::cl::opt<bool> ModuleC11; 119extern llvm::cl::opt<bool> ModuleC13; 120extern llvm::cl::opt<bool> SplitChunks; 121} // namespace bytes 122 123namespace dump { 124 125extern llvm::cl::opt<bool> DumpSummary; 126extern llvm::cl::opt<bool> DumpStreams; 127extern llvm::cl::opt<bool> DumpStreamBlocks; 128 129extern llvm::cl::opt<bool> DumpLines; 130extern llvm::cl::opt<bool> DumpInlineeLines; 131extern llvm::cl::opt<bool> DumpXmi; 132extern llvm::cl::opt<bool> DumpXme; 133extern llvm::cl::opt<bool> DumpStringTable; 134extern llvm::cl::opt<bool> DumpTypes; 135extern llvm::cl::opt<bool> DumpTypeData; 136extern llvm::cl::opt<bool> DumpTypeExtras; 137extern llvm::cl::list<uint32_t> DumpTypeIndex; 138 139extern llvm::cl::opt<bool> DumpIds; 140extern llvm::cl::opt<bool> DumpIdData; 141extern llvm::cl::opt<bool> DumpIdExtras; 142extern llvm::cl::list<uint32_t> DumpIdIndex; 143extern llvm::cl::opt<bool> DumpSymbols; 144extern llvm::cl::opt<bool> DumpSymRecordBytes; 145extern llvm::cl::opt<bool> DumpPublics; 146extern llvm::cl::opt<bool> DumpSectionContribs; 147extern llvm::cl::opt<bool> DumpSectionMap; 148extern llvm::cl::opt<bool> DumpModules; 149extern llvm::cl::opt<bool> DumpModuleFiles; 150extern llvm::cl::opt<bool> RawAll; 151} 152 153namespace pdb2yaml { 154extern llvm::cl::opt<bool> All; 155extern llvm::cl::opt<bool> NoFileHeaders; 156extern llvm::cl::opt<bool> Minimal; 157extern llvm::cl::opt<bool> StreamMetadata; 158extern llvm::cl::opt<bool> StreamDirectory; 159extern llvm::cl::opt<bool> StringTable; 160extern llvm::cl::opt<bool> PdbStream; 161extern llvm::cl::opt<bool> DbiStream; 162extern llvm::cl::opt<bool> TpiStream; 163extern llvm::cl::opt<bool> IpiStream; 164extern llvm::cl::list<std::string> InputFilename; 165extern llvm::cl::opt<bool> DumpModules; 166extern llvm::cl::opt<bool> DumpModuleFiles; 167extern llvm::cl::list<ModuleSubsection> DumpModuleSubsections; 168extern llvm::cl::opt<bool> DumpModuleSyms; 169} // namespace pdb2yaml 170} 171 172#endif 173