ModuleDebugStream.h revision 320041
1251881Speter//===- ModuleDebugStream.h - PDB Module Info Stream Access ----------------===//
2251881Speter//
3251881Speter//                     The LLVM Compiler Infrastructure
4251881Speter//
5251881Speter// This file is distributed under the University of Illinois Open Source
6251881Speter// License. See LICENSE.TXT for details.
7251881Speter//
8251881Speter//===----------------------------------------------------------------------===//
9251881Speter
10251881Speter#ifndef LLVM_DEBUGINFO_PDB_RAW_MODULEDEBUGSTREAM_H
11251881Speter#define LLVM_DEBUGINFO_PDB_RAW_MODULEDEBUGSTREAM_H
12251881Speter
13251881Speter#include "llvm/ADT/iterator_range.h"
14251881Speter#include "llvm/DebugInfo/CodeView/CVRecord.h"
15251881Speter#include "llvm/DebugInfo/CodeView/DebugChecksumsSubsection.h"
16251881Speter#include "llvm/DebugInfo/CodeView/DebugSubsectionRecord.h"
17251881Speter#include "llvm/DebugInfo/CodeView/SymbolRecord.h"
18251881Speter#include "llvm/DebugInfo/MSF/MappedBlockStream.h"
19251881Speter#include "llvm/Support/BinaryStreamArray.h"
20251881Speter#include "llvm/Support/BinaryStreamRef.h"
21251881Speter#include "llvm/Support/Error.h"
22251881Speter
23251881Speternamespace llvm {
24251881Speternamespace pdb {
25251881Speterclass PDBFile;
26251881Speterclass DbiModuleDescriptor;
27251881Speter
28251881Speterclass ModuleDebugStreamRef {
29251881Speter  typedef codeview::DebugSubsectionArray::Iterator DebugSubsectionIterator;
30251881Speter
31251881Speterpublic:
32262253Speter  ModuleDebugStreamRef(const DbiModuleDescriptor &Module,
33251881Speter                       std::unique_ptr<msf::MappedBlockStream> Stream);
34251881Speter  ModuleDebugStreamRef(ModuleDebugStreamRef &&Other) = default;
35251881Speter  ~ModuleDebugStreamRef();
36251881Speter
37251881Speter  Error reload();
38251881Speter
39251881Speter  uint32_t signature() const { return Signature; }
40251881Speter
41251881Speter  iterator_range<codeview::CVSymbolArray::Iterator>
42251881Speter  symbols(bool *HadError) const;
43251881Speter
44251881Speter  const codeview::CVSymbolArray &getSymbolArray() const {
45251881Speter    return SymbolsSubstream;
46251881Speter  }
47251881Speter
48251881Speter  ModuleDebugStreamRef &operator=(ModuleDebugStreamRef &&Other) = default;
49251881Speter
50251881Speter  llvm::iterator_range<DebugSubsectionIterator> subsections() const;
51251881Speter
52251881Speter  bool hasDebugSubsections() const;
53251881Speter
54251881Speter  Error commit();
55251881Speter
56251881Speter  Expected<codeview::DebugChecksumsSubsectionRef>
57251881Speter  findChecksumsSubsection() const;
58251881Speter
59251881Speterprivate:
60251881Speter  const DbiModuleDescriptor &Mod;
61251881Speter
62251881Speter  uint32_t Signature;
63251881Speter
64251881Speter  std::shared_ptr<msf::MappedBlockStream> Stream;
65251881Speter
66251881Speter  codeview::CVSymbolArray SymbolsSubstream;
67251881Speter  BinaryStreamRef C11LinesSubstream;
68251881Speter  BinaryStreamRef C13LinesSubstream;
69251881Speter  BinaryStreamRef GlobalRefsSubstream;
70251881Speter
71251881Speter  codeview::DebugSubsectionArray Subsections;
72251881Speter};
73251881Speter}
74251881Speter}
75251881Speter
76251881Speter#endif
77251881Speter