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