1 //===- MinimalTypeDumper.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_TYPE_DUMPER_H
10 #define LLVM_TOOLS_LLVMPDBUTIL_MINIMAL_TYPE_DUMPER_H
11 
12 #include "llvm/DebugInfo/CodeView/TypeVisitorCallbacks.h"
13 #include "llvm/Support/BinaryStreamArray.h"
14 
15 namespace llvm {
16 namespace codeview {
17 class LazyRandomTypeCollection;
18 }
19 
20 namespace pdb {
21 class LinePrinter;
22 class TpiStream;
23 class TypeReferenceTracker;
24 
25 class MinimalTypeDumpVisitor : public codeview::TypeVisitorCallbacks {
26 public:
MinimalTypeDumpVisitor(LinePrinter & P,uint32_t Width,bool RecordBytes,bool Hashes,codeview::LazyRandomTypeCollection & Types,TypeReferenceTracker * RefTracker,uint32_t NumHashBuckets,FixedStreamArray<support::ulittle32_t> HashValues,pdb::TpiStream * Stream)27   MinimalTypeDumpVisitor(LinePrinter &P, uint32_t Width, bool RecordBytes,
28                          bool Hashes, codeview::LazyRandomTypeCollection &Types,
29                          TypeReferenceTracker *RefTracker,
30                          uint32_t NumHashBuckets,
31                          FixedStreamArray<support::ulittle32_t> HashValues,
32                          pdb::TpiStream *Stream)
33       : P(P), Width(Width), RecordBytes(RecordBytes), Hashes(Hashes),
34         Types(Types), RefTracker(RefTracker), NumHashBuckets(NumHashBuckets),
35         HashValues(HashValues), Stream(Stream) {}
36 
37   Error visitTypeBegin(codeview::CVType &Record,
38                        codeview::TypeIndex Index) override;
39   Error visitTypeEnd(codeview::CVType &Record) override;
40   Error visitMemberBegin(codeview::CVMemberRecord &Record) override;
41   Error visitMemberEnd(codeview::CVMemberRecord &Record) override;
42 
43 #define TYPE_RECORD(EnumName, EnumVal, Name)                                   \
44   Error visitKnownRecord(codeview::CVType &CVR,                                \
45                          codeview::Name##Record &Record) override;
46 #define MEMBER_RECORD(EnumName, EnumVal, Name)                                 \
47   Error visitKnownMember(codeview::CVMemberRecord &CVR,                        \
48                          codeview::Name##Record &Record) override;
49 #define TYPE_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName)
50 #define MEMBER_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName)
51 #include "llvm/DebugInfo/CodeView/CodeViewTypes.def"
52 
53 private:
54   StringRef getTypeName(codeview::TypeIndex TI) const;
55 
56   LinePrinter &P;
57   uint32_t Width;
58   bool RecordBytes = false;
59   bool Hashes = false;
60   codeview::LazyRandomTypeCollection &Types;
61   pdb::TypeReferenceTracker *RefTracker = nullptr;
62   uint32_t NumHashBuckets;
63   codeview::TypeIndex CurrentTypeIndex;
64   FixedStreamArray<support::ulittle32_t> HashValues;
65   pdb::TpiStream *Stream = nullptr;
66 };
67 } // namespace pdb
68 } // namespace llvm
69 
70 #endif
71