LLVM  9.0.0svn
PDBFileBuilder.h
Go to the documentation of this file.
1 //===- PDBFileBuilder.h - PDB File Creation ---------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLVM_DEBUGINFO_PDB_RAW_PDBFILEBUILDER_H
10 #define LLVM_DEBUGINFO_PDB_RAW_PDBFILEBUILDER_H
11 
12 #include "llvm/ADT/ArrayRef.h"
13 #include "llvm/ADT/BitVector.h"
14 #include "llvm/ADT/Optional.h"
20 #include "llvm/Support/Allocator.h"
21 #include "llvm/Support/Endian.h"
22 #include "llvm/Support/Error.h"
24 
25 #include <memory>
26 #include <vector>
27 
28 namespace llvm {
29 namespace msf {
30 class MSFBuilder;
31 }
32 namespace pdb {
33 class DbiStreamBuilder;
34 class InfoStreamBuilder;
35 class GSIStreamBuilder;
36 class TpiStreamBuilder;
37 
39 public:
41  ~PDBFileBuilder();
42  PDBFileBuilder(const PDBFileBuilder &) = delete;
43  PDBFileBuilder &operator=(const PDBFileBuilder &) = delete;
44 
46 
47  msf::MSFBuilder &getMsfBuilder();
48  InfoStreamBuilder &getInfoBuilder();
49  DbiStreamBuilder &getDbiBuilder();
50  TpiStreamBuilder &getTpiBuilder();
51  TpiStreamBuilder &getIpiBuilder();
52  PDBStringTableBuilder &getStringTableBuilder();
53  GSIStreamBuilder &getGsiBuilder();
54 
55  // If HashPDBContentsToGUID is true on the InfoStreamBuilder, Guid is filled
56  // with the computed PDB GUID on return.
57  Error commit(StringRef Filename, codeview::GUID *Guid);
58 
59  Expected<uint32_t> getNamedStreamIndex(StringRef Name) const;
60  Error addNamedStream(StringRef Name, StringRef Data);
61  void addInjectedSource(StringRef Name, std::unique_ptr<MemoryBuffer> Buffer);
62 
63 private:
64  struct InjectedSourceDescriptor {
65  // The full name of the stream that contains the contents of this injected
66  // source. This is built as a concatenation of the literal "/src/files"
67  // plus the "vname".
68  std::string StreamName;
69 
70  // The exact name of the file name as specified by the user.
71  uint32_t NameIndex;
72 
73  // The string table index of the "vname" of the file. As far as we
74  // understand, this is the same as the name, except it is lowercased and
75  // forward slashes are converted to backslashes.
76  uint32_t VNameIndex;
77  std::unique_ptr<MemoryBuffer> Content;
78  };
79 
80  Error finalizeMsfLayout();
81  Expected<uint32_t> allocateNamedStream(StringRef Name, uint32_t Size);
82 
83  void commitFpm(WritableBinaryStream &MsfBuffer, const msf::MSFLayout &Layout);
84  void commitInjectedSources(WritableBinaryStream &MsfBuffer,
85  const msf::MSFLayout &Layout);
86  void commitSrcHeaderBlock(WritableBinaryStream &MsfBuffer,
87  const msf::MSFLayout &Layout);
88 
90 
91  std::unique_ptr<msf::MSFBuilder> Msf;
92  std::unique_ptr<InfoStreamBuilder> Info;
93  std::unique_ptr<DbiStreamBuilder> Dbi;
94  std::unique_ptr<GSIStreamBuilder> Gsi;
95  std::unique_ptr<TpiStreamBuilder> Tpi;
96  std::unique_ptr<TpiStreamBuilder> Ipi;
97 
98  PDBStringTableBuilder Strings;
99  StringTableHashTraits InjectedSourceHashTraits;
101 
103 
104  NamedStreamMap NamedStreams;
105  DenseMap<uint32_t, std::string> NamedStreamData;
106 };
107 }
108 }
109 
110 #endif
This class represents lattice values for constants.
Definition: AllocatorList.h:23
amdgpu Simplify well known AMD library false FunctionCallee Value const Twine & Name
This file defines the MallocAllocator and BumpPtrAllocator interfaces.
This represents the &#39;GUID&#39; type from windows.h.
Definition: GUID.h:21
Tagged union holding either a T or a Error.
Definition: CachePruning.h:22
static void commitFpm(WritableBinaryStream &MsfBuffer, const MSFLayout &Layout, BumpPtrAllocator &Allocator)
Definition: MSFBuilder.cpp:313
Analysis containing CSE Info
Definition: CSEInfo.cpp:20
Allocate memory in an ever growing pool, as if by bump-pointer.
Definition: Allocator.h:140
static const int BlockSize
Definition: TarWriter.cpp:33
Basic Register Allocator
static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T, ArrayRef< StringRef > StandardNames)
Initialize the set of available library functions based on the specified target triple.
uint32_t Size
Definition: Profile.cpp:46
Lightweight error class with error context and mandatory checking.
Definition: Error.h:157
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:48
A BinaryStream which can be read from as well as written to.
Definition: BinaryStream.h:73