1 //===- PDBFileBuilder.h - PDB File Creation ---------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef LLVM_DEBUGINFO_PDB_RAW_PDBFILEBUILDER_H
11 #define LLVM_DEBUGINFO_PDB_RAW_PDBFILEBUILDER_H
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"
32 class DbiStreamBuilder;
33 class InfoStreamBuilder;
34 class GSIStreamBuilder;
35 class TpiStreamBuilder;
37 class PDBFileBuilder {
39 explicit PDBFileBuilder(BumpPtrAllocator &Allocator);
41 PDBFileBuilder(const PDBFileBuilder &) = delete;
42 PDBFileBuilder &operator=(const PDBFileBuilder &) = delete;
44 Error initialize(uint32_t BlockSize);
46 msf::MSFBuilder &getMsfBuilder();
47 InfoStreamBuilder &getInfoBuilder();
48 DbiStreamBuilder &getDbiBuilder();
49 TpiStreamBuilder &getTpiBuilder();
50 TpiStreamBuilder &getIpiBuilder();
51 PDBStringTableBuilder &getStringTableBuilder();
52 GSIStreamBuilder &getGsiBuilder();
54 Error commit(StringRef Filename);
56 Expected<uint32_t> getNamedStreamIndex(StringRef Name) const;
57 Error addNamedStream(StringRef Name, uint32_t Size);
60 Expected<msf::MSFLayout> finalizeMsfLayout();
62 void commitFpm(WritableBinaryStream &MsfBuffer, const msf::MSFLayout &Layout);
64 BumpPtrAllocator &Allocator;
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;
73 PDBStringTableBuilder Strings;
74 NamedStreamMap NamedStreams;