Home | History | Annotate | Download | only in Native
      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