1319780Sdim//===- PdbYAML.h ---------------------------------------------- *- C++ --*-===// 2319780Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6319780Sdim// 7319780Sdim//===----------------------------------------------------------------------===// 8319780Sdim 9319780Sdim#ifndef LLVM_TOOLS_LLVMPDBDUMP_PDBYAML_H 10319780Sdim#define LLVM_TOOLS_LLVMPDBDUMP_PDBYAML_H 11319780Sdim 12319780Sdim#include "OutputStyle.h" 13319780Sdim 14319780Sdim#include "llvm/ADT/Optional.h" 15319780Sdim#include "llvm/DebugInfo/CodeView/SymbolRecord.h" 16319780Sdim#include "llvm/DebugInfo/CodeView/TypeRecord.h" 17319780Sdim#include "llvm/DebugInfo/MSF/MSFCommon.h" 18319780Sdim#include "llvm/DebugInfo/PDB/Native/PDBFile.h" 19319780Sdim#include "llvm/DebugInfo/PDB/Native/RawConstants.h" 20319780Sdim#include "llvm/DebugInfo/PDB/PDBTypes.h" 21319780Sdim#include "llvm/ObjectYAML/CodeViewYAMLDebugSections.h" 22319780Sdim#include "llvm/ObjectYAML/CodeViewYAMLSymbols.h" 23319780Sdim#include "llvm/ObjectYAML/CodeViewYAMLTypes.h" 24319780Sdim#include "llvm/Support/Endian.h" 25319780Sdim#include "llvm/Support/YAMLTraits.h" 26319780Sdim 27319780Sdim#include <vector> 28319780Sdim 29319780Sdimnamespace llvm { 30319780Sdimnamespace codeview { 31319780Sdimclass DebugStringTableSubsection; 32319780Sdim} 33319780Sdimnamespace pdb { 34319780Sdim 35319780Sdimnamespace yaml { 36319780Sdimstruct SerializationContext; 37319780Sdim 38319780Sdimstruct MSFHeaders { 39319780Sdim msf::SuperBlock SuperBlock; 40319780Sdim uint32_t NumDirectoryBlocks = 0; 41319780Sdim std::vector<uint32_t> DirectoryBlocks; 42319780Sdim uint32_t NumStreams = 0; 43319780Sdim uint32_t FileSize = 0; 44319780Sdim}; 45319780Sdim 46319780Sdimstruct StreamBlockList { 47319780Sdim std::vector<uint32_t> Blocks; 48319780Sdim}; 49319780Sdim 50319780Sdimstruct NamedStreamMapping { 51319780Sdim StringRef StreamName; 52319780Sdim uint32_t StreamNumber; 53319780Sdim}; 54319780Sdim 55319780Sdimstruct PdbInfoStream { 56319780Sdim PdbRaw_ImplVer Version = PdbImplVC70; 57319780Sdim uint32_t Signature = 0; 58319780Sdim uint32_t Age = 1; 59321238Sdim codeview::GUID Guid; 60319780Sdim std::vector<PdbRaw_FeatureSig> Features; 61319780Sdim std::vector<NamedStreamMapping> NamedStreams; 62319780Sdim}; 63319780Sdim 64319780Sdimstruct PdbModiStream { 65319780Sdim uint32_t Signature; 66319780Sdim std::vector<CodeViewYAML::SymbolRecord> Symbols; 67319780Sdim}; 68319780Sdim 69319780Sdimstruct PdbDbiModuleInfo { 70319780Sdim StringRef Obj; 71319780Sdim StringRef Mod; 72319780Sdim std::vector<StringRef> SourceFiles; 73319780Sdim std::vector<CodeViewYAML::YAMLDebugSubsection> Subsections; 74319780Sdim Optional<PdbModiStream> Modi; 75319780Sdim}; 76319780Sdim 77319780Sdimstruct PdbDbiStream { 78319780Sdim PdbRaw_DbiVer VerHeader = PdbDbiV70; 79319780Sdim uint32_t Age = 1; 80319780Sdim uint16_t BuildNumber = 0; 81319780Sdim uint32_t PdbDllVersion = 0; 82319780Sdim uint16_t PdbDllRbld = 0; 83319780Sdim uint16_t Flags = 1; 84319780Sdim PDB_Machine MachineType = PDB_Machine::x86; 85319780Sdim 86319780Sdim std::vector<PdbDbiModuleInfo> ModInfos; 87319780Sdim}; 88319780Sdim 89319780Sdimstruct PdbTpiStream { 90319780Sdim PdbRaw_TpiVer Version = PdbTpiV80; 91319780Sdim std::vector<CodeViewYAML::LeafRecord> Records; 92319780Sdim}; 93319780Sdim 94344779Sdimstruct PdbPublicsStream { 95344779Sdim std::vector<CodeViewYAML::SymbolRecord> PubSyms; 96344779Sdim}; 97344779Sdim 98319780Sdimstruct PdbObject { 99319780Sdim explicit PdbObject(BumpPtrAllocator &Allocator) : Allocator(Allocator) {} 100319780Sdim 101319780Sdim Optional<MSFHeaders> Headers; 102319780Sdim Optional<std::vector<uint32_t>> StreamSizes; 103319780Sdim Optional<std::vector<StreamBlockList>> StreamMap; 104319780Sdim Optional<PdbInfoStream> PdbStream; 105319780Sdim Optional<PdbDbiStream> DbiStream; 106319780Sdim Optional<PdbTpiStream> TpiStream; 107319780Sdim Optional<PdbTpiStream> IpiStream; 108344779Sdim Optional<PdbPublicsStream> PublicsStream; 109319780Sdim 110319780Sdim Optional<std::vector<StringRef>> StringTable; 111319780Sdim 112319780Sdim BumpPtrAllocator &Allocator; 113319780Sdim}; 114319780Sdim} 115319780Sdim} 116319780Sdim} 117319780Sdim 118319780SdimLLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbObject) 119319780SdimLLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::MSFHeaders) 120319780SdimLLVM_YAML_DECLARE_MAPPING_TRAITS(msf::SuperBlock) 121319780SdimLLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::StreamBlockList) 122319780SdimLLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbInfoStream) 123319780SdimLLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbDbiStream) 124319780SdimLLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbTpiStream) 125344779SdimLLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbPublicsStream) 126319780SdimLLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::NamedStreamMapping) 127319780SdimLLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbModiStream) 128319780SdimLLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbDbiModuleInfo) 129319780Sdim 130319780Sdim#endif // LLVM_TOOLS_LLVMPDBDUMP_PDBYAML_H 131