Home | History | Annotate | Download | only in CodeView
      1 //===-- SymbolDumper.h - CodeView symbol info dumper ------------*- 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_DEBUGINFO_CODEVIEW_SYMBOLDUMPER_H
     11 #define LLVM_DEBUGINFO_CODEVIEW_SYMBOLDUMPER_H
     12 
     13 #include "llvm/ADT/ArrayRef.h"
     14 #include "llvm/ADT/StringSet.h"
     15 #include "llvm/DebugInfo/CodeView/SymbolDumpDelegate.h"
     16 #include "llvm/DebugInfo/CodeView/SymbolRecord.h"
     17 #include "llvm/DebugInfo/CodeView/TypeIndex.h"
     18 
     19 namespace llvm {
     20 class ScopedPrinter;
     21 
     22 namespace codeview {
     23 class TypeCollection;
     24 
     25 /// Dumper for CodeView symbol streams found in COFF object files and PDB files.
     26 class CVSymbolDumper {
     27 public:
     28   CVSymbolDumper(ScopedPrinter &W, TypeCollection &Types,
     29                  CodeViewContainer Container,
     30                  std::unique_ptr<SymbolDumpDelegate> ObjDelegate,
     31                  bool PrintRecordBytes)
     32       : W(W), Types(Types), Container(Container),
     33         ObjDelegate(std::move(ObjDelegate)),
     34         PrintRecordBytes(PrintRecordBytes) {}
     35 
     36   /// Dumps one type record.  Returns false if there was a type parsing error,
     37   /// and true otherwise.  This should be called in order, since the dumper
     38   /// maintains state about previous records which are necessary for cross
     39   /// type references.
     40   Error dump(CVRecord<SymbolKind> &Record);
     41 
     42   /// Dumps the type records in Data. Returns false if there was a type stream
     43   /// parse error, and true otherwise.
     44   Error dump(const CVSymbolArray &Symbols);
     45 
     46 private:
     47   ScopedPrinter &W;
     48   TypeCollection &Types;
     49   CodeViewContainer Container;
     50   std::unique_ptr<SymbolDumpDelegate> ObjDelegate;
     51 
     52   bool PrintRecordBytes;
     53 };
     54 } // end namespace codeview
     55 } // end namespace llvm
     56 
     57 #endif // LLVM_DEBUGINFO_CODEVIEW_SYMBOLDUMPER_H
     58