1 //===- PDBFileBuilder.h - PDB File 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_PDBFILEBUILDER_H 11 #define LLVM_DEBUGINFO_PDB_RAW_PDBFILEBUILDER_H 12 13 #include "llvm/ADT/ArrayRef.h" 14 #include "llvm/ADT/BitVector.h" 15 #include "llvm/ADT/Optional.h" 16 #include "llvm/DebugInfo/PDB/Native/NamedStreamMap.h" 17 #include "llvm/DebugInfo/PDB/Native/PDBFile.h" 18 #include "llvm/DebugInfo/PDB/Native/PDBStringTableBuilder.h" 19 #include "llvm/DebugInfo/PDB/Native/RawConstants.h" 20 #include "llvm/Support/Allocator.h" 21 #include "llvm/Support/Endian.h" 22 #include "llvm/Support/Error.h" 23 24 #include <memory> 25 #include <vector> 26 27 namespace llvm { 28 namespace msf { 29 class MSFBuilder; 30 } 31 namespace pdb { 32 class DbiStreamBuilder; 33 class InfoStreamBuilder; 34 class GSIStreamBuilder; 35 class TpiStreamBuilder; 36 37 class PDBFileBuilder { 38 public: 39 explicit PDBFileBuilder(BumpPtrAllocator &Allocator); 40 ~PDBFileBuilder(); 41 PDBFileBuilder(const PDBFileBuilder &) = delete; 42 PDBFileBuilder &operator=(const PDBFileBuilder &) = delete; 43 44 Error initialize(uint32_t BlockSize); 45 46 msf::MSFBuilder &getMsfBuilder(); 47 InfoStreamBuilder &getInfoBuilder(); 48 DbiStreamBuilder &getDbiBuilder(); 49 TpiStreamBuilder &getTpiBuilder(); 50 TpiStreamBuilder &getIpiBuilder(); 51 PDBStringTableBuilder &getStringTableBuilder(); 52 GSIStreamBuilder &getGsiBuilder(); 53 54 Error commit(StringRef Filename); 55 56 Expected<uint32_t> getNamedStreamIndex(StringRef Name) const; 57 Error addNamedStream(StringRef Name, uint32_t Size); 58 59 private: 60 Expected<msf::MSFLayout> finalizeMsfLayout(); 61 62 void commitFpm(WritableBinaryStream &MsfBuffer, const msf::MSFLayout &Layout); 63 64 BumpPtrAllocator &Allocator; 65 66 std::unique_ptr<msf::MSFBuilder> Msf; 67 std::unique_ptr<InfoStreamBuilder> Info; 68 std::unique_ptr<DbiStreamBuilder> Dbi; 69 std::unique_ptr<GSIStreamBuilder> Gsi; 70 std::unique_ptr<TpiStreamBuilder> Tpi; 71 std::unique_ptr<TpiStreamBuilder> Ipi; 72 73 PDBStringTableBuilder Strings; 74 NamedStreamMap NamedStreams; 75 }; 76 } 77 } 78 79 #endif 80