1 //===- InfoStreamBuilder.h - PDB Info Stream Creation -----------*- 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_PDB_RAW_PDBINFOSTREAMBUILDER_H 11 #define LLVM_DEBUGINFO_PDB_RAW_PDBINFOSTREAMBUILDER_H 12 13 #include "llvm/ADT/Optional.h" 14 #include "llvm/Support/Error.h" 15 16 #include "llvm/DebugInfo/PDB/Native/NamedStreamMap.h" 17 #include "llvm/DebugInfo/PDB/Native/PDBFile.h" 18 #include "llvm/DebugInfo/PDB/Native/RawConstants.h" 19 #include "llvm/DebugInfo/PDB/PDBTypes.h" 20 21 namespace llvm { 22 class WritableBinaryStreamRef; 23 24 namespace msf { 25 class MSFBuilder; 26 } 27 namespace pdb { 28 class PDBFile; 29 class NamedStreamMap; 30 31 class InfoStreamBuilder { 32 public: 33 InfoStreamBuilder(msf::MSFBuilder &Msf, NamedStreamMap &NamedStreams); 34 InfoStreamBuilder(const InfoStreamBuilder &) = delete; 35 InfoStreamBuilder &operator=(const InfoStreamBuilder &) = delete; 36 37 void setVersion(PdbRaw_ImplVer V); 38 void setSignature(uint32_t S); 39 void setAge(uint32_t A); 40 void setGuid(codeview::GUID G); 41 void addFeature(PdbRaw_FeatureSig Sig); 42 getAge()43 uint32_t getAge() const { return Age; } getGuid()44 codeview::GUID getGuid() const { return Guid; } getSignature()45 Optional<uint32_t> getSignature() const { return Signature; } 46 47 uint32_t finalize(); 48 49 Error finalizeMsfLayout(); 50 51 Error commit(const msf::MSFLayout &Layout, 52 WritableBinaryStreamRef Buffer) const; 53 54 private: 55 msf::MSFBuilder &Msf; 56 57 std::vector<PdbRaw_FeatureSig> Features; 58 PdbRaw_ImplVer Ver; 59 uint32_t Age; 60 Optional<uint32_t> Signature; 61 codeview::GUID Guid; 62 63 NamedStreamMap &NamedStreams; 64 }; 65 } 66 } 67 68 #endif 69