#include "ExplainOutputStyle.h"
#include "StreamUtil.h"
#include "llvm-pdbutil.h"
#include "llvm/DebugInfo/CodeView/Formatters.h"
#include "llvm/DebugInfo/CodeView/LazyRandomTypeCollection.h"
#include "llvm/DebugInfo/MSF/MappedBlockStream.h"
#include "llvm/DebugInfo/PDB/Native/DbiStream.h"
#include "llvm/DebugInfo/PDB/Native/FormatUtil.h"
#include "llvm/DebugInfo/PDB/Native/InfoStream.h"
#include "llvm/DebugInfo/PDB/Native/InputFile.h"
#include "llvm/DebugInfo/PDB/Native/NativeSession.h"
#include "llvm/DebugInfo/PDB/Native/PDBFile.h"
#include "llvm/DebugInfo/PDB/Native/RawTypes.h"
#include "llvm/Object/COFF.h"
#include "llvm/Support/BinaryByteStream.h"
#include "llvm/Support/BinaryStreamArray.h"
#include "llvm/Support/Error.h"
usingnamespacellvm;
usingnamespacellvm::codeview;
usingnamespacellvm::msf;
usingnamespacellvm::pdb;
ExplainOutputStyle::ExplainOutputStyle(InputFile &File, uint64_t FileOffset)
: … { … }
Error ExplainOutputStyle::dump() { … }
Error ExplainOutputStyle::explainPdbFile() { … }
Error ExplainOutputStyle::explainBinaryFile() { … }
uint32_t ExplainOutputStyle::pdbBlockIndex() const { … }
uint32_t ExplainOutputStyle::pdbBlockOffset() const { … }
bool ExplainOutputStyle::isPdbSuperBlock() const { … }
bool ExplainOutputStyle::isPdbFpm1() const { … }
bool ExplainOutputStyle::isPdbFpm2() const { … }
bool ExplainOutputStyle::isPdbFpmBlock() const { … }
bool ExplainOutputStyle::isPdbBlockMapBlock() const { … }
bool ExplainOutputStyle::isPdbStreamDirectoryBlock() const { … }
std::optional<uint32_t> ExplainOutputStyle::getPdbBlockStreamIndex() const { … }
bool ExplainOutputStyle::explainPdbBlockStatus() { … }
#define endof(Class, Field) …
void ExplainOutputStyle::explainPdbSuperBlockOffset() { … }
static std::string toBinaryString(uint8_t Byte) { … }
void ExplainOutputStyle::explainPdbFpmBlockOffset() { … }
void ExplainOutputStyle::explainPdbBlockMapOffset() { … }
static uint32_t getOffsetInStream(ArrayRef<support::ulittle32_t> StreamBlocks,
uint64_t FileOffset, uint32_t BlockSize) { … }
void ExplainOutputStyle::explainPdbStreamOffset(uint32_t Stream) { … }
void ExplainOutputStyle::explainPdbStreamDirectoryOffset() { … }
void ExplainOutputStyle::explainPdbUnknownBlock() { … }
template <typename T>
static void printStructField(LinePrinter &P, StringRef Label, T Value) { … }
static void explainDbiHeaderOffset(LinePrinter &P, DbiStream &Dbi,
uint32_t Offset) { … }
static void explainDbiModiSubstreamOffset(LinePrinter &P, DbiStream &Dbi,
uint32_t Offset) { … }
template <typename T>
static void dontExplain(LinePrinter &Printer, T &Stream, uint32_t Offset) { … }
template <typename T, typename SubstreamRangeT>
static void explainSubstreamOffset(LinePrinter &P, uint32_t OffsetInStream,
T &Stream,
const SubstreamRangeT &Substreams) { … }
void ExplainOutputStyle::explainStreamOffset(DbiStream &Dbi,
uint32_t OffsetInStream) { … }
static void explainPdbStreamHeaderOffset(LinePrinter &P, InfoStream &Info,
uint32_t Offset) { … }
void ExplainOutputStyle::explainStreamOffset(InfoStream &Info,
uint32_t OffsetInStream) { … }