1 //===- ExplainOutputStyle.h ----------------------------------- *- C++ --*-===// 2 // 3 // 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 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLVM_TOOLS_LLVMPDBDUMP_EXPLAINOUTPUTSTYLE_H 10 #define LLVM_TOOLS_LLVMPDBDUMP_EXPLAINOUTPUTSTYLE_H 11 12 #include "OutputStyle.h" 13 14 #include "llvm/DebugInfo/PDB/Native/LinePrinter.h" 15 16 #include <string> 17 18 namespace llvm { 19 20 namespace pdb { 21 22 class DbiStream; 23 class InfoStream; 24 class InputFile; 25 26 class ExplainOutputStyle : public OutputStyle { 27 28 public: 29 ExplainOutputStyle(InputFile &File, uint64_t FileOffset); 30 31 Error dump() override; 32 33 private: 34 Error explainPdbFile(); 35 Error explainBinaryFile(); 36 37 bool explainPdbBlockStatus(); 38 39 bool isPdbFpm1() const; 40 bool isPdbFpm2() const; 41 42 bool isPdbSuperBlock() const; 43 bool isPdbFpmBlock() const; 44 bool isPdbBlockMapBlock() const; 45 bool isPdbStreamDirectoryBlock() const; 46 std::optional<uint32_t> getPdbBlockStreamIndex() const; 47 48 void explainPdbSuperBlockOffset(); 49 void explainPdbFpmBlockOffset(); 50 void explainPdbBlockMapOffset(); 51 void explainPdbStreamDirectoryOffset(); 52 void explainPdbStreamOffset(uint32_t Stream); 53 void explainPdbUnknownBlock(); 54 55 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; 62 const uint64_t FileOffset; 63 LinePrinter P; 64 }; 65 } // namespace pdb 66 } // namespace llvm 67 68 #endif 69