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