1//===- PdbYAML.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-exception 6// 7//===----------------------------------------------------------------------===// 8 9#ifndef LLVM_TOOLS_LLVMPDBDUMP_PDBYAML_H 10#define LLVM_TOOLS_LLVMPDBDUMP_PDBYAML_H 11 12#include "OutputStyle.h" 13 14#include "llvm/DebugInfo/CodeView/SymbolRecord.h" 15#include "llvm/DebugInfo/CodeView/TypeRecord.h" 16#include "llvm/DebugInfo/MSF/MSFCommon.h" 17#include "llvm/DebugInfo/PDB/Native/PDBFile.h" 18#include "llvm/DebugInfo/PDB/Native/RawConstants.h" 19#include "llvm/DebugInfo/PDB/PDBTypes.h" 20#include "llvm/ObjectYAML/CodeViewYAMLDebugSections.h" 21#include "llvm/ObjectYAML/CodeViewYAMLSymbols.h" 22#include "llvm/ObjectYAML/CodeViewYAMLTypes.h" 23#include "llvm/Support/Endian.h" 24#include "llvm/Support/YAMLTraits.h" 25 26#include <optional> 27#include <vector> 28 29namespace llvm { 30namespace pdb { 31 32namespace yaml { 33 34struct MSFHeaders { 35 msf::SuperBlock SuperBlock; 36 uint32_t NumDirectoryBlocks = 0; 37 std::vector<uint32_t> DirectoryBlocks; 38 uint32_t NumStreams = 0; 39 uint64_t FileSize = 0; 40}; 41 42struct StreamBlockList { 43 std::vector<uint32_t> Blocks; 44}; 45 46struct NamedStreamMapping { 47 StringRef StreamName; 48 uint32_t StreamNumber; 49}; 50 51struct PdbInfoStream { 52 PdbRaw_ImplVer Version = PdbImplVC70; 53 uint32_t Signature = 0; 54 uint32_t Age = 1; 55 codeview::GUID Guid; 56 std::vector<PdbRaw_FeatureSig> Features; 57 std::vector<NamedStreamMapping> NamedStreams; 58}; 59 60struct PdbModiStream { 61 uint32_t Signature; 62 std::vector<CodeViewYAML::SymbolRecord> Symbols; 63}; 64 65struct PdbDbiModuleInfo { 66 StringRef Obj; 67 StringRef Mod; 68 std::vector<StringRef> SourceFiles; 69 std::vector<CodeViewYAML::YAMLDebugSubsection> Subsections; 70 std::optional<PdbModiStream> Modi; 71}; 72 73struct PdbDbiStream { 74 PdbRaw_DbiVer VerHeader = PdbDbiV70; 75 uint32_t Age = 1; 76 uint16_t BuildNumber = 0; 77 uint32_t PdbDllVersion = 0; 78 uint16_t PdbDllRbld = 0; 79 uint16_t Flags = 1; 80 PDB_Machine MachineType = PDB_Machine::x86; 81 82 std::vector<PdbDbiModuleInfo> ModInfos; 83}; 84 85struct PdbTpiStream { 86 PdbRaw_TpiVer Version = PdbTpiV80; 87 std::vector<CodeViewYAML::LeafRecord> Records; 88}; 89 90struct PdbPublicsStream { 91 std::vector<CodeViewYAML::SymbolRecord> PubSyms; 92}; 93 94struct PdbObject { 95 explicit PdbObject(BumpPtrAllocator &Allocator) : Allocator(Allocator) {} 96 97 std::optional<MSFHeaders> Headers; 98 std::optional<std::vector<uint32_t>> StreamSizes; 99 std::optional<std::vector<StreamBlockList>> StreamMap; 100 std::optional<PdbInfoStream> PdbStream; 101 std::optional<PdbDbiStream> DbiStream; 102 std::optional<PdbTpiStream> TpiStream; 103 std::optional<PdbTpiStream> IpiStream; 104 std::optional<PdbPublicsStream> PublicsStream; 105 106 std::optional<std::vector<StringRef>> StringTable; 107 108 BumpPtrAllocator &Allocator; 109}; 110} 111} 112} 113 114LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbObject) 115LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::MSFHeaders) 116LLVM_YAML_DECLARE_MAPPING_TRAITS(msf::SuperBlock) 117LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::StreamBlockList) 118LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbInfoStream) 119LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbDbiStream) 120LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbTpiStream) 121LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbPublicsStream) 122LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::NamedStreamMapping) 123LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbModiStream) 124LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbDbiModuleInfo) 125 126#endif // LLVM_TOOLS_LLVMPDBDUMP_PDBYAML_H 127