diff options
author | Zachary Turner <zturner@google.com> | 2016-07-11 21:45:26 +0000 |
---|---|---|
committer | Zachary Turner <zturner@google.com> | 2016-07-11 21:45:26 +0000 |
commit | dbeaea7b357fb4343d01ffa466f3dcab1e57d392 (patch) | |
tree | f1fd778564c5e85b31e96504ee26b49424b00823 /llvm/lib/DebugInfo/PDB/Raw/InfoStreamBuilder.cpp | |
parent | f6b93824677a9aaab59989f7f402010fda6bd63c (diff) | |
download | llvm-dbeaea7b357fb4343d01ffa466f3dcab1e57d392.zip llvm-dbeaea7b357fb4343d01ffa466f3dcab1e57d392.tar.gz llvm-dbeaea7b357fb4343d01ffa466f3dcab1e57d392.tar.bz2 |
Refactor the PDB writing to use a builder approach
llvm-svn: 275110
Diffstat (limited to 'llvm/lib/DebugInfo/PDB/Raw/InfoStreamBuilder.cpp')
-rw-r--r-- | llvm/lib/DebugInfo/PDB/Raw/InfoStreamBuilder.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/llvm/lib/DebugInfo/PDB/Raw/InfoStreamBuilder.cpp b/llvm/lib/DebugInfo/PDB/Raw/InfoStreamBuilder.cpp new file mode 100644 index 0000000..21042e9 --- /dev/null +++ b/llvm/lib/DebugInfo/PDB/Raw/InfoStreamBuilder.cpp @@ -0,0 +1,54 @@ +//===- InfoStreamBuilder.cpp - PDB Info Stream Creation ---------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "llvm/DebugInfo/PDB/Raw/InfoStreamBuilder.h" + +#include "llvm/DebugInfo/CodeView/StreamWriter.h" +#include "llvm/DebugInfo/PDB/Raw/InfoStream.h" +#include "llvm/DebugInfo/PDB/Raw/MappedBlockStream.h" +#include "llvm/DebugInfo/PDB/Raw/RawError.h" + +using namespace llvm; +using namespace llvm::codeview; +using namespace llvm::pdb; + +InfoStreamBuilder::InfoStreamBuilder(IPDBFile &File) : File(File) {} + +void InfoStreamBuilder::setVersion(PdbRaw_ImplVer V) { Ver = V; } + +void InfoStreamBuilder::setSignature(uint32_t S) { Sig = S; } + +void InfoStreamBuilder::setAge(uint32_t A) { Age = A; } + +void InfoStreamBuilder::setGuid(PDB_UniqueId G) { Guid = G; } + +Expected<std::unique_ptr<InfoStream>> InfoStreamBuilder::build() { + if (!Ver.hasValue()) + return make_error<RawError>(raw_error_code::unspecified, + "Missing PDB Stream Version"); + if (!Sig.hasValue()) + return make_error<RawError>(raw_error_code::unspecified, + "Missing PDB Stream Signature"); + if (!Age.hasValue()) + return make_error<RawError>(raw_error_code::unspecified, + "Missing PDB Stream Age"); + if (!Guid.hasValue()) + return make_error<RawError>(raw_error_code::unspecified, + "Missing PDB Stream Guid"); + + auto InfoS = MappedBlockStream::createIndexedStream(StreamPDB, File); + if (!InfoS) + return InfoS.takeError(); + auto Info = llvm::make_unique<InfoStream>(std::move(*InfoS)); + Info->Version = *Ver; + Info->Signature = *Sig; + Info->Age = *Age; + Info->Guid = *Guid; + return std::move(Info); +} |