blob: 0da53034bf1b49cb2671afc12a71f0b987fd88ca [file] [log] [blame]
Zachary Turner7120a472016-06-06 20:37:05 +00001//===- 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"
Zachary Turnera3225b02016-07-29 20:56:36 +000016#include "llvm/DebugInfo/MSF/MSFCommon.h"
Zachary Turner8848a7a2016-07-06 18:05:57 +000017#include "llvm/DebugInfo/PDB/PDBTypes.h"
Zachary Turner1dc9fd32016-06-14 20:48:36 +000018#include "llvm/DebugInfo/PDB/Raw/PDBFile.h"
Zachary Turner8848a7a2016-07-06 18:05:57 +000019#include "llvm/DebugInfo/PDB/Raw/RawConstants.h"
Zachary Turner7120a472016-06-06 20:37:05 +000020#include "llvm/Support/Endian.h"
21#include "llvm/Support/YAMLTraits.h"
22
23#include <vector>
24
25namespace llvm {
26namespace pdb {
Zachary Turner7120a472016-06-06 20:37:05 +000027
28namespace yaml {
Zachary Turnera3225b02016-07-29 20:56:36 +000029struct MSFHeaders {
Zachary Turnerfaa554b2016-07-15 22:16:56 +000030 msf::SuperBlock SuperBlock;
Zachary Turner7120a472016-06-06 20:37:05 +000031 uint32_t NumDirectoryBlocks;
Zachary Turnerfaa554b2016-07-15 22:16:56 +000032 std::vector<uint32_t> DirectoryBlocks;
Zachary Turner7120a472016-06-06 20:37:05 +000033 uint32_t NumStreams;
Zachary Turner1dc9fd32016-06-14 20:48:36 +000034 uint32_t FileSize;
Zachary Turner7120a472016-06-06 20:37:05 +000035};
36
Zachary Turner1dc9fd32016-06-14 20:48:36 +000037struct StreamBlockList {
Zachary Turnerfaa554b2016-07-15 22:16:56 +000038 std::vector<uint32_t> Blocks;
Zachary Turner25e8b052016-06-06 20:37:17 +000039};
40
Zachary Turner5e534c72016-07-15 22:17:08 +000041struct NamedStreamMapping {
42 StringRef StreamName;
43 uint32_t StreamNumber;
44};
45
Zachary Turner8848a7a2016-07-06 18:05:57 +000046struct PdbInfoStream {
Zachary Turnerdbeaea72016-07-11 21:45:26 +000047 PdbRaw_ImplVer Version;
Zachary Turner8848a7a2016-07-06 18:05:57 +000048 uint32_t Signature;
49 uint32_t Age;
50 PDB_UniqueId Guid;
Zachary Turner5e534c72016-07-15 22:17:08 +000051 std::vector<NamedStreamMapping> NamedStreams;
Zachary Turner8848a7a2016-07-06 18:05:57 +000052};
53
Zachary Turnerd218c262016-07-22 15:46:37 +000054struct PdbDbiModuleInfo {
55 StringRef Obj;
56 StringRef Mod;
57 std::vector<StringRef> SourceFiles;
58};
59
Zachary Turnerdbeaea72016-07-11 21:45:26 +000060struct PdbDbiStream {
61 PdbRaw_DbiVer VerHeader;
62 uint32_t Age;
63 uint16_t BuildNumber;
64 uint32_t PdbDllVersion;
65 uint16_t PdbDllRbld;
66 uint16_t Flags;
67 PDB_Machine MachineType;
Zachary Turnerd218c262016-07-22 15:46:37 +000068
69 std::vector<PdbDbiModuleInfo> ModInfos;
Zachary Turnerdbeaea72016-07-11 21:45:26 +000070};
71
Zachary Turnerac5763e2016-08-18 16:49:29 +000072struct PdbTpiRecord {
73 std::vector<uint8_t> RecordData;
74 codeview::CVType Record;
75};
76
77struct PdbTpiStream {
78 PdbRaw_TpiVer Version;
79 std::vector<PdbTpiRecord> Records;
80};
81
Zachary Turner7120a472016-06-06 20:37:05 +000082struct PdbObject {
Zachary Turnera3225b02016-07-29 20:56:36 +000083 Optional<MSFHeaders> Headers;
Zachary Turnerfaa554b2016-07-15 22:16:56 +000084 Optional<std::vector<uint32_t>> StreamSizes;
Zachary Turner1dc9fd32016-06-14 20:48:36 +000085 Optional<std::vector<StreamBlockList>> StreamMap;
Zachary Turner8848a7a2016-07-06 18:05:57 +000086 Optional<PdbInfoStream> PdbStream;
Zachary Turnerdbeaea72016-07-11 21:45:26 +000087 Optional<PdbDbiStream> DbiStream;
Zachary Turnerac5763e2016-08-18 16:49:29 +000088 Optional<PdbTpiStream> TpiStream;
Zachary Turner7120a472016-06-06 20:37:05 +000089};
90}
91}
Zachary Turner25e8b052016-06-06 20:37:17 +000092}
Zachary Turner7120a472016-06-06 20:37:05 +000093
Zachary Turner25e8b052016-06-06 20:37:17 +000094namespace llvm {
Zachary Turner7120a472016-06-06 20:37:05 +000095namespace yaml {
Zachary Turner1dc9fd32016-06-14 20:48:36 +000096
Zachary Turnerdbeaea72016-07-11 21:45:26 +000097template <> struct MappingTraits<pdb::yaml::PdbObject> {
98 static void mapping(IO &IO, pdb::yaml::PdbObject &Obj);
99};
100
Zachary Turnera3225b02016-07-29 20:56:36 +0000101template <> struct MappingTraits<pdb::yaml::MSFHeaders> {
102 static void mapping(IO &IO, pdb::yaml::MSFHeaders &Obj);
Zachary Turnerdbeaea72016-07-11 21:45:26 +0000103};
104
Zachary Turnerbac69d32016-07-22 19:56:05 +0000105template <> struct MappingTraits<msf::SuperBlock> {
106 static void mapping(IO &IO, msf::SuperBlock &SB);
Zachary Turner25e8b052016-06-06 20:37:17 +0000107};
108
Zachary Turner1dc9fd32016-06-14 20:48:36 +0000109template <> struct MappingTraits<pdb::yaml::StreamBlockList> {
110 static void mapping(IO &IO, pdb::yaml::StreamBlockList &SB);
Zachary Turner25e8b052016-06-06 20:37:17 +0000111};
112
Zachary Turner8848a7a2016-07-06 18:05:57 +0000113template <> struct MappingTraits<pdb::yaml::PdbInfoStream> {
114 static void mapping(IO &IO, pdb::yaml::PdbInfoStream &Obj);
115};
Zachary Turnerdbeaea72016-07-11 21:45:26 +0000116
117template <> struct MappingTraits<pdb::yaml::PdbDbiStream> {
118 static void mapping(IO &IO, pdb::yaml::PdbDbiStream &Obj);
119};
Zachary Turner5e534c72016-07-15 22:17:08 +0000120
Zachary Turnerac5763e2016-08-18 16:49:29 +0000121template <> struct MappingTraits<pdb::yaml::PdbTpiStream> {
122 static void mapping(IO &IO, pdb::yaml::PdbTpiStream &Obj);
123};
124
Zachary Turner5e534c72016-07-15 22:17:08 +0000125template <> struct MappingTraits<pdb::yaml::NamedStreamMapping> {
126 static void mapping(IO &IO, pdb::yaml::NamedStreamMapping &Obj);
127};
Zachary Turnerd218c262016-07-22 15:46:37 +0000128
129template <> struct MappingTraits<pdb::yaml::PdbDbiModuleInfo> {
130 static void mapping(IO &IO, pdb::yaml::PdbDbiModuleInfo &Obj);
131};
Zachary Turner7120a472016-06-06 20:37:05 +0000132
Zachary Turnerac5763e2016-08-18 16:49:29 +0000133template <> struct MappingTraits<pdb::yaml::PdbTpiRecord> {
134 static void mapping(IO &IO, pdb::yaml::PdbTpiRecord &Obj);
135};
136}
137}
Zachary Turner7120a472016-06-06 20:37:05 +0000138
139#endif // LLVM_TOOLS_LLVMPDBDUMP_PDBYAML_H