xref: /aosp_15_r20/external/llvm/tools/llvm-pdbdump/PdbYaml.h (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker //===- PdbYAML.h ---------------------------------------------- *- C++ --*-===//
2*9880d681SAndroid Build Coastguard Worker //
3*9880d681SAndroid Build Coastguard Worker //                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker //
5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker //
8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker 
10*9880d681SAndroid Build Coastguard Worker #ifndef LLVM_TOOLS_LLVMPDBDUMP_PDBYAML_H
11*9880d681SAndroid Build Coastguard Worker #define LLVM_TOOLS_LLVMPDBDUMP_PDBYAML_H
12*9880d681SAndroid Build Coastguard Worker 
13*9880d681SAndroid Build Coastguard Worker #include "OutputStyle.h"
14*9880d681SAndroid Build Coastguard Worker 
15*9880d681SAndroid Build Coastguard Worker #include "llvm/ADT/Optional.h"
16*9880d681SAndroid Build Coastguard Worker #include "llvm/DebugInfo/PDB/PDBTypes.h"
17*9880d681SAndroid Build Coastguard Worker #include "llvm/DebugInfo/PDB/Raw/PDBFile.h"
18*9880d681SAndroid Build Coastguard Worker #include "llvm/DebugInfo/PDB/Raw/RawConstants.h"
19*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/Endian.h"
20*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/YAMLTraits.h"
21*9880d681SAndroid Build Coastguard Worker 
22*9880d681SAndroid Build Coastguard Worker #include <vector>
23*9880d681SAndroid Build Coastguard Worker 
24*9880d681SAndroid Build Coastguard Worker namespace llvm {
25*9880d681SAndroid Build Coastguard Worker namespace pdb {
26*9880d681SAndroid Build Coastguard Worker 
27*9880d681SAndroid Build Coastguard Worker namespace yaml {
28*9880d681SAndroid Build Coastguard Worker struct MsfHeaders {
29*9880d681SAndroid Build Coastguard Worker   PDBFile::SuperBlock SuperBlock;
30*9880d681SAndroid Build Coastguard Worker   uint32_t NumDirectoryBlocks;
31*9880d681SAndroid Build Coastguard Worker   uint32_t BlockMapOffset;
32*9880d681SAndroid Build Coastguard Worker   std::vector<support::ulittle32_t> DirectoryBlocks;
33*9880d681SAndroid Build Coastguard Worker   uint32_t NumStreams;
34*9880d681SAndroid Build Coastguard Worker   uint32_t FileSize;
35*9880d681SAndroid Build Coastguard Worker };
36*9880d681SAndroid Build Coastguard Worker 
37*9880d681SAndroid Build Coastguard Worker struct StreamBlockList {
38*9880d681SAndroid Build Coastguard Worker   std::vector<support::ulittle32_t> Blocks;
39*9880d681SAndroid Build Coastguard Worker };
40*9880d681SAndroid Build Coastguard Worker 
41*9880d681SAndroid Build Coastguard Worker struct PdbInfoStream {
42*9880d681SAndroid Build Coastguard Worker   PdbRaw_ImplVer Version;
43*9880d681SAndroid Build Coastguard Worker   uint32_t Signature;
44*9880d681SAndroid Build Coastguard Worker   uint32_t Age;
45*9880d681SAndroid Build Coastguard Worker   PDB_UniqueId Guid;
46*9880d681SAndroid Build Coastguard Worker };
47*9880d681SAndroid Build Coastguard Worker 
48*9880d681SAndroid Build Coastguard Worker struct PdbDbiStream {
49*9880d681SAndroid Build Coastguard Worker   PdbRaw_DbiVer VerHeader;
50*9880d681SAndroid Build Coastguard Worker   uint32_t Age;
51*9880d681SAndroid Build Coastguard Worker   uint16_t BuildNumber;
52*9880d681SAndroid Build Coastguard Worker   uint32_t PdbDllVersion;
53*9880d681SAndroid Build Coastguard Worker   uint16_t PdbDllRbld;
54*9880d681SAndroid Build Coastguard Worker   uint16_t Flags;
55*9880d681SAndroid Build Coastguard Worker   PDB_Machine MachineType;
56*9880d681SAndroid Build Coastguard Worker };
57*9880d681SAndroid Build Coastguard Worker 
58*9880d681SAndroid Build Coastguard Worker struct PdbObject {
59*9880d681SAndroid Build Coastguard Worker   Optional<MsfHeaders> Headers;
60*9880d681SAndroid Build Coastguard Worker   Optional<std::vector<support::ulittle32_t>> StreamSizes;
61*9880d681SAndroid Build Coastguard Worker   Optional<std::vector<StreamBlockList>> StreamMap;
62*9880d681SAndroid Build Coastguard Worker   Optional<PdbInfoStream> PdbStream;
63*9880d681SAndroid Build Coastguard Worker   Optional<PdbDbiStream> DbiStream;
64*9880d681SAndroid Build Coastguard Worker };
65*9880d681SAndroid Build Coastguard Worker }
66*9880d681SAndroid Build Coastguard Worker }
67*9880d681SAndroid Build Coastguard Worker }
68*9880d681SAndroid Build Coastguard Worker 
69*9880d681SAndroid Build Coastguard Worker namespace llvm {
70*9880d681SAndroid Build Coastguard Worker namespace yaml {
71*9880d681SAndroid Build Coastguard Worker 
72*9880d681SAndroid Build Coastguard Worker template <> struct MappingTraits<pdb::yaml::PdbObject> {
73*9880d681SAndroid Build Coastguard Worker   static void mapping(IO &IO, pdb::yaml::PdbObject &Obj);
74*9880d681SAndroid Build Coastguard Worker };
75*9880d681SAndroid Build Coastguard Worker 
76*9880d681SAndroid Build Coastguard Worker template <> struct MappingTraits<pdb::yaml::MsfHeaders> {
77*9880d681SAndroid Build Coastguard Worker   static void mapping(IO &IO, pdb::yaml::MsfHeaders &Obj);
78*9880d681SAndroid Build Coastguard Worker };
79*9880d681SAndroid Build Coastguard Worker 
80*9880d681SAndroid Build Coastguard Worker template <> struct MappingTraits<pdb::PDBFile::SuperBlock> {
81*9880d681SAndroid Build Coastguard Worker   static void mapping(IO &IO, pdb::PDBFile::SuperBlock &SB);
82*9880d681SAndroid Build Coastguard Worker };
83*9880d681SAndroid Build Coastguard Worker 
84*9880d681SAndroid Build Coastguard Worker template <> struct MappingTraits<pdb::yaml::StreamBlockList> {
85*9880d681SAndroid Build Coastguard Worker   static void mapping(IO &IO, pdb::yaml::StreamBlockList &SB);
86*9880d681SAndroid Build Coastguard Worker };
87*9880d681SAndroid Build Coastguard Worker 
88*9880d681SAndroid Build Coastguard Worker template <> struct MappingTraits<pdb::yaml::PdbInfoStream> {
89*9880d681SAndroid Build Coastguard Worker   static void mapping(IO &IO, pdb::yaml::PdbInfoStream &Obj);
90*9880d681SAndroid Build Coastguard Worker };
91*9880d681SAndroid Build Coastguard Worker 
92*9880d681SAndroid Build Coastguard Worker template <> struct MappingTraits<pdb::yaml::PdbDbiStream> {
93*9880d681SAndroid Build Coastguard Worker   static void mapping(IO &IO, pdb::yaml::PdbDbiStream &Obj);
94*9880d681SAndroid Build Coastguard Worker };
95*9880d681SAndroid Build Coastguard Worker }
96*9880d681SAndroid Build Coastguard Worker }
97*9880d681SAndroid Build Coastguard Worker 
98*9880d681SAndroid Build Coastguard Worker LLVM_YAML_IS_SEQUENCE_VECTOR(support::ulittle32_t)
99*9880d681SAndroid Build Coastguard Worker LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::pdb::yaml::StreamBlockList)
100*9880d681SAndroid Build Coastguard Worker 
101*9880d681SAndroid Build Coastguard Worker #endif // LLVM_TOOLS_LLVMPDBDUMP_PDBYAML_H
102