//===- llvm-pdbutil.h ----------------------------------------- *- C++ --*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLVM_TOOLS_LLVMPDBDUMP_LLVMPDBDUMP_H #define LLVM_TOOLS_LLVMPDBDUMP_LLVMPDBDUMP_H #include "llvm/ADT/PointerUnion.h" #include "llvm/DebugInfo/PDB/Native/LinePrinter.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 }; extern FilterOptions Filters; 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::list WithName; 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 Funcsigs; extern llvm::cl::opt Arrays; extern llvm::cl::opt Typedefs; extern llvm::cl::opt Pointers; extern llvm::cl::opt VTShapes; 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; std::optional Max; }; extern std::optional DumpBlockRange; extern std::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 DumpTypeStats; extern llvm::cl::opt DumpIDStats; 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 DumpNamedStreams; extern llvm::cl::opt DumpStringTable; extern llvm::cl::opt DumpStringTableDetails; 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 DumpTypeRefStats; 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 DontResolveForwardRefs; extern llvm::cl::opt DumpSymbols; extern llvm::cl::opt DumpSymRecordBytes; extern llvm::cl::opt DumpGSIRecords; extern llvm::cl::opt DumpGlobals; extern llvm::cl::list DumpGlobalNames; 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 DumpFpo; 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::opt PublicsStream; 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 explain { enum class InputFileType { PDBFile, PDBStream, DBIStream, Names, ModuleStream }; extern llvm::cl::list InputFilename; extern llvm::cl::list Offsets; extern llvm::cl::opt InputType; } // namespace explain namespace exportstream { extern llvm::cl::opt OutputFile; extern llvm::cl::opt Stream; extern llvm::cl::opt ForceName; } // namespace exportstream } #endif