blob: ffa194df214b37aa1023e7e9712d61b8f3ad56f0 [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 Turnerc6d54da2016-09-09 17:46:17 +000029struct SerializationContext;
30
Zachary Turnera3225b02016-07-29 20:56:36 +000031struct MSFHeaders {
Zachary Turnerfaa554b2016-07-15 22:16:56 +000032 msf::SuperBlock SuperBlock;
Zachary Turner7120a472016-06-06 20:37:05 +000033 uint32_t NumDirectoryBlocks;
Zachary Turnerfaa554b2016-07-15 22:16:56 +000034 std::vector<uint32_t> DirectoryBlocks;
Zachary Turner7120a472016-06-06 20:37:05 +000035 uint32_t NumStreams;
Zachary Turner1dc9fd32016-06-14 20:48:36 +000036 uint32_t FileSize;
Zachary Turner7120a472016-06-06 20:37:05 +000037};
38
Zachary Turner1dc9fd32016-06-14 20:48:36 +000039struct StreamBlockList {
Zachary Turnerfaa554b2016-07-15 22:16:56 +000040 std::vector<uint32_t> Blocks;
Zachary Turner25e8b052016-06-06 20:37:17 +000041};
42
Zachary Turner5e534c72016-07-15 22:17:08 +000043struct NamedStreamMapping {
44 StringRef StreamName;
45 uint32_t StreamNumber;
46};
47
Zachary Turner8848a7a2016-07-06 18:05:57 +000048struct PdbInfoStream {
Zachary Turnerdbeaea72016-07-11 21:45:26 +000049 PdbRaw_ImplVer Version;
Zachary Turner8848a7a2016-07-06 18:05:57 +000050 uint32_t Signature;
51 uint32_t Age;
52 PDB_UniqueId Guid;
Zachary Turner5e534c72016-07-15 22:17:08 +000053 std::vector<NamedStreamMapping> NamedStreams;
Zachary Turner8848a7a2016-07-06 18:05:57 +000054};
55
Zachary Turnerd218c262016-07-22 15:46:37 +000056struct PdbDbiModuleInfo {
57 StringRef Obj;
58 StringRef Mod;
59 std::vector<StringRef> SourceFiles;
60};
61
Zachary Turnerdbeaea72016-07-11 21:45:26 +000062struct PdbDbiStream {
63 PdbRaw_DbiVer VerHeader;
64 uint32_t Age;
65 uint16_t BuildNumber;
66 uint32_t PdbDllVersion;
67 uint16_t PdbDllRbld;
68 uint16_t Flags;
69 PDB_Machine MachineType;
Zachary Turnerd218c262016-07-22 15:46:37 +000070
71 std::vector<PdbDbiModuleInfo> ModInfos;
Zachary Turnerdbeaea72016-07-11 21:45:26 +000072};
73
Zachary Turnerac5763e2016-08-18 16:49:29 +000074struct PdbTpiRecord {
Zachary Turnerac5763e2016-08-18 16:49:29 +000075 codeview::CVType Record;
76};
77
Zachary Turnerc67b00c2016-09-14 23:00:16 +000078struct PdbTpiFieldListRecord {
79 codeview::CVMemberRecord Record;
80};
81
Zachary Turnerac5763e2016-08-18 16:49:29 +000082struct PdbTpiStream {
83 PdbRaw_TpiVer Version;
84 std::vector<PdbTpiRecord> Records;
85};
86
Zachary Turner7120a472016-06-06 20:37:05 +000087struct PdbObject {
Zachary Turnerc6d54da2016-09-09 17:46:17 +000088 explicit PdbObject(BumpPtrAllocator &Allocator) : Allocator(Allocator) {}
89
Zachary Turnera3225b02016-07-29 20:56:36 +000090 Optional<MSFHeaders> Headers;
Zachary Turnerfaa554b2016-07-15 22:16:56 +000091 Optional<std::vector<uint32_t>> StreamSizes;
Zachary Turner1dc9fd32016-06-14 20:48:36 +000092 Optional<std::vector<StreamBlockList>> StreamMap;
Zachary Turner8848a7a2016-07-06 18:05:57 +000093 Optional<PdbInfoStream> PdbStream;
Zachary Turnerdbeaea72016-07-11 21:45:26 +000094 Optional<PdbDbiStream> DbiStream;
Zachary Turnerac5763e2016-08-18 16:49:29 +000095 Optional<PdbTpiStream> TpiStream;
Zachary Turnerde9ba152016-09-15 18:22:31 +000096 Optional<PdbTpiStream> IpiStream;
Zachary Turnerc6d54da2016-09-09 17:46:17 +000097
98 BumpPtrAllocator &Allocator;
Zachary Turner7120a472016-06-06 20:37:05 +000099};
100}
101}
Zachary Turner25e8b052016-06-06 20:37:17 +0000102}
Zachary Turner7120a472016-06-06 20:37:05 +0000103
Zachary Turner25e8b052016-06-06 20:37:17 +0000104namespace llvm {
Zachary Turner7120a472016-06-06 20:37:05 +0000105namespace yaml {
Zachary Turner1dc9fd32016-06-14 20:48:36 +0000106
Zachary Turnerdbeaea72016-07-11 21:45:26 +0000107template <> struct MappingTraits<pdb::yaml::PdbObject> {
108 static void mapping(IO &IO, pdb::yaml::PdbObject &Obj);
109};
110
Zachary Turnera3225b02016-07-29 20:56:36 +0000111template <> struct MappingTraits<pdb::yaml::MSFHeaders> {
112 static void mapping(IO &IO, pdb::yaml::MSFHeaders &Obj);
Zachary Turnerdbeaea72016-07-11 21:45:26 +0000113};
114
Zachary Turnerbac69d32016-07-22 19:56:05 +0000115template <> struct MappingTraits<msf::SuperBlock> {
116 static void mapping(IO &IO, msf::SuperBlock &SB);
Zachary Turner25e8b052016-06-06 20:37:17 +0000117};
118
Zachary Turner1dc9fd32016-06-14 20:48:36 +0000119template <> struct MappingTraits<pdb::yaml::StreamBlockList> {
120 static void mapping(IO &IO, pdb::yaml::StreamBlockList &SB);
Zachary Turner25e8b052016-06-06 20:37:17 +0000121};
122
Zachary Turner8848a7a2016-07-06 18:05:57 +0000123template <> struct MappingTraits<pdb::yaml::PdbInfoStream> {
124 static void mapping(IO &IO, pdb::yaml::PdbInfoStream &Obj);
125};
Zachary Turnerdbeaea72016-07-11 21:45:26 +0000126
127template <> struct MappingTraits<pdb::yaml::PdbDbiStream> {
128 static void mapping(IO &IO, pdb::yaml::PdbDbiStream &Obj);
129};
Zachary Turner5e534c72016-07-15 22:17:08 +0000130
Zachary Turnerc6d54da2016-09-09 17:46:17 +0000131template <>
132struct MappingContextTraits<pdb::yaml::PdbTpiStream, llvm::BumpPtrAllocator> {
133 static void mapping(IO &IO, pdb::yaml::PdbTpiStream &Obj,
134 llvm::BumpPtrAllocator &Allocator);
Zachary Turnerac5763e2016-08-18 16:49:29 +0000135};
136
Zachary Turner5e534c72016-07-15 22:17:08 +0000137template <> struct MappingTraits<pdb::yaml::NamedStreamMapping> {
138 static void mapping(IO &IO, pdb::yaml::NamedStreamMapping &Obj);
139};
Zachary Turnerd218c262016-07-22 15:46:37 +0000140
141template <> struct MappingTraits<pdb::yaml::PdbDbiModuleInfo> {
142 static void mapping(IO &IO, pdb::yaml::PdbDbiModuleInfo &Obj);
143};
Zachary Turner7120a472016-06-06 20:37:05 +0000144
Zachary Turnerc6d54da2016-09-09 17:46:17 +0000145template <>
146struct MappingContextTraits<pdb::yaml::PdbTpiRecord,
147 pdb::yaml::SerializationContext> {
148 static void mapping(IO &IO, pdb::yaml::PdbTpiRecord &Obj,
149 pdb::yaml::SerializationContext &Context);
Zachary Turnerac5763e2016-08-18 16:49:29 +0000150};
151}
152}
Zachary Turner7120a472016-06-06 20:37:05 +0000153
154#endif // LLVM_TOOLS_LLVMPDBDUMP_PDBYAML_H