blob: d60ccd7ebbd7eb762bf35947ac49b6bb64c70918 [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 Turner07c229c2016-06-14 18:51:35 +000027 Headers.BlockCount = File.getBlockCount();
28 Headers.BlockMapIndex = File.getBlockMapIndex();
29 Headers.BlockMapOffset = File.getBlockMapOffset();
30 Headers.BlockSize = File.getBlockSize();
Zachary Turner7120a472016-06-06 20:37:05 +000031 auto Blocks = File.getDirectoryBlockArray();
Zachary Turner07c229c2016-06-14 18:51:35 +000032 Headers.DirectoryBlocks.assign(Blocks.begin(), Blocks.end());
33 Headers.NumDirectoryBlocks = File.getNumDirectoryBlocks();
34 Headers.NumDirectoryBytes = File.getNumDirectoryBytes();
35 Headers.NumStreams = File.getNumStreams();
36 Headers.Unknown0 = File.getUnknown0();
37 Headers.Unknown1 = File.getUnknown1();
38
39 Obj.Headers.emplace(Headers);
Zachary Turner7120a472016-06-06 20:37:05 +000040
41 return Error::success();
42}
43
44Error YAMLOutputStyle::dumpStreamSummary() {
45 if (!opts::DumpStreamSummary)
46 return Error::success();
47
Zachary Turner07c229c2016-06-14 18:51:35 +000048 std::vector<yaml::StreamSizeEntry> Sizes;
49 for (uint32_t I = 0; I < File.getNumStreams(); ++I) {
50 yaml::StreamSizeEntry Entry;
51 Entry.Size = File.getStreamByteSize(I);
52 Sizes.push_back(Entry);
53 }
54 Obj.StreamSizes.emplace(Sizes);
Zachary Turner7120a472016-06-06 20:37:05 +000055 return Error::success();
56}
57
58Error YAMLOutputStyle::dumpStreamBlocks() {
59 if (!opts::DumpStreamBlocks)
60 return Error::success();
61
Zachary Turner07c229c2016-06-14 18:51:35 +000062 std::vector<yaml::StreamMapEntry> Blocks;
63 for (uint32_t I = 0; I < File.getNumStreams(); ++I) {
64 yaml::StreamMapEntry Entry;
65 auto BlockList = File.getStreamBlockList(I);
66 Entry.Blocks.assign(BlockList.begin(), BlockList.end());
67 Blocks.push_back(Entry);
Zachary Turner25e8b052016-06-06 20:37:17 +000068 }
Zachary Turner07c229c2016-06-14 18:51:35 +000069 Obj.StreamMap.emplace(Blocks);
Zachary Turner25e8b052016-06-06 20:37:17 +000070
Zachary Turner7120a472016-06-06 20:37:05 +000071 return Error::success();
72}
73
74Error YAMLOutputStyle::dumpStreamData() {
75 uint32_t StreamCount = File.getNumStreams();
76 StringRef DumpStreamStr = opts::DumpStreamDataIdx;
77 uint32_t DumpStreamNum;
78 if (DumpStreamStr.getAsInteger(/*Radix=*/0U, DumpStreamNum) ||
79 DumpStreamNum >= StreamCount)
80 return Error::success();
81
82 return Error::success();
83}
84
85Error YAMLOutputStyle::dumpInfoStream() {
86 if (!opts::DumpHeaders)
87 return Error::success();
88 return Error::success();
89}
90
91Error YAMLOutputStyle::dumpNamedStream() {
92 if (opts::DumpStreamDataName.empty())
93 return Error::success();
94
95 return Error::success();
96}
97
98Error YAMLOutputStyle::dumpTpiStream(uint32_t StreamIdx) {
99 return Error::success();
100}
101
102Error YAMLOutputStyle::dumpDbiStream() { return Error::success(); }
103
104Error YAMLOutputStyle::dumpSectionContribs() {
105 if (!opts::DumpSectionContribs)
106 return Error::success();
107
108 return Error::success();
109}
110
111Error YAMLOutputStyle::dumpSectionMap() {
112 if (!opts::DumpSectionMap)
113 return Error::success();
114
115 return Error::success();
116}
117
118Error YAMLOutputStyle::dumpPublicsStream() {
119 if (!opts::DumpPublics)
120 return Error::success();
121
122 return Error::success();
123}
124
125Error YAMLOutputStyle::dumpSectionHeaders() {
126 if (!opts::DumpSectionHeaders)
127 return Error::success();
128
129 return Error::success();
130}
131
132Error YAMLOutputStyle::dumpFpoStream() {
133 if (!opts::DumpFpo)
134 return Error::success();
135
136 return Error::success();
137}
138
139void YAMLOutputStyle::flush() {
140 Out << Obj;
141 outs().flush();
142}