mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-24 21:05:23 +00:00
[llvm-pdbdump] Propagate errors a little more consistently
PDBFile::getBlockData didn't really return any indication that it failed. It merely returned an empty buffer. llvm-svn: 275009
This commit is contained in:
parent
b6537e49a5
commit
634a992c4e
@ -29,6 +29,8 @@ public:
|
||||
|
||||
Error readBytes(uint32_t Offset, uint32_t Size,
|
||||
ArrayRef<uint8_t> &Buffer) const override {
|
||||
if (ViewOffset + Offset < Offset)
|
||||
return make_error<CodeViewError>(cv_error_code::insufficient_buffer);
|
||||
if (Size + Offset > Length)
|
||||
return make_error<CodeViewError>(cv_error_code::insufficient_buffer);
|
||||
return Stream->readBytes(ViewOffset + Offset, Size, Buffer);
|
||||
|
@ -33,7 +33,7 @@ public:
|
||||
virtual ArrayRef<support::ulittle32_t>
|
||||
getStreamBlockList(uint32_t StreamIndex) const = 0;
|
||||
|
||||
virtual ArrayRef<uint8_t> getBlockData(uint32_t BlockIndex,
|
||||
virtual Expected<ArrayRef<uint8_t>> getBlockData(uint32_t BlockIndex,
|
||||
uint32_t NumBytes) const = 0;
|
||||
virtual Error setBlockData(uint32_t BlockIndex, uint32_t Offset,
|
||||
ArrayRef<uint8_t> Data) const = 0;
|
||||
|
@ -84,7 +84,7 @@ public:
|
||||
getStreamBlockList(uint32_t StreamIndex) const override;
|
||||
size_t getFileSize() const;
|
||||
|
||||
ArrayRef<uint8_t> getBlockData(uint32_t BlockIndex,
|
||||
Expected<ArrayRef<uint8_t>> getBlockData(uint32_t BlockIndex,
|
||||
uint32_t NumBytes) const override;
|
||||
Error setBlockData(uint32_t BlockIndex, uint32_t Offset,
|
||||
ArrayRef<uint8_t> Data) const override;
|
||||
|
@ -139,8 +139,10 @@ Error MappedBlockStream::readLongestContiguousChunk(
|
||||
uint32_t BlockSpan = Last - First + 1;
|
||||
uint32_t ByteSpan =
|
||||
BytesFromFirstBlock + (BlockSpan - 1) * Pdb.getBlockSize();
|
||||
Buffer = Pdb.getBlockData(BlockList[First], Pdb.getBlockSize());
|
||||
Buffer = Buffer.drop_front(OffsetInFirstBlock);
|
||||
auto Result = Pdb.getBlockData(BlockList[First], Pdb.getBlockSize());
|
||||
if (!Result)
|
||||
return Result.takeError();
|
||||
Buffer = Result->drop_front(OffsetInFirstBlock);
|
||||
Buffer = ArrayRef<uint8_t>(Buffer.data(), ByteSpan);
|
||||
return Error::success();
|
||||
}
|
||||
@ -173,8 +175,12 @@ bool MappedBlockStream::tryReadContiguously(uint32_t Offset, uint32_t Size,
|
||||
}
|
||||
|
||||
uint32_t FirstBlockAddr = BlockList[BlockNum];
|
||||
auto Data = Pdb.getBlockData(FirstBlockAddr, Pdb.getBlockSize());
|
||||
Data = Data.drop_front(OffsetInBlock);
|
||||
auto Result = Pdb.getBlockData(FirstBlockAddr, Pdb.getBlockSize());
|
||||
if (!Result) {
|
||||
consumeError(Result.takeError());
|
||||
return false;
|
||||
}
|
||||
auto Data = Result->drop_front(OffsetInBlock);
|
||||
Buffer = ArrayRef<uint8_t>(Data.data(), Size);
|
||||
return true;
|
||||
}
|
||||
@ -197,8 +203,11 @@ Error MappedBlockStream::readBytes(uint32_t Offset,
|
||||
while (BytesLeft > 0) {
|
||||
uint32_t StreamBlockAddr = BlockList[BlockNum];
|
||||
|
||||
auto Data = Pdb.getBlockData(StreamBlockAddr, Pdb.getBlockSize());
|
||||
auto Result = Pdb.getBlockData(StreamBlockAddr, Pdb.getBlockSize());
|
||||
if (!Result)
|
||||
return Result.takeError();
|
||||
|
||||
auto Data = *Result;
|
||||
const uint8_t *ChunkStart = Data.data() + OffsetInBlock;
|
||||
uint32_t BytesInChunk =
|
||||
std::min(BytesLeft, Pdb.getBlockSize() - OffsetInBlock);
|
||||
|
@ -73,13 +73,13 @@ PDBFile::getStreamBlockList(uint32_t StreamIndex) const {
|
||||
|
||||
size_t PDBFile::getFileSize() const { return Buffer->getLength(); }
|
||||
|
||||
ArrayRef<uint8_t> PDBFile::getBlockData(uint32_t BlockIndex,
|
||||
Expected<ArrayRef<uint8_t>> PDBFile::getBlockData(uint32_t BlockIndex,
|
||||
uint32_t NumBytes) const {
|
||||
uint64_t StreamBlockOffset = blockToOffset(BlockIndex, getBlockSize());
|
||||
|
||||
ArrayRef<uint8_t> Result;
|
||||
if (auto EC = Buffer->readBytes(StreamBlockOffset, NumBytes, Result))
|
||||
consumeError(std::move(EC));
|
||||
return std::move(EC);
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
@ -61,7 +61,7 @@ public:
|
||||
return ArrayRef<support::ulittle32_t>();
|
||||
return Blocks;
|
||||
}
|
||||
ArrayRef<uint8_t> getBlockData(uint32_t BlockIndex,
|
||||
Expected<ArrayRef<uint8_t>> getBlockData(uint32_t BlockIndex,
|
||||
uint32_t NumBytes) const override {
|
||||
return ArrayRef<uint8_t>(&Data[BlockIndex], NumBytes);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user