1320013Sdim//===- MinimalSymbolDumper.h ---------------------------------- *- C++ --*-===// 2320013Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6320013Sdim// 7320013Sdim//===----------------------------------------------------------------------===// 8320013Sdim 9320013Sdim#ifndef LLVM_TOOLS_LLVMPDBUTIL_MINIMAL_SYMBOL_DUMPER_H 10320013Sdim#define LLVM_TOOLS_LLVMPDBUTIL_MINIMAL_SYMBOL_DUMPER_H 11320013Sdim 12320013Sdim#include "llvm/DebugInfo/CodeView/SymbolVisitorCallbacks.h" 13320013Sdim 14320013Sdimnamespace llvm { 15320013Sdimnamespace codeview { 16320013Sdimclass LazyRandomTypeCollection; 17320013Sdim} 18320013Sdim 19320013Sdimnamespace pdb { 20320013Sdimclass LinePrinter; 21341825Sdimclass SymbolGroup; 22320013Sdim 23320013Sdimclass MinimalSymbolDumper : public codeview::SymbolVisitorCallbacks { 24320013Sdimpublic: 25320013Sdim MinimalSymbolDumper(LinePrinter &P, bool RecordBytes, 26327952Sdim codeview::LazyRandomTypeCollection &Ids, 27320013Sdim codeview::LazyRandomTypeCollection &Types) 28327952Sdim : P(P), RecordBytes(RecordBytes), Ids(Ids), Types(Types) {} 29341825Sdim MinimalSymbolDumper(LinePrinter &P, bool RecordBytes, 30341825Sdim const SymbolGroup &SymGroup, 31341825Sdim codeview::LazyRandomTypeCollection &Ids, 32341825Sdim codeview::LazyRandomTypeCollection &Types) 33341825Sdim : P(P), RecordBytes(RecordBytes), SymGroup(&SymGroup), Ids(Ids), 34341825Sdim Types(Types) {} 35320013Sdim 36320013Sdim Error visitSymbolBegin(codeview::CVSymbol &Record) override; 37320572Sdim Error visitSymbolBegin(codeview::CVSymbol &Record, uint32_t Offset) override; 38320013Sdim Error visitSymbolEnd(codeview::CVSymbol &Record) override; 39320013Sdim 40341825Sdim void setSymbolGroup(const SymbolGroup *Group) { SymGroup = Group; } 41341825Sdim 42320013Sdim#define SYMBOL_RECORD(EnumName, EnumVal, Name) \ 43320013Sdim virtual Error visitKnownRecord(codeview::CVSymbol &CVR, \ 44320013Sdim codeview::Name &Record) override; 45320013Sdim#define SYMBOL_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName) 46320013Sdim#include "llvm/DebugInfo/CodeView/CodeViewSymbols.def" 47320013Sdim 48320013Sdimprivate: 49327952Sdim std::string typeOrIdIndex(codeview::TypeIndex TI, bool IsType) const; 50327952Sdim 51320013Sdim std::string typeIndex(codeview::TypeIndex TI) const; 52327952Sdim std::string idIndex(codeview::TypeIndex TI) const; 53320013Sdim 54320013Sdim LinePrinter &P; 55344779Sdim 56344779Sdim /// Dumping certain records requires knowing what machine this is. The 57344779Sdim /// S_COMPILE3 record will tell us, but if we don't see one, default to X64. 58344779Sdim codeview::CPUType CompilationCPU = codeview::CPUType::X64; 59344779Sdim 60327952Sdim bool RecordBytes; 61341825Sdim const SymbolGroup *SymGroup = nullptr; 62327952Sdim codeview::LazyRandomTypeCollection &Ids; 63320013Sdim codeview::LazyRandomTypeCollection &Types; 64320013Sdim}; 65320013Sdim} // namespace pdb 66320013Sdim} // namespace llvm 67320013Sdim 68344779Sdim#endif 69