Path: blob/main/contrib/llvm-project/llvm/tools/llvm-pdbutil/llvm-pdbutil.h
35260 views
//===- llvm-pdbutil.h ----------------------------------------- *- C++ --*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#ifndef LLVM_TOOLS_LLVMPDBDUMP_LLVMPDBDUMP_H9#define LLVM_TOOLS_LLVMPDBDUMP_LLVMPDBDUMP_H1011#include "llvm/ADT/PointerUnion.h"12#include "llvm/DebugInfo/PDB/Native/LinePrinter.h"13#include "llvm/Support/CommandLine.h"14#include "llvm/Support/raw_ostream.h"1516#include <memory>17#include <stdint.h>1819namespace llvm {20namespace object {21class COFFObjectFile;22}23namespace pdb {24class PDBSymbolData;25class PDBSymbolFunc;26class PDBFile;27uint32_t getTypeLength(const PDBSymbolData &Symbol);28}29typedef llvm::PointerUnion<object::COFFObjectFile *, pdb::PDBFile *>30PdbOrCoffObj;31}3233namespace opts {3435enum class DumpLevel { None, Basic, Verbose };3637enum class ModuleSubsection {38Unknown,39Lines,40FileChecksums,41InlineeLines,42CrossScopeImports,43CrossScopeExports,44StringTable,45Symbols,46FrameData,47CoffSymbolRVAs,48All49};5051extern FilterOptions Filters;5253namespace pretty {5455enum class ClassDefinitionFormat { None, Layout, All };56enum class ClassSortMode {57None,58Name,59Size,60Padding,61PaddingPct,62PaddingImmediate,63PaddingPctImmediate64};6566enum class SymbolSortMode { None, Name, Size };6768enum class SymLevel { Functions, Data, Thunks, All };6970bool shouldDumpSymLevel(SymLevel Level);71bool compareFunctionSymbols(72const std::unique_ptr<llvm::pdb::PDBSymbolFunc> &F1,73const std::unique_ptr<llvm::pdb::PDBSymbolFunc> &F2);74bool compareDataSymbols(const std::unique_ptr<llvm::pdb::PDBSymbolData> &F1,75const std::unique_ptr<llvm::pdb::PDBSymbolData> &F2);7677extern llvm::cl::list<std::string> WithName;7879extern llvm::cl::opt<bool> Compilands;80extern llvm::cl::opt<bool> Symbols;81extern llvm::cl::opt<bool> Globals;82extern llvm::cl::opt<bool> Classes;83extern llvm::cl::opt<bool> Enums;84extern llvm::cl::opt<bool> Funcsigs;85extern llvm::cl::opt<bool> Arrays;86extern llvm::cl::opt<bool> Typedefs;87extern llvm::cl::opt<bool> Pointers;88extern llvm::cl::opt<bool> VTShapes;89extern llvm::cl::opt<bool> All;90extern llvm::cl::opt<bool> ExcludeCompilerGenerated;9192extern llvm::cl::opt<bool> NoEnumDefs;93extern llvm::cl::list<std::string> ExcludeTypes;94extern llvm::cl::list<std::string> ExcludeSymbols;95extern llvm::cl::list<std::string> ExcludeCompilands;96extern llvm::cl::list<std::string> IncludeTypes;97extern llvm::cl::list<std::string> IncludeSymbols;98extern llvm::cl::list<std::string> IncludeCompilands;99extern llvm::cl::opt<SymbolSortMode> SymbolOrder;100extern llvm::cl::opt<ClassSortMode> ClassOrder;101extern llvm::cl::opt<uint32_t> SizeThreshold;102extern llvm::cl::opt<uint32_t> PaddingThreshold;103extern llvm::cl::opt<uint32_t> ImmediatePaddingThreshold;104extern llvm::cl::opt<ClassDefinitionFormat> ClassFormat;105extern llvm::cl::opt<uint32_t> ClassRecursionDepth;106}107108namespace bytes {109struct NumberRange {110uint64_t Min;111std::optional<uint64_t> Max;112};113114extern std::optional<NumberRange> DumpBlockRange;115extern std::optional<NumberRange> DumpByteRange;116extern llvm::cl::list<std::string> DumpStreamData;117extern llvm::cl::opt<bool> NameMap;118extern llvm::cl::opt<bool> Fpm;119120extern llvm::cl::opt<bool> SectionContributions;121extern llvm::cl::opt<bool> SectionMap;122extern llvm::cl::opt<bool> ModuleInfos;123extern llvm::cl::opt<bool> FileInfo;124extern llvm::cl::opt<bool> TypeServerMap;125extern llvm::cl::opt<bool> ECData;126127extern llvm::cl::list<uint32_t> TypeIndex;128extern llvm::cl::list<uint32_t> IdIndex;129130extern llvm::cl::opt<uint32_t> ModuleIndex;131extern llvm::cl::opt<bool> ModuleSyms;132extern llvm::cl::opt<bool> ModuleC11;133extern llvm::cl::opt<bool> ModuleC13;134extern llvm::cl::opt<bool> SplitChunks;135} // namespace bytes136137namespace dump {138139extern llvm::cl::opt<bool> DumpSummary;140extern llvm::cl::opt<bool> DumpFpm;141extern llvm::cl::opt<bool> DumpStreams;142extern llvm::cl::opt<bool> DumpSymbolStats;143extern llvm::cl::opt<bool> DumpTypeStats;144extern llvm::cl::opt<bool> DumpIDStats;145extern llvm::cl::opt<bool> DumpUdtStats;146extern llvm::cl::opt<bool> DumpStreamBlocks;147148extern llvm::cl::opt<bool> DumpLines;149extern llvm::cl::opt<bool> DumpInlineeLines;150extern llvm::cl::opt<bool> DumpXmi;151extern llvm::cl::opt<bool> DumpXme;152extern llvm::cl::opt<bool> DumpNamedStreams;153extern llvm::cl::opt<bool> DumpStringTable;154extern llvm::cl::opt<bool> DumpStringTableDetails;155extern llvm::cl::opt<bool> DumpTypes;156extern llvm::cl::opt<bool> DumpTypeData;157extern llvm::cl::opt<bool> DumpTypeExtras;158extern llvm::cl::list<uint32_t> DumpTypeIndex;159extern llvm::cl::opt<bool> DumpTypeDependents;160extern llvm::cl::opt<bool> DumpTypeRefStats;161extern llvm::cl::opt<bool> DumpSectionHeaders;162163extern llvm::cl::opt<bool> DumpIds;164extern llvm::cl::opt<bool> DumpIdData;165extern llvm::cl::opt<bool> DumpIdExtras;166extern llvm::cl::list<uint32_t> DumpIdIndex;167extern llvm::cl::opt<uint32_t> DumpModi;168extern llvm::cl::opt<bool> JustMyCode;169extern llvm::cl::opt<bool> DontResolveForwardRefs;170extern llvm::cl::opt<bool> DumpSymbols;171extern llvm::cl::opt<bool> DumpSymRecordBytes;172extern llvm::cl::opt<bool> DumpGSIRecords;173extern llvm::cl::opt<bool> DumpGlobals;174extern llvm::cl::list<std::string> DumpGlobalNames;175extern llvm::cl::opt<bool> DumpGlobalExtras;176extern llvm::cl::opt<bool> DumpPublics;177extern llvm::cl::opt<bool> DumpPublicExtras;178extern llvm::cl::opt<bool> DumpSectionContribs;179extern llvm::cl::opt<bool> DumpSectionMap;180extern llvm::cl::opt<bool> DumpModules;181extern llvm::cl::opt<bool> DumpModuleFiles;182extern llvm::cl::opt<bool> DumpFpo;183extern llvm::cl::opt<bool> RawAll;184}185186namespace pdb2yaml {187extern llvm::cl::opt<bool> All;188extern llvm::cl::opt<bool> NoFileHeaders;189extern llvm::cl::opt<bool> Minimal;190extern llvm::cl::opt<bool> StreamMetadata;191extern llvm::cl::opt<bool> StreamDirectory;192extern llvm::cl::opt<bool> StringTable;193extern llvm::cl::opt<bool> PdbStream;194extern llvm::cl::opt<bool> DbiStream;195extern llvm::cl::opt<bool> TpiStream;196extern llvm::cl::opt<bool> IpiStream;197extern llvm::cl::opt<bool> PublicsStream;198extern llvm::cl::list<std::string> InputFilename;199extern llvm::cl::opt<bool> DumpModules;200extern llvm::cl::opt<bool> DumpModuleFiles;201extern llvm::cl::list<ModuleSubsection> DumpModuleSubsections;202extern llvm::cl::opt<bool> DumpModuleSyms;203} // namespace pdb2yaml204205namespace explain {206enum class InputFileType { PDBFile, PDBStream, DBIStream, Names, ModuleStream };207208extern llvm::cl::list<std::string> InputFilename;209extern llvm::cl::list<uint64_t> Offsets;210extern llvm::cl::opt<InputFileType> InputType;211} // namespace explain212213namespace exportstream {214extern llvm::cl::opt<std::string> OutputFile;215extern llvm::cl::opt<std::string> Stream;216extern llvm::cl::opt<bool> ForceName;217} // namespace exportstream218}219220#endif221222223