aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2016-06-08 17:26:39 +0000
committerZachary Turner <zturner@google.com>2016-06-08 17:26:39 +0000
commita1657a9e64c1e8df34e32ca69fac918a7d28c60a (patch)
tree74993d26964f0f2f28bed1a30e85b19401a2f34e /llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp
parentced0853b468dadcf50ad5dae68017e3cd9c86bda (diff)
downloadllvm-a1657a9e64c1e8df34e32ca69fac918a7d28c60a.zip
llvm-a1657a9e64c1e8df34e32ca69fac918a7d28c60a.tar.gz
llvm-a1657a9e64c1e8df34e32ca69fac918a7d28c60a.tar.bz2
[pdb] Handle stream index errors better.
Reviewed By: ruiu Differential Revision: http://reviews.llvm.org/D21128 llvm-svn: 272172
Diffstat (limited to 'llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp')
-rw-r--r--llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp18
1 files changed, 10 insertions, 8 deletions
diff --git a/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp b/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp
index f34a513..245e314 100644
--- a/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp
+++ b/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp
@@ -62,15 +62,14 @@ struct TpiStream::HeaderInfo {
EmbeddedBuf HashAdjBuffer;
};
-TpiStream::TpiStream(const PDBFile &File, uint32_t StreamIdx)
- : Pdb(File),
- Stream(llvm::make_unique<IndexedStreamData>(StreamIdx, File), File),
- HashFunction(nullptr) {}
+TpiStream::TpiStream(const PDBFile &File,
+ std::unique_ptr<MappedBlockStream> Stream)
+ : Pdb(File), Stream(std::move(Stream)), HashFunction(nullptr) {}
TpiStream::~TpiStream() {}
Error TpiStream::reload() {
- codeview::StreamReader Reader(Stream);
+ codeview::StreamReader Reader(*Stream);
if (Reader.bytesRemaining() < sizeof(HeaderInfo))
return make_error<RawError>(raw_error_code::corrupt_file,
@@ -108,9 +107,11 @@ Error TpiStream::reload() {
return make_error<RawError>(raw_error_code::corrupt_file,
"Invalid TPI hash stream index.");
- HashStream.reset(new MappedBlockStream(
- llvm::make_unique<IndexedStreamData>(Header->HashStreamIndex, Pdb), Pdb));
- codeview::StreamReader HSR(*HashStream);
+ auto HS =
+ MappedBlockStream::createIndexedStream(Header->HashStreamIndex, Pdb);
+ if (!HS)
+ return HS.takeError();
+ codeview::StreamReader HSR(**HS);
uint32_t NumHashValues = Header->HashValueBuffer.Length / sizeof(ulittle32_t);
if (NumHashValues != NumTypeRecords())
@@ -133,6 +134,7 @@ Error TpiStream::reload() {
if (auto EC = HSR.readArray(HashAdjustments, NumHashAdjustments))
return EC;
+ HashStream = std::move(*HS);
return Error::success();
}