blob: 9a497accb812d4009a995f72fb3bf985f8320b68 [file] [log] [blame]
Zachary Turner0ebcf2f2018-03-29 16:28:20 +00001//===- ExplainOutputStyle.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_EXPLAINOUTPUTSTYLE_H
11#define LLVM_TOOLS_LLVMPDBDUMP_EXPLAINOUTPUTSTYLE_H
12
13#include "LinePrinter.h"
14#include "OutputStyle.h"
15
16#include <string>
17
18namespace llvm {
19
20namespace pdb {
21
Zachary Turner21ff13f2018-03-30 17:16:50 +000022class DbiStream;
Zachary Turner06e4df32018-04-04 17:29:09 +000023class InfoStream;
24class InputFile;
Zachary Turner0ebcf2f2018-03-29 16:28:20 +000025
26class ExplainOutputStyle : public OutputStyle {
27
28public:
Zachary Turner06e4df32018-04-04 17:29:09 +000029 ExplainOutputStyle(InputFile &File, uint64_t FileOffset);
Zachary Turner0ebcf2f2018-03-29 16:28:20 +000030
31 Error dump() override;
32
33private:
Zachary Turner06e4df32018-04-04 17:29:09 +000034 Error explainPdbFile();
35 Error explainBinaryFile();
Zachary Turner0ebcf2f2018-03-29 16:28:20 +000036
Zachary Turner06e4df32018-04-04 17:29:09 +000037 bool explainPdbBlockStatus();
Zachary Turner0ebcf2f2018-03-29 16:28:20 +000038
Zachary Turner06e4df32018-04-04 17:29:09 +000039 bool isPdbFpm1() const;
40 bool isPdbFpm2() const;
Zachary Turner0ebcf2f2018-03-29 16:28:20 +000041
Zachary Turner06e4df32018-04-04 17:29:09 +000042 bool isPdbSuperBlock() const;
43 bool isPdbFpmBlock() const;
44 bool isPdbBlockMapBlock() const;
45 bool isPdbStreamDirectoryBlock() const;
46 Optional<uint32_t> getPdbBlockStreamIndex() const;
Zachary Turner0ebcf2f2018-03-29 16:28:20 +000047
Zachary Turner06e4df32018-04-04 17:29:09 +000048 void explainPdbSuperBlockOffset();
49 void explainPdbFpmBlockOffset();
50 void explainPdbBlockMapOffset();
51 void explainPdbStreamDirectoryOffset();
52 void explainPdbStreamOffset(uint32_t Stream);
53 void explainPdbUnknownBlock();
Zachary Turner21ff13f2018-03-30 17:16:50 +000054
Zachary Turner06e4df32018-04-04 17:29:09 +000055 void explainStreamOffset(DbiStream &Stream, uint32_t OffsetInStream);
56 void explainStreamOffset(InfoStream &Stream, uint32_t OffsetInStream);
57
58 uint32_t pdbBlockIndex() const;
59 uint32_t pdbBlockOffset() const;
60
61 InputFile &File;
Zachary Turner0ebcf2f2018-03-29 16:28:20 +000062 const uint64_t FileOffset;
Zachary Turner0ebcf2f2018-03-29 16:28:20 +000063 LinePrinter P;
64};
65} // namespace pdb
66} // namespace llvm
67
68#endif