blob: 101127a355f53c896a7f3def502a50d4f3bc8922 [file] [log] [blame]
Andrew Scull5e1ddfa2018-08-14 10:06:54 +01001//===- 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
21namespace llvm {
22class WritableBinaryStreamRef;
23
24namespace msf {
25class MSFBuilder;
26}
27namespace pdb {
28class PDBFile;
29class NamedStreamMap;
30
31class InfoStreamBuilder {
32public:
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);
Andrew Scull0372a572018-11-16 15:47:06 +000038 void addFeature(PdbRaw_FeatureSig Sig);
39
40 // If this is true, the PDB contents are hashed and this hash is used as
41 // PDB GUID and as Signature. The age is always 1.
42 void setHashPDBContentsToGUID(bool B);
43
44 // These only have an effect if hashPDBContentsToGUID() is false.
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010045 void setSignature(uint32_t S);
46 void setAge(uint32_t A);
47 void setGuid(codeview::GUID G);
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010048
Andrew Scull0372a572018-11-16 15:47:06 +000049 bool hashPDBContentsToGUID() const { return HashPDBContentsToGUID; }
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010050 uint32_t getAge() const { return Age; }
51 codeview::GUID getGuid() const { return Guid; }
52 Optional<uint32_t> getSignature() const { return Signature; }
53
54 uint32_t finalize();
55
56 Error finalizeMsfLayout();
57
58 Error commit(const msf::MSFLayout &Layout,
59 WritableBinaryStreamRef Buffer) const;
60
61private:
62 msf::MSFBuilder &Msf;
63
64 std::vector<PdbRaw_FeatureSig> Features;
65 PdbRaw_ImplVer Ver;
66 uint32_t Age;
67 Optional<uint32_t> Signature;
68 codeview::GUID Guid;
69
Andrew Scull0372a572018-11-16 15:47:06 +000070 bool HashPDBContentsToGUID = false;
71
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010072 NamedStreamMap &NamedStreams;
73};
74}
75}
76
77#endif