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