| //===- MinimalSymbolDumper.h ---------------------------------- *- C++ --*-===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_TOOLS_LLVMPDBUTIL_MINIMAL_SYMBOL_DUMPER_H |
| #define LLVM_TOOLS_LLVMPDBUTIL_MINIMAL_SYMBOL_DUMPER_H |
| |
| #include "llvm/DebugInfo/CodeView/SymbolVisitorCallbacks.h" |
| |
| namespace llvm { |
| namespace codeview { |
| class LazyRandomTypeCollection; |
| } |
| |
| namespace pdb { |
| class LinePrinter; |
| class SymbolGroup; |
| |
| class MinimalSymbolDumper : public codeview::SymbolVisitorCallbacks { |
| public: |
| MinimalSymbolDumper(LinePrinter &P, bool RecordBytes, |
| codeview::LazyRandomTypeCollection &Ids, |
| codeview::LazyRandomTypeCollection &Types) |
| : P(P), RecordBytes(RecordBytes), Ids(Ids), Types(Types) {} |
| MinimalSymbolDumper(LinePrinter &P, bool RecordBytes, |
| const SymbolGroup &SymGroup, |
| codeview::LazyRandomTypeCollection &Ids, |
| codeview::LazyRandomTypeCollection &Types) |
| : P(P), RecordBytes(RecordBytes), SymGroup(&SymGroup), Ids(Ids), |
| Types(Types) {} |
| |
| Error visitSymbolBegin(codeview::CVSymbol &Record) override; |
| Error visitSymbolBegin(codeview::CVSymbol &Record, uint32_t Offset) override; |
| Error visitSymbolEnd(codeview::CVSymbol &Record) override; |
| |
| void setSymbolGroup(const SymbolGroup *Group) { SymGroup = Group; } |
| |
| #define SYMBOL_RECORD(EnumName, EnumVal, Name) \ |
| virtual Error visitKnownRecord(codeview::CVSymbol &CVR, \ |
| codeview::Name &Record) override; |
| #define SYMBOL_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName) |
| #include "llvm/DebugInfo/CodeView/CodeViewSymbols.def" |
| |
| private: |
| std::string typeOrIdIndex(codeview::TypeIndex TI, bool IsType) const; |
| |
| std::string typeIndex(codeview::TypeIndex TI) const; |
| std::string idIndex(codeview::TypeIndex TI) const; |
| |
| LinePrinter &P; |
| |
| /// Dumping certain records requires knowing what machine this is. The |
| /// S_COMPILE3 record will tell us, but if we don't see one, default to X64. |
| codeview::CPUType CompilationCPU = codeview::CPUType::X64; |
| |
| bool RecordBytes; |
| const SymbolGroup *SymGroup = nullptr; |
| codeview::LazyRandomTypeCollection &Ids; |
| codeview::LazyRandomTypeCollection &Types; |
| }; |
| } // namespace pdb |
| } // namespace llvm |
| |
| #endif |