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