blob: a0cabb7a3669b29f6e6c99426d2921e87fcbecb1 [file] [log] [blame]
Zachary Turner7120a472016-06-06 20:37:05 +00001//===- YAMLOutputStyle.cpp ------------------------------------ *- 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#include "YAMLOutputStyle.h"
11
12#include "PdbYaml.h"
13#include "llvm-pdbdump.h"
14
15#include "llvm/DebugInfo/PDB/Raw/PDBFile.h"
16
17using namespace llvm;
18using namespace llvm::pdb;
19
20YAMLOutputStyle::YAMLOutputStyle(PDBFile &File) : File(File), Out(outs()) {}
21
22Error YAMLOutputStyle::dumpFileHeaders() {
23 if (!opts::DumpHeaders)
24 return Error::success();
25
26 yaml::MsfHeaders Headers;
Zachary Turner1dc9fd32016-06-14 20:48:36 +000027 Obj.Headers.SuperBlock.NumBlocks = File.getBlockCount();
28 Obj.Headers.SuperBlock.BlockMapAddr = File.getBlockMapIndex();
29 Obj.Headers.BlockMapOffset = File.getBlockMapOffset();
30 Obj.Headers.SuperBlock.BlockSize = File.getBlockSize();
Zachary Turner7120a472016-06-06 20:37:05 +000031 auto Blocks = File.getDirectoryBlockArray();
Zachary Turner1dc9fd32016-06-14 20:48:36 +000032 Obj.Headers.DirectoryBlocks.assign(Blocks.begin(), Blocks.end());
33 Obj.Headers.NumDirectoryBlocks = File.getNumDirectoryBlocks();
34 Obj.Headers.SuperBlock.NumDirectoryBytes = File.getNumDirectoryBytes();
35 Obj.Headers.NumStreams = File.getNumStreams();
36 Obj.Headers.SuperBlock.Unknown0 = File.getUnknown0();
37 Obj.Headers.SuperBlock.Unknown1 = File.getUnknown1();
38 Obj.Headers.FileSize = File.getFileSize();
Zachary Turner7120a472016-06-06 20:37:05 +000039
40 return Error::success();
41}
42
43Error YAMLOutputStyle::dumpStreamSummary() {
44 if (!opts::DumpStreamSummary)
45 return Error::success();
46
Zachary Turner1dc9fd32016-06-14 20:48:36 +000047 Obj.StreamSizes = File.getStreamSizes();
Zachary Turner7120a472016-06-06 20:37:05 +000048 return Error::success();
49}
50
51Error YAMLOutputStyle::dumpStreamBlocks() {
52 if (!opts::DumpStreamBlocks)
53 return Error::success();
54
Zachary Turner1dc9fd32016-06-14 20:48:36 +000055 auto StreamMap = File.getStreamMap();
56 Obj.StreamMap.emplace();
57 for (auto &Stream : StreamMap) {
58 pdb::yaml::StreamBlockList BlockList;
59 BlockList.Blocks = Stream;
60 Obj.StreamMap->push_back(BlockList);
Zachary Turner25e8b052016-06-06 20:37:17 +000061 }
Zachary Turner25e8b052016-06-06 20:37:17 +000062
Zachary Turner7120a472016-06-06 20:37:05 +000063 return Error::success();
64}
65
66Error YAMLOutputStyle::dumpStreamData() {
67 uint32_t StreamCount = File.getNumStreams();
68 StringRef DumpStreamStr = opts::DumpStreamDataIdx;
69 uint32_t DumpStreamNum;
70 if (DumpStreamStr.getAsInteger(/*Radix=*/0U, DumpStreamNum) ||
71 DumpStreamNum >= StreamCount)
72 return Error::success();
73
74 return Error::success();
75}
76
77Error YAMLOutputStyle::dumpInfoStream() {
78 if (!opts::DumpHeaders)
79 return Error::success();
80 return Error::success();
81}
82
83Error YAMLOutputStyle::dumpNamedStream() {
84 if (opts::DumpStreamDataName.empty())
85 return Error::success();
86
87 return Error::success();
88}
89
90Error YAMLOutputStyle::dumpTpiStream(uint32_t StreamIdx) {
91 return Error::success();
92}
93
94Error YAMLOutputStyle::dumpDbiStream() { return Error::success(); }
95
96Error YAMLOutputStyle::dumpSectionContribs() {
97 if (!opts::DumpSectionContribs)
98 return Error::success();
99
100 return Error::success();
101}
102
103Error YAMLOutputStyle::dumpSectionMap() {
104 if (!opts::DumpSectionMap)
105 return Error::success();
106
107 return Error::success();
108}
109
110Error YAMLOutputStyle::dumpPublicsStream() {
111 if (!opts::DumpPublics)
112 return Error::success();
113
114 return Error::success();
115}
116
117Error YAMLOutputStyle::dumpSectionHeaders() {
118 if (!opts::DumpSectionHeaders)
119 return Error::success();
120
121 return Error::success();
122}
123
124Error YAMLOutputStyle::dumpFpoStream() {
125 if (!opts::DumpFpo)
126 return Error::success();
127
128 return Error::success();
129}
130
131void YAMLOutputStyle::flush() {
132 Out << Obj;
133 outs().flush();
134}