1 //===- MinimalSymbolDumper.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_LLVMPDBUTIL_MINIMAL_SYMBOL_DUMPER_H 10 #define LLVM_TOOLS_LLVMPDBUTIL_MINIMAL_SYMBOL_DUMPER_H 11 12 #include "llvm/DebugInfo/CodeView/SymbolVisitorCallbacks.h" 13 14 namespace llvm { 15 namespace codeview { 16 class LazyRandomTypeCollection; 17 } 18 19 namespace pdb { 20 class LinePrinter; 21 class SymbolGroup; 22 23 class MinimalSymbolDumper : public codeview::SymbolVisitorCallbacks { 24 public: 25 MinimalSymbolDumper(LinePrinter &P, bool RecordBytes, 26 codeview::LazyRandomTypeCollection &Ids, 27 codeview::LazyRandomTypeCollection &Types) 28 : P(P), RecordBytes(RecordBytes), Ids(Ids), Types(Types) {} 29 MinimalSymbolDumper(LinePrinter &P, bool RecordBytes, 30 const SymbolGroup &SymGroup, 31 codeview::LazyRandomTypeCollection &Ids, 32 codeview::LazyRandomTypeCollection &Types) 33 : P(P), RecordBytes(RecordBytes), SymGroup(&SymGroup), Ids(Ids), 34 Types(Types) {} 35 36 Error visitSymbolBegin(codeview::CVSymbol &Record) override; 37 Error visitSymbolBegin(codeview::CVSymbol &Record, uint32_t Offset) override; 38 Error visitSymbolEnd(codeview::CVSymbol &Record) override; 39 40 void setSymbolGroup(const SymbolGroup *Group) { SymGroup = Group; } 41 42 #define SYMBOL_RECORD(EnumName, EnumVal, Name) \ 43 virtual Error visitKnownRecord(codeview::CVSymbol &CVR, \ 44 codeview::Name &Record) override; 45 #define SYMBOL_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName) 46 #include "llvm/DebugInfo/CodeView/CodeViewSymbols.def" 47 48 private: 49 std::string typeOrIdIndex(codeview::TypeIndex TI, bool IsType) const; 50 51 std::string typeIndex(codeview::TypeIndex TI) const; 52 std::string idIndex(codeview::TypeIndex TI) const; 53 54 LinePrinter &P; 55 56 /// Dumping certain records requires knowing what machine this is. The 57 /// S_COMPILE3 record will tell us, but if we don't see one, default to X64. 58 codeview::CPUType CompilationCPU = codeview::CPUType::X64; 59 60 bool RecordBytes; 61 const SymbolGroup *SymGroup = nullptr; 62 codeview::LazyRandomTypeCollection &Ids; 63 codeview::LazyRandomTypeCollection &Types; 64 }; 65 } // namespace pdb 66 } // namespace llvm 67 68 #endif 69