10b57cec5SDimitry Andric //===- ExplainOutputStyle.h ----------------------------------- *- C++ --*-===// 20b57cec5SDimitry Andric // 30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric // 70b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric 90b57cec5SDimitry Andric #ifndef LLVM_TOOLS_LLVMPDBDUMP_EXPLAINOUTPUTSTYLE_H 100b57cec5SDimitry Andric #define LLVM_TOOLS_LLVMPDBDUMP_EXPLAINOUTPUTSTYLE_H 110b57cec5SDimitry Andric 120b57cec5SDimitry Andric #include "OutputStyle.h" 130b57cec5SDimitry Andric 1481ad6265SDimitry Andric #include "llvm/DebugInfo/PDB/Native/LinePrinter.h" 1581ad6265SDimitry Andric 160b57cec5SDimitry Andric namespace llvm { 170b57cec5SDimitry Andric 180b57cec5SDimitry Andric namespace pdb { 190b57cec5SDimitry Andric 200b57cec5SDimitry Andric class DbiStream; 210b57cec5SDimitry Andric class InfoStream; 220b57cec5SDimitry Andric class InputFile; 230b57cec5SDimitry Andric 240b57cec5SDimitry Andric class ExplainOutputStyle : public OutputStyle { 250b57cec5SDimitry Andric 260b57cec5SDimitry Andric public: 270b57cec5SDimitry Andric ExplainOutputStyle(InputFile &File, uint64_t FileOffset); 280b57cec5SDimitry Andric 290b57cec5SDimitry Andric Error dump() override; 300b57cec5SDimitry Andric 310b57cec5SDimitry Andric private: 320b57cec5SDimitry Andric Error explainPdbFile(); 330b57cec5SDimitry Andric Error explainBinaryFile(); 340b57cec5SDimitry Andric 350b57cec5SDimitry Andric bool explainPdbBlockStatus(); 360b57cec5SDimitry Andric 370b57cec5SDimitry Andric bool isPdbFpm1() const; 380b57cec5SDimitry Andric bool isPdbFpm2() const; 390b57cec5SDimitry Andric 400b57cec5SDimitry Andric bool isPdbSuperBlock() const; 410b57cec5SDimitry Andric bool isPdbFpmBlock() const; 420b57cec5SDimitry Andric bool isPdbBlockMapBlock() const; 430b57cec5SDimitry Andric bool isPdbStreamDirectoryBlock() const; 44*bdd1243dSDimitry Andric std::optional<uint32_t> getPdbBlockStreamIndex() const; 450b57cec5SDimitry Andric 460b57cec5SDimitry Andric void explainPdbSuperBlockOffset(); 470b57cec5SDimitry Andric void explainPdbFpmBlockOffset(); 480b57cec5SDimitry Andric void explainPdbBlockMapOffset(); 490b57cec5SDimitry Andric void explainPdbStreamDirectoryOffset(); 500b57cec5SDimitry Andric void explainPdbStreamOffset(uint32_t Stream); 510b57cec5SDimitry Andric void explainPdbUnknownBlock(); 520b57cec5SDimitry Andric 530b57cec5SDimitry Andric void explainStreamOffset(DbiStream &Stream, uint32_t OffsetInStream); 540b57cec5SDimitry Andric void explainStreamOffset(InfoStream &Stream, uint32_t OffsetInStream); 550b57cec5SDimitry Andric 560b57cec5SDimitry Andric uint32_t pdbBlockIndex() const; 570b57cec5SDimitry Andric uint32_t pdbBlockOffset() const; 580b57cec5SDimitry Andric 590b57cec5SDimitry Andric InputFile &File; 600b57cec5SDimitry Andric const uint64_t FileOffset; 610b57cec5SDimitry Andric LinePrinter P; 620b57cec5SDimitry Andric }; 630b57cec5SDimitry Andric } // namespace pdb 640b57cec5SDimitry Andric } // namespace llvm 650b57cec5SDimitry Andric 660b57cec5SDimitry Andric #endif 67