blob: ed6346c2c4db0230dd2920b3b0295e2bb6155d41 [file] [log] [blame]
Zachary Turner7120a472016-06-06 20:37:05 +00001//===- PdbYAML.h ---------------------------------------------- *- C++ --*-===//
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Zachary Turner7120a472016-06-06 20:37:05 +00006//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLVM_TOOLS_LLVMPDBDUMP_PDBYAML_H
10#define LLVM_TOOLS_LLVMPDBDUMP_PDBYAML_H
11
12#include "OutputStyle.h"
13
14#include "llvm/ADT/Optional.h"
Zachary Turner3b147642016-10-08 01:12:01 +000015#include "llvm/DebugInfo/CodeView/SymbolRecord.h"
16#include "llvm/DebugInfo/CodeView/TypeRecord.h"
Zachary Turnera3225b02016-07-29 20:56:36 +000017#include "llvm/DebugInfo/MSF/MSFCommon.h"
Adrian McCarthy6b6b8c42017-01-25 22:38:55 +000018#include "llvm/DebugInfo/PDB/Native/PDBFile.h"
19#include "llvm/DebugInfo/PDB/Native/RawConstants.h"
Zachary Turner8848a7a2016-07-06 18:05:57 +000020#include "llvm/DebugInfo/PDB/PDBTypes.h"
Zachary Turner1b88f4f2017-05-31 04:17:13 +000021#include "llvm/ObjectYAML/CodeViewYAMLDebugSections.h"
22#include "llvm/ObjectYAML/CodeViewYAMLSymbols.h"
23#include "llvm/ObjectYAML/CodeViewYAMLTypes.h"
Zachary Turner7120a472016-06-06 20:37:05 +000024#include "llvm/Support/Endian.h"
25#include "llvm/Support/YAMLTraits.h"
26
27#include <vector>
28
29namespace llvm {
Zachary Turner92dcdda2017-06-02 19:49:14 +000030namespace codeview {
31class DebugStringTableSubsection;
32}
Zachary Turner7120a472016-06-06 20:37:05 +000033namespace pdb {
Zachary Turner7120a472016-06-06 20:37:05 +000034
35namespace yaml {
Zachary Turnerc6d54da2016-09-09 17:46:17 +000036struct SerializationContext;
37
Zachary Turnera3225b02016-07-29 20:56:36 +000038struct MSFHeaders {
Zachary Turnerfaa554b2016-07-15 22:16:56 +000039 msf::SuperBlock SuperBlock;
Zachary Turnerea4e6072017-03-15 22:18:53 +000040 uint32_t NumDirectoryBlocks = 0;
Zachary Turnerfaa554b2016-07-15 22:16:56 +000041 std::vector<uint32_t> DirectoryBlocks;
Zachary Turnerea4e6072017-03-15 22:18:53 +000042 uint32_t NumStreams = 0;
43 uint32_t FileSize = 0;
Zachary Turner7120a472016-06-06 20:37:05 +000044};
45
Zachary Turner1dc9fd32016-06-14 20:48:36 +000046struct StreamBlockList {
Zachary Turnerfaa554b2016-07-15 22:16:56 +000047 std::vector<uint32_t> Blocks;
Zachary Turner25e8b052016-06-06 20:37:17 +000048};
49
Zachary Turner5e534c72016-07-15 22:17:08 +000050struct NamedStreamMapping {
51 StringRef StreamName;
52 uint32_t StreamNumber;
53};
54
Zachary Turner8848a7a2016-07-06 18:05:57 +000055struct PdbInfoStream {
Zachary Turnerea4e6072017-03-15 22:18:53 +000056 PdbRaw_ImplVer Version = PdbImplVC70;
57 uint32_t Signature = 0;
58 uint32_t Age = 1;
Reid Kleckner67653ee2017-07-17 23:59:44 +000059 codeview::GUID Guid;
Zachary Turner05d5e612017-03-16 20:19:11 +000060 std::vector<PdbRaw_FeatureSig> Features;
Zachary Turner5e534c72016-07-15 22:17:08 +000061 std::vector<NamedStreamMapping> NamedStreams;
Zachary Turner8848a7a2016-07-06 18:05:57 +000062};
63
Zachary Turner3b147642016-10-08 01:12:01 +000064struct PdbModiStream {
65 uint32_t Signature;
Zachary Turner1e4d3692017-05-30 23:50:44 +000066 std::vector<CodeViewYAML::SymbolRecord> Symbols;
Zachary Turner3b147642016-10-08 01:12:01 +000067};
68
Zachary Turnerd218c262016-07-22 15:46:37 +000069struct PdbDbiModuleInfo {
70 StringRef Obj;
71 StringRef Mod;
72 std::vector<StringRef> SourceFiles;
Zachary Turner92dcdda2017-06-02 19:49:14 +000073 std::vector<CodeViewYAML::YAMLDebugSubsection> Subsections;
Zachary Turner3b147642016-10-08 01:12:01 +000074 Optional<PdbModiStream> Modi;
Zachary Turnerd218c262016-07-22 15:46:37 +000075};
76
Zachary Turnerdbeaea72016-07-11 21:45:26 +000077struct PdbDbiStream {
Zachary Turnerea4e6072017-03-15 22:18:53 +000078 PdbRaw_DbiVer VerHeader = PdbDbiV70;
79 uint32_t Age = 1;
80 uint16_t BuildNumber = 0;
81 uint32_t PdbDllVersion = 0;
82 uint16_t PdbDllRbld = 0;
83 uint16_t Flags = 1;
84 PDB_Machine MachineType = PDB_Machine::x86;
Zachary Turnerd218c262016-07-22 15:46:37 +000085
86 std::vector<PdbDbiModuleInfo> ModInfos;
Zachary Turnerdbeaea72016-07-11 21:45:26 +000087};
88
Zachary Turnerac5763e2016-08-18 16:49:29 +000089struct PdbTpiStream {
Zachary Turnerea4e6072017-03-15 22:18:53 +000090 PdbRaw_TpiVer Version = PdbTpiV80;
Zachary Turnerd4273832017-05-30 21:53:05 +000091 std::vector<CodeViewYAML::LeafRecord> Records;
Zachary Turnerac5763e2016-08-18 16:49:29 +000092};
93
Zachary Turnered2597e2018-10-26 00:17:31 +000094struct PdbPublicsStream {
95 std::vector<CodeViewYAML::SymbolRecord> PubSyms;
96};
97
Zachary Turner7120a472016-06-06 20:37:05 +000098struct PdbObject {
Zachary Turnerc6d54da2016-09-09 17:46:17 +000099 explicit PdbObject(BumpPtrAllocator &Allocator) : Allocator(Allocator) {}
100
Zachary Turnera3225b02016-07-29 20:56:36 +0000101 Optional<MSFHeaders> Headers;
Zachary Turnerfaa554b2016-07-15 22:16:56 +0000102 Optional<std::vector<uint32_t>> StreamSizes;
Zachary Turner1dc9fd32016-06-14 20:48:36 +0000103 Optional<std::vector<StreamBlockList>> StreamMap;
Zachary Turner8848a7a2016-07-06 18:05:57 +0000104 Optional<PdbInfoStream> PdbStream;
Zachary Turnerdbeaea72016-07-11 21:45:26 +0000105 Optional<PdbDbiStream> DbiStream;
Zachary Turnerac5763e2016-08-18 16:49:29 +0000106 Optional<PdbTpiStream> TpiStream;
Zachary Turnerde9ba152016-09-15 18:22:31 +0000107 Optional<PdbTpiStream> IpiStream;
Zachary Turnered2597e2018-10-26 00:17:31 +0000108 Optional<PdbPublicsStream> PublicsStream;
Zachary Turnerc6d54da2016-09-09 17:46:17 +0000109
Zachary Turner760ad4d2017-01-20 22:42:09 +0000110 Optional<std::vector<StringRef>> StringTable;
111
Zachary Turnerc6d54da2016-09-09 17:46:17 +0000112 BumpPtrAllocator &Allocator;
Zachary Turner7120a472016-06-06 20:37:05 +0000113};
114}
115}
Zachary Turner25e8b052016-06-06 20:37:17 +0000116}
Zachary Turner7120a472016-06-06 20:37:05 +0000117
Zachary Turnerd4273832017-05-30 21:53:05 +0000118LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbObject)
119LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::MSFHeaders)
120LLVM_YAML_DECLARE_MAPPING_TRAITS(msf::SuperBlock)
121LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::StreamBlockList)
122LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbInfoStream)
123LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbDbiStream)
124LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbTpiStream)
Zachary Turnered2597e2018-10-26 00:17:31 +0000125LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbPublicsStream)
Zachary Turnerd4273832017-05-30 21:53:05 +0000126LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::NamedStreamMapping)
Zachary Turnerd4273832017-05-30 21:53:05 +0000127LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbModiStream)
128LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbDbiModuleInfo)
Zachary Turner7120a472016-06-06 20:37:05 +0000129
130#endif // LLVM_TOOLS_LLVMPDBDUMP_PDBYAML_H