]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/llvm-pdbutil/MinimalSymbolDumper.h
Merge libcxxrt master f96846efbfd508f66d91fcbbef5dd808947c7f6d.
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / llvm-pdbutil / MinimalSymbolDumper.h
1 //===- MinimalSymbolDumper.h ---------------------------------- *- C++ --*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef LLVM_TOOLS_LLVMPDBUTIL_MINIMAL_SYMBOL_DUMPER_H
11 #define LLVM_TOOLS_LLVMPDBUTIL_MINIMAL_SYMBOL_DUMPER_H
12
13 #include "llvm/DebugInfo/CodeView/SymbolVisitorCallbacks.h"
14
15 namespace llvm {
16 namespace codeview {
17 class LazyRandomTypeCollection;
18 }
19
20 namespace pdb {
21 class LinePrinter;
22 class SymbolGroup;
23
24 class MinimalSymbolDumper : public codeview::SymbolVisitorCallbacks {
25 public:
26   MinimalSymbolDumper(LinePrinter &P, bool RecordBytes,
27                       codeview::LazyRandomTypeCollection &Ids,
28                       codeview::LazyRandomTypeCollection &Types)
29       : P(P), RecordBytes(RecordBytes), Ids(Ids), Types(Types) {}
30   MinimalSymbolDumper(LinePrinter &P, bool RecordBytes,
31                       const SymbolGroup &SymGroup,
32                       codeview::LazyRandomTypeCollection &Ids,
33                       codeview::LazyRandomTypeCollection &Types)
34       : P(P), RecordBytes(RecordBytes), SymGroup(&SymGroup), Ids(Ids),
35         Types(Types) {}
36
37   Error visitSymbolBegin(codeview::CVSymbol &Record) override;
38   Error visitSymbolBegin(codeview::CVSymbol &Record, uint32_t Offset) override;
39   Error visitSymbolEnd(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
49 private:
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   LinePrinter &P;
56
57   /// Dumping certain records requires knowing what machine this is. The
58   /// S_COMPILE3 record will tell us, but if we don't see one, default to X64.
59   codeview::CPUType CompilationCPU = codeview::CPUType::X64;
60
61   bool RecordBytes;
62   const SymbolGroup *SymGroup = nullptr;
63   codeview::LazyRandomTypeCollection &Ids;
64   codeview::LazyRandomTypeCollection &Types;
65 };
66 } // namespace pdb
67 } // namespace llvm
68
69 #endif