blob: 2c0b4d8af61d24e8f75a1c1d46361342d7b39e79 [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 Turner3b147642016-10-08 01:12:01 +000016#include "llvm/DebugInfo/CodeView/SymbolRecord.h"
17#include "llvm/DebugInfo/CodeView/TypeRecord.h"
Zachary Turnera3225b02016-07-29 20:56:36 +000018#include "llvm/DebugInfo/MSF/MSFCommon.h"
Adrian McCarthy6b6b8c42017-01-25 22:38:55 +000019#include "llvm/DebugInfo/PDB/Native/PDBFile.h"
20#include "llvm/DebugInfo/PDB/Native/RawConstants.h"
Zachary Turner8848a7a2016-07-06 18:05:57 +000021#include "llvm/DebugInfo/PDB/PDBTypes.h"
Zachary Turnerd4273832017-05-30 21:53:05 +000022#include "llvm/ObjectYAML/CodeViewYAML.h"
Zachary Turner7120a472016-06-06 20:37:05 +000023#include "llvm/Support/Endian.h"
24#include "llvm/Support/YAMLTraits.h"
25
26#include <vector>
27
28namespace llvm {
29namespace pdb {
Zachary Turner7120a472016-06-06 20:37:05 +000030
31namespace yaml {
Zachary Turnerc6d54da2016-09-09 17:46:17 +000032struct SerializationContext;
33
Zachary Turnera3225b02016-07-29 20:56:36 +000034struct MSFHeaders {
Zachary Turnerfaa554b2016-07-15 22:16:56 +000035 msf::SuperBlock SuperBlock;
Zachary Turnerea4e6072017-03-15 22:18:53 +000036 uint32_t NumDirectoryBlocks = 0;
Zachary Turnerfaa554b2016-07-15 22:16:56 +000037 std::vector<uint32_t> DirectoryBlocks;
Zachary Turnerea4e6072017-03-15 22:18:53 +000038 uint32_t NumStreams = 0;
39 uint32_t FileSize = 0;
Zachary Turner7120a472016-06-06 20:37:05 +000040};
41
Zachary Turner1dc9fd32016-06-14 20:48:36 +000042struct StreamBlockList {
Zachary Turnerfaa554b2016-07-15 22:16:56 +000043 std::vector<uint32_t> Blocks;
Zachary Turner25e8b052016-06-06 20:37:17 +000044};
45
Zachary Turner5e534c72016-07-15 22:17:08 +000046struct NamedStreamMapping {
47 StringRef StreamName;
48 uint32_t StreamNumber;
49};
50
Zachary Turner8848a7a2016-07-06 18:05:57 +000051struct PdbInfoStream {
Zachary Turnerea4e6072017-03-15 22:18:53 +000052 PdbRaw_ImplVer Version = PdbImplVC70;
53 uint32_t Signature = 0;
54 uint32_t Age = 1;
Zachary Turner8848a7a2016-07-06 18:05:57 +000055 PDB_UniqueId Guid;
Zachary Turner05d5e612017-03-16 20:19:11 +000056 std::vector<PdbRaw_FeatureSig> Features;
Zachary Turner5e534c72016-07-15 22:17:08 +000057 std::vector<NamedStreamMapping> NamedStreams;
Zachary Turner8848a7a2016-07-06 18:05:57 +000058};
59
Zachary Turner3b147642016-10-08 01:12:01 +000060struct PdbModiStream {
61 uint32_t Signature;
Zachary Turner1e4d3692017-05-30 23:50:44 +000062 std::vector<CodeViewYAML::SymbolRecord> Symbols;
Zachary Turner3b147642016-10-08 01:12:01 +000063};
64
Zachary Turnerd218c262016-07-22 15:46:37 +000065struct PdbDbiModuleInfo {
66 StringRef Obj;
67 StringRef Mod;
68 std::vector<StringRef> SourceFiles;
Zachary Turnerd4273832017-05-30 21:53:05 +000069 Optional<CodeViewYAML::SourceFileInfo> FileLineInfo;
Zachary Turner3b147642016-10-08 01:12:01 +000070 Optional<PdbModiStream> Modi;
Zachary Turnerd218c262016-07-22 15:46:37 +000071};
72
Zachary Turnerdbeaea72016-07-11 21:45:26 +000073struct PdbDbiStream {
Zachary Turnerea4e6072017-03-15 22:18:53 +000074 PdbRaw_DbiVer VerHeader = PdbDbiV70;
75 uint32_t Age = 1;
76 uint16_t BuildNumber = 0;
77 uint32_t PdbDllVersion = 0;
78 uint16_t PdbDllRbld = 0;
79 uint16_t Flags = 1;
80 PDB_Machine MachineType = PDB_Machine::x86;
Zachary Turnerd218c262016-07-22 15:46:37 +000081
82 std::vector<PdbDbiModuleInfo> ModInfos;
Zachary Turnerdbeaea72016-07-11 21:45:26 +000083};
84
Zachary Turnerac5763e2016-08-18 16:49:29 +000085struct PdbTpiStream {
Zachary Turnerea4e6072017-03-15 22:18:53 +000086 PdbRaw_TpiVer Version = PdbTpiV80;
Zachary Turnerd4273832017-05-30 21:53:05 +000087 std::vector<CodeViewYAML::LeafRecord> Records;
Zachary Turnerac5763e2016-08-18 16:49:29 +000088};
89
Zachary Turner7120a472016-06-06 20:37:05 +000090struct PdbObject {
Zachary Turnerc6d54da2016-09-09 17:46:17 +000091 explicit PdbObject(BumpPtrAllocator &Allocator) : Allocator(Allocator) {}
92
Zachary Turnera3225b02016-07-29 20:56:36 +000093 Optional<MSFHeaders> Headers;
Zachary Turnerfaa554b2016-07-15 22:16:56 +000094 Optional<std::vector<uint32_t>> StreamSizes;
Zachary Turner1dc9fd32016-06-14 20:48:36 +000095 Optional<std::vector<StreamBlockList>> StreamMap;
Zachary Turner8848a7a2016-07-06 18:05:57 +000096 Optional<PdbInfoStream> PdbStream;
Zachary Turnerdbeaea72016-07-11 21:45:26 +000097 Optional<PdbDbiStream> DbiStream;
Zachary Turnerac5763e2016-08-18 16:49:29 +000098 Optional<PdbTpiStream> TpiStream;
Zachary Turnerde9ba152016-09-15 18:22:31 +000099 Optional<PdbTpiStream> IpiStream;
Zachary Turnerc6d54da2016-09-09 17:46:17 +0000100
Zachary Turner760ad4d2017-01-20 22:42:09 +0000101 Optional<std::vector<StringRef>> StringTable;
102
Zachary Turnerc6d54da2016-09-09 17:46:17 +0000103 BumpPtrAllocator &Allocator;
Zachary Turner7120a472016-06-06 20:37:05 +0000104};
105}
106}
Zachary Turner25e8b052016-06-06 20:37:17 +0000107}
Zachary Turner7120a472016-06-06 20:37:05 +0000108
Zachary Turnerd4273832017-05-30 21:53:05 +0000109LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbObject)
110LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::MSFHeaders)
111LLVM_YAML_DECLARE_MAPPING_TRAITS(msf::SuperBlock)
112LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::StreamBlockList)
113LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbInfoStream)
114LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbDbiStream)
115LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbTpiStream)
116LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::NamedStreamMapping)
Zachary Turnerd4273832017-05-30 21:53:05 +0000117LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbModiStream)
118LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbDbiModuleInfo)
Zachary Turner7120a472016-06-06 20:37:05 +0000119
120#endif // LLVM_TOOLS_LLVMPDBDUMP_PDBYAML_H