blob: 97ba87266cc67af85655a6fba5349dbec9c2b73a [file] [log] [blame]
Zachary Turner61e0e272016-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 Turner2ce5ded2016-10-08 01:12:01 +000016#include "llvm/DebugInfo/CodeView/SymbolRecord.h"
17#include "llvm/DebugInfo/CodeView/TypeRecord.h"
Zachary Turner5e117852016-07-29 20:56:36 +000018#include "llvm/DebugInfo/MSF/MSFCommon.h"
Adrian McCarthy11e1d832017-01-25 22:38:55 +000019#include "llvm/DebugInfo/PDB/Native/PDBFile.h"
20#include "llvm/DebugInfo/PDB/Native/RawConstants.h"
Zachary Turner8bf0aed2016-07-06 18:05:57 +000021#include "llvm/DebugInfo/PDB/PDBTypes.h"
Zachary Turner7b436b02017-05-31 04:17:13 +000022#include "llvm/ObjectYAML/CodeViewYAMLDebugSections.h"
23#include "llvm/ObjectYAML/CodeViewYAMLSymbols.h"
24#include "llvm/ObjectYAML/CodeViewYAMLTypes.h"
Zachary Turner61e0e272016-06-06 20:37:05 +000025#include "llvm/Support/Endian.h"
26#include "llvm/Support/YAMLTraits.h"
27
28#include <vector>
29
30namespace llvm {
Zachary Turner42d60ef2017-06-02 19:49:14 +000031namespace codeview {
32class DebugStringTableSubsection;
33}
Zachary Turner61e0e272016-06-06 20:37:05 +000034namespace pdb {
Zachary Turner61e0e272016-06-06 20:37:05 +000035
36namespace yaml {
Zachary Turnerbe73fbc2016-09-09 17:46:17 +000037struct SerializationContext;
38
Zachary Turner5e117852016-07-29 20:56:36 +000039struct MSFHeaders {
Zachary Turner6be3e7c2016-07-15 22:16:56 +000040 msf::SuperBlock SuperBlock;
Zachary Turnerbbf96062017-03-15 22:18:53 +000041 uint32_t NumDirectoryBlocks = 0;
Zachary Turner6be3e7c2016-07-15 22:16:56 +000042 std::vector<uint32_t> DirectoryBlocks;
Zachary Turnerbbf96062017-03-15 22:18:53 +000043 uint32_t NumStreams = 0;
44 uint32_t FileSize = 0;
Zachary Turner61e0e272016-06-06 20:37:05 +000045};
46
Zachary Turner7d35b2d2016-06-14 20:48:36 +000047struct StreamBlockList {
Zachary Turner6be3e7c2016-07-15 22:16:56 +000048 std::vector<uint32_t> Blocks;
Zachary Turner4efa5e52016-06-06 20:37:17 +000049};
50
Zachary Turner93a8d142016-07-15 22:17:08 +000051struct NamedStreamMapping {
52 StringRef StreamName;
53 uint32_t StreamNumber;
54};
55
Zachary Turner8bf0aed2016-07-06 18:05:57 +000056struct PdbInfoStream {
Zachary Turnerbbf96062017-03-15 22:18:53 +000057 PdbRaw_ImplVer Version = PdbImplVC70;
58 uint32_t Signature = 0;
59 uint32_t Age = 1;
Reid Kleckner5c238d62017-07-17 23:59:44 +000060 codeview::GUID Guid;
Zachary Turner7ba63562017-03-16 20:19:11 +000061 std::vector<PdbRaw_FeatureSig> Features;
Zachary Turner93a8d142016-07-15 22:17:08 +000062 std::vector<NamedStreamMapping> NamedStreams;
Zachary Turner8bf0aed2016-07-06 18:05:57 +000063};
64
Zachary Turner2ce5ded2016-10-08 01:12:01 +000065struct PdbModiStream {
66 uint32_t Signature;
Zachary Turner5dc90132017-05-30 23:50:44 +000067 std::vector<CodeViewYAML::SymbolRecord> Symbols;
Zachary Turner2ce5ded2016-10-08 01:12:01 +000068};
69
Zachary Turner6406b602016-07-22 15:46:37 +000070struct PdbDbiModuleInfo {
71 StringRef Obj;
72 StringRef Mod;
73 std::vector<StringRef> SourceFiles;
Zachary Turner42d60ef2017-06-02 19:49:14 +000074 std::vector<CodeViewYAML::YAMLDebugSubsection> Subsections;
Zachary Turner2ce5ded2016-10-08 01:12:01 +000075 Optional<PdbModiStream> Modi;
Zachary Turner6406b602016-07-22 15:46:37 +000076};
77
Zachary Turnerae108ee2016-07-11 21:45:26 +000078struct PdbDbiStream {
Zachary Turnerbbf96062017-03-15 22:18:53 +000079 PdbRaw_DbiVer VerHeader = PdbDbiV70;
80 uint32_t Age = 1;
81 uint16_t BuildNumber = 0;
82 uint32_t PdbDllVersion = 0;
83 uint16_t PdbDllRbld = 0;
84 uint16_t Flags = 1;
85 PDB_Machine MachineType = PDB_Machine::x86;
Zachary Turner6406b602016-07-22 15:46:37 +000086
87 std::vector<PdbDbiModuleInfo> ModInfos;
Zachary Turnerae108ee2016-07-11 21:45:26 +000088};
89
Zachary Turner3fe902e2016-08-18 16:49:29 +000090struct PdbTpiStream {
Zachary Turnerbbf96062017-03-15 22:18:53 +000091 PdbRaw_TpiVer Version = PdbTpiV80;
Zachary Turnerea64a9b2017-05-30 21:53:05 +000092 std::vector<CodeViewYAML::LeafRecord> Records;
Zachary Turner3fe902e2016-08-18 16:49:29 +000093};
94
Zachary Turnerf3aabb02018-10-26 00:17:31 +000095struct PdbPublicsStream {
96 std::vector<CodeViewYAML::SymbolRecord> PubSyms;
97};
98
Zachary Turner61e0e272016-06-06 20:37:05 +000099struct PdbObject {
Zachary Turnerbe73fbc2016-09-09 17:46:17 +0000100 explicit PdbObject(BumpPtrAllocator &Allocator) : Allocator(Allocator) {}
101
Zachary Turner5e117852016-07-29 20:56:36 +0000102 Optional<MSFHeaders> Headers;
Zachary Turner6be3e7c2016-07-15 22:16:56 +0000103 Optional<std::vector<uint32_t>> StreamSizes;
Zachary Turner7d35b2d2016-06-14 20:48:36 +0000104 Optional<std::vector<StreamBlockList>> StreamMap;
Zachary Turner8bf0aed2016-07-06 18:05:57 +0000105 Optional<PdbInfoStream> PdbStream;
Zachary Turnerae108ee2016-07-11 21:45:26 +0000106 Optional<PdbDbiStream> DbiStream;
Zachary Turner3fe902e2016-08-18 16:49:29 +0000107 Optional<PdbTpiStream> TpiStream;
Zachary Turner5fa3c522016-09-15 18:22:31 +0000108 Optional<PdbTpiStream> IpiStream;
Zachary Turnerf3aabb02018-10-26 00:17:31 +0000109 Optional<PdbPublicsStream> PublicsStream;
Zachary Turnerbe73fbc2016-09-09 17:46:17 +0000110
Zachary Turner9c1e7a62017-01-20 22:42:09 +0000111 Optional<std::vector<StringRef>> StringTable;
112
Zachary Turnerbe73fbc2016-09-09 17:46:17 +0000113 BumpPtrAllocator &Allocator;
Zachary Turner61e0e272016-06-06 20:37:05 +0000114};
115}
116}
Zachary Turner4efa5e52016-06-06 20:37:17 +0000117}
Zachary Turner61e0e272016-06-06 20:37:05 +0000118
Zachary Turnerea64a9b2017-05-30 21:53:05 +0000119LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbObject)
120LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::MSFHeaders)
121LLVM_YAML_DECLARE_MAPPING_TRAITS(msf::SuperBlock)
122LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::StreamBlockList)
123LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbInfoStream)
124LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbDbiStream)
125LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbTpiStream)
Zachary Turnerf3aabb02018-10-26 00:17:31 +0000126LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbPublicsStream)
Zachary Turnerea64a9b2017-05-30 21:53:05 +0000127LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::NamedStreamMapping)
Zachary Turnerea64a9b2017-05-30 21:53:05 +0000128LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbModiStream)
129LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbDbiModuleInfo)
Zachary Turner61e0e272016-06-06 20:37:05 +0000130
131#endif // LLVM_TOOLS_LLVMPDBDUMP_PDBYAML_H