brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.8 KiB · 73ff2fe Raw
223 lines · c
1//===- llvm-pdbutil.h ----------------------------------------- *- C++ --*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_TOOLS_LLVMPDBDUMP_LLVMPDBDUMP_H10#define LLVM_TOOLS_LLVMPDBDUMP_LLVMPDBDUMP_H11 12#include "llvm/ADT/PointerUnion.h"13#include "llvm/DebugInfo/PDB/Native/LinePrinter.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 object {22class COFFObjectFile;23}24namespace pdb {25class PDBSymbolData;26class PDBSymbolFunc;27class PDBFile;28uint32_t getTypeLength(const PDBSymbolData &Symbol);29}30typedef llvm::PointerUnion<object::COFFObjectFile *, pdb::PDBFile *>31    PdbOrCoffObj;32}33 34namespace opts {35 36enum class DumpLevel { None, Basic, Verbose };37 38enum class ModuleSubsection {39  Unknown,40  Lines,41  FileChecksums,42  InlineeLines,43  CrossScopeImports,44  CrossScopeExports,45  StringTable,46  Symbols,47  FrameData,48  CoffSymbolRVAs,49  All50};51 52extern FilterOptions Filters;53 54namespace pretty {55 56enum class ClassDefinitionFormat { None, Layout, All };57enum class ClassSortMode {58  None,59  Name,60  Size,61  Padding,62  PaddingPct,63  PaddingImmediate,64  PaddingPctImmediate65};66 67enum class SymbolSortMode { None, Name, Size };68 69enum class SymLevel { Functions, Data, Thunks, All };70 71bool shouldDumpSymLevel(SymLevel Level);72bool compareFunctionSymbols(73    const std::unique_ptr<llvm::pdb::PDBSymbolFunc> &F1,74    const std::unique_ptr<llvm::pdb::PDBSymbolFunc> &F2);75bool compareDataSymbols(const std::unique_ptr<llvm::pdb::PDBSymbolData> &F1,76                        const std::unique_ptr<llvm::pdb::PDBSymbolData> &F2);77 78extern llvm::cl::list<std::string> WithName;79 80extern llvm::cl::opt<bool> Compilands;81extern llvm::cl::opt<bool> Symbols;82extern llvm::cl::opt<bool> Globals;83extern llvm::cl::opt<bool> Classes;84extern llvm::cl::opt<bool> Enums;85extern llvm::cl::opt<bool> Funcsigs;86extern llvm::cl::opt<bool> Arrays;87extern llvm::cl::opt<bool> Typedefs;88extern llvm::cl::opt<bool> Pointers;89extern llvm::cl::opt<bool> VTShapes;90extern llvm::cl::opt<bool> All;91extern llvm::cl::opt<bool> ExcludeCompilerGenerated;92 93extern llvm::cl::opt<bool> NoEnumDefs;94extern llvm::cl::list<std::string> ExcludeTypes;95extern llvm::cl::list<std::string> ExcludeSymbols;96extern llvm::cl::list<std::string> ExcludeCompilands;97extern llvm::cl::list<std::string> IncludeTypes;98extern llvm::cl::list<std::string> IncludeSymbols;99extern llvm::cl::list<std::string> IncludeCompilands;100extern llvm::cl::opt<SymbolSortMode> SymbolOrder;101extern llvm::cl::opt<ClassSortMode> ClassOrder;102extern llvm::cl::opt<uint32_t> SizeThreshold;103extern llvm::cl::opt<uint32_t> PaddingThreshold;104extern llvm::cl::opt<uint32_t> ImmediatePaddingThreshold;105extern llvm::cl::opt<ClassDefinitionFormat> ClassFormat;106extern llvm::cl::opt<uint32_t> ClassRecursionDepth;107}108 109namespace bytes {110struct NumberRange {111  uint64_t Min;112  std::optional<uint64_t> Max;113};114 115extern std::optional<NumberRange> DumpBlockRange;116extern std::optional<NumberRange> DumpByteRange;117extern llvm::cl::list<std::string> DumpStreamData;118extern llvm::cl::opt<bool> NameMap;119extern llvm::cl::opt<bool> Fpm;120 121extern llvm::cl::opt<bool> SectionContributions;122extern llvm::cl::opt<bool> SectionMap;123extern llvm::cl::opt<bool> ModuleInfos;124extern llvm::cl::opt<bool> FileInfo;125extern llvm::cl::opt<bool> TypeServerMap;126extern llvm::cl::opt<bool> ECData;127 128extern llvm::cl::list<uint32_t> TypeIndex;129extern llvm::cl::list<uint32_t> IdIndex;130 131extern llvm::cl::opt<uint32_t> ModuleIndex;132extern llvm::cl::opt<bool> ModuleSyms;133extern llvm::cl::opt<bool> ModuleC11;134extern llvm::cl::opt<bool> ModuleC13;135extern llvm::cl::opt<bool> SplitChunks;136} // namespace bytes137 138namespace dump {139 140extern llvm::cl::opt<bool> DumpSummary;141extern llvm::cl::opt<bool> DumpFpm;142extern llvm::cl::opt<bool> DumpStreams;143extern llvm::cl::opt<bool> DumpSymbolStats;144extern llvm::cl::opt<bool> DumpTypeStats;145extern llvm::cl::opt<bool> DumpIDStats;146extern llvm::cl::opt<bool> DumpUdtStats;147extern llvm::cl::opt<bool> DumpStreamBlocks;148 149extern llvm::cl::opt<bool> DumpLines;150extern llvm::cl::opt<bool> DumpInlineeLines;151extern llvm::cl::opt<bool> DumpXmi;152extern llvm::cl::opt<bool> DumpXme;153extern llvm::cl::opt<bool> DumpNamedStreams;154extern llvm::cl::opt<bool> DumpStringTable;155extern llvm::cl::opt<bool> DumpStringTableDetails;156extern llvm::cl::opt<bool> DumpTypes;157extern llvm::cl::opt<bool> DumpTypeData;158extern llvm::cl::opt<bool> DumpTypeExtras;159extern llvm::cl::list<uint32_t> DumpTypeIndex;160extern llvm::cl::opt<bool> DumpTypeDependents;161extern llvm::cl::opt<bool> DumpTypeRefStats;162extern llvm::cl::opt<bool> DumpSectionHeaders;163 164extern llvm::cl::opt<bool> DumpIds;165extern llvm::cl::opt<bool> DumpIdData;166extern llvm::cl::opt<bool> DumpIdExtras;167extern llvm::cl::list<uint32_t> DumpIdIndex;168extern llvm::cl::opt<uint32_t> DumpModi;169extern llvm::cl::opt<bool> JustMyCode;170extern llvm::cl::opt<bool> DontResolveForwardRefs;171extern llvm::cl::opt<bool> DumpSymbols;172extern llvm::cl::opt<bool> DumpSymRecordBytes;173extern llvm::cl::opt<bool> DumpGSIRecords;174extern llvm::cl::opt<bool> DumpGlobals;175extern llvm::cl::list<std::string> DumpGlobalNames;176extern llvm::cl::opt<bool> DumpGlobalExtras;177extern llvm::cl::opt<bool> DumpPublics;178extern llvm::cl::opt<bool> DumpPublicExtras;179extern llvm::cl::opt<bool> DumpSectionContribs;180extern llvm::cl::opt<bool> DumpSectionMap;181extern llvm::cl::opt<bool> DumpModules;182extern llvm::cl::opt<bool> DumpModuleFiles;183extern llvm::cl::opt<bool> DumpFpo;184extern llvm::cl::opt<bool> RawAll;185}186 187namespace pdb2yaml {188extern llvm::cl::opt<bool> All;189extern llvm::cl::opt<bool> NoFileHeaders;190extern llvm::cl::opt<bool> Minimal;191extern llvm::cl::opt<bool> StreamMetadata;192extern llvm::cl::opt<bool> StreamDirectory;193extern llvm::cl::opt<bool> StringTable;194extern llvm::cl::opt<bool> PdbStream;195extern llvm::cl::opt<bool> DbiStream;196extern llvm::cl::opt<bool> TpiStream;197extern llvm::cl::opt<bool> IpiStream;198extern llvm::cl::opt<bool> PublicsStream;199extern llvm::cl::list<std::string> InputFilename;200extern llvm::cl::opt<bool> DumpModules;201extern llvm::cl::opt<bool> DumpModuleFiles;202extern llvm::cl::list<ModuleSubsection> DumpModuleSubsections;203extern llvm::cl::opt<bool> DumpModuleSyms;204extern llvm::cl::opt<bool> DumpSectionHeaders;205} // namespace pdb2yaml206 207namespace explain {208enum class InputFileType { PDBFile, PDBStream, DBIStream, Names, ModuleStream };209 210extern llvm::cl::list<std::string> InputFilename;211extern llvm::cl::list<uint64_t> Offsets;212extern llvm::cl::opt<InputFileType> InputType;213} // namespace explain214 215namespace exportstream {216extern llvm::cl::opt<std::string> OutputFile;217extern llvm::cl::opt<std::string> Stream;218extern llvm::cl::opt<bool> ForceName;219} // namespace exportstream220}221 222#endif223