blob: 91c0a585926bd09a0716f2f362900c63a7feefd6 [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 Turner8848a7a2016-07-06 18:05:57 +000016#include "llvm/DebugInfo/PDB/PDBTypes.h"
Zachary Turner1dc9fd32016-06-14 20:48:36 +000017#include "llvm/DebugInfo/PDB/Raw/PDBFile.h"
Zachary Turner8848a7a2016-07-06 18:05:57 +000018#include "llvm/DebugInfo/PDB/Raw/RawConstants.h"
Zachary Turner7120a472016-06-06 20:37:05 +000019#include "llvm/Support/Endian.h"
20#include "llvm/Support/YAMLTraits.h"
21
22#include <vector>
23
24namespace llvm {
25namespace pdb {
Zachary Turner7120a472016-06-06 20:37:05 +000026
27namespace yaml {
28struct MsfHeaders {
Zachary Turner1dc9fd32016-06-14 20:48:36 +000029 PDBFile::SuperBlock SuperBlock;
Zachary Turner7120a472016-06-06 20:37:05 +000030 uint32_t NumDirectoryBlocks;
31 uint32_t BlockMapOffset;
Zachary Turner1dc9fd32016-06-14 20:48:36 +000032 std::vector<support::ulittle32_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 {
38 std::vector<support::ulittle32_t> Blocks;
Zachary Turner25e8b052016-06-06 20:37:17 +000039};
40
Zachary Turner8848a7a2016-07-06 18:05:57 +000041struct PdbInfoStream {
Zachary Turnerdbeaea72016-07-11 21:45:26 +000042 PdbRaw_ImplVer Version;
Zachary Turner8848a7a2016-07-06 18:05:57 +000043 uint32_t Signature;
44 uint32_t Age;
45 PDB_UniqueId Guid;
46};
47
Zachary Turnerdbeaea72016-07-11 21:45:26 +000048struct 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
Zachary Turner7120a472016-06-06 20:37:05 +000058struct PdbObject {
Zachary Turnerf6b93822016-07-11 21:45:09 +000059 Optional<MsfHeaders> Headers;
Zachary Turner1dc9fd32016-06-14 20:48:36 +000060 Optional<std::vector<support::ulittle32_t>> StreamSizes;
61 Optional<std::vector<StreamBlockList>> StreamMap;
Zachary Turner8848a7a2016-07-06 18:05:57 +000062 Optional<PdbInfoStream> PdbStream;
Zachary Turnerdbeaea72016-07-11 21:45:26 +000063 Optional<PdbDbiStream> DbiStream;
Zachary Turner7120a472016-06-06 20:37:05 +000064};
65}
66}
Zachary Turner25e8b052016-06-06 20:37:17 +000067}
Zachary Turner7120a472016-06-06 20:37:05 +000068
Zachary Turner25e8b052016-06-06 20:37:17 +000069namespace llvm {
Zachary Turner7120a472016-06-06 20:37:05 +000070namespace yaml {
Zachary Turner1dc9fd32016-06-14 20:48:36 +000071
Zachary Turnerdbeaea72016-07-11 21:45:26 +000072template <> struct MappingTraits<pdb::yaml::PdbObject> {
73 static void mapping(IO &IO, pdb::yaml::PdbObject &Obj);
74};
75
76template <> struct MappingTraits<pdb::yaml::MsfHeaders> {
77 static void mapping(IO &IO, pdb::yaml::MsfHeaders &Obj);
78};
79
Zachary Turner1dc9fd32016-06-14 20:48:36 +000080template <> struct MappingTraits<pdb::PDBFile::SuperBlock> {
81 static void mapping(IO &IO, pdb::PDBFile::SuperBlock &SB);
Zachary Turner25e8b052016-06-06 20:37:17 +000082};
83
Zachary Turner1dc9fd32016-06-14 20:48:36 +000084template <> struct MappingTraits<pdb::yaml::StreamBlockList> {
85 static void mapping(IO &IO, pdb::yaml::StreamBlockList &SB);
Zachary Turner25e8b052016-06-06 20:37:17 +000086};
87
Zachary Turner8848a7a2016-07-06 18:05:57 +000088template <> struct MappingTraits<pdb::yaml::PdbInfoStream> {
89 static void mapping(IO &IO, pdb::yaml::PdbInfoStream &Obj);
90};
Zachary Turnerdbeaea72016-07-11 21:45:26 +000091
92template <> struct MappingTraits<pdb::yaml::PdbDbiStream> {
93 static void mapping(IO &IO, pdb::yaml::PdbDbiStream &Obj);
94};
Zachary Turner7120a472016-06-06 20:37:05 +000095}
96}
97
Zachary Turner1dc9fd32016-06-14 20:48:36 +000098LLVM_YAML_IS_SEQUENCE_VECTOR(support::ulittle32_t)
99LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::pdb::yaml::StreamBlockList)
Zachary Turner7120a472016-06-06 20:37:05 +0000100
101#endif // LLVM_TOOLS_LLVMPDBDUMP_PDBYAML_H