diff options
author | Nico Weber <thakis@chromium.org> | 2021-09-16 19:14:52 -0400 |
---|---|---|
committer | Nico Weber <thakis@chromium.org> | 2021-09-16 19:14:52 -0400 |
commit | 646299d183ca72cbafd3a2d64629ce8cb3fcdd9d (patch) | |
tree | e063d7a1a4d039a4bfb636c164cb5e220a03f80f /llvm/lib/Support/BinaryStreamWriter.cpp | |
parent | d9195d6603f2c95124e29beacec9129ae8fd616e (diff) | |
download | llvm-646299d183ca72cbafd3a2d64629ce8cb3fcdd9d.zip llvm-646299d183ca72cbafd3a2d64629ce8cb3fcdd9d.tar.gz llvm-646299d183ca72cbafd3a2d64629ce8cb3fcdd9d.tar.bz2 |
[Support] Convert BinaryStream class zoo to 64-bit offsets
Most PDB fields on disk are 32-bit but describe the file in terms of MSF
blocks, which are 4 kiB by default.
So PDB files can be a bit larger than 4 GiB, and much larger if you create them
with a block size > 4 kiB.
This is a first (necessary, but by far not not sufficient) step towards
supporting such PDB files. Now we don't truncate in-memory file offsets (which
are in terms of bytes, not in terms of blocks).
No effective behavior change. lld-link will still error out if it were to
produce PDBs > 4 GiB.
Differential Revision: https://reviews.llvm.org/D109923
Diffstat (limited to 'llvm/lib/Support/BinaryStreamWriter.cpp')
-rw-r--r-- | llvm/lib/Support/BinaryStreamWriter.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/llvm/lib/Support/BinaryStreamWriter.cpp b/llvm/lib/Support/BinaryStreamWriter.cpp index 986e18d..8c9efa0 100644 --- a/llvm/lib/Support/BinaryStreamWriter.cpp +++ b/llvm/lib/Support/BinaryStreamWriter.cpp @@ -62,7 +62,7 @@ Error BinaryStreamWriter::writeStreamRef(BinaryStreamRef Ref) { return writeStreamRef(Ref, Ref.getLength()); } -Error BinaryStreamWriter::writeStreamRef(BinaryStreamRef Ref, uint32_t Length) { +Error BinaryStreamWriter::writeStreamRef(BinaryStreamRef Ref, uint64_t Length) { BinaryStreamReader SrcReader(Ref.slice(0, Length)); // This is a bit tricky. If we just call readBytes, we are requiring that it // return us the entire stream as a contiguous buffer. There is no guarantee @@ -80,7 +80,7 @@ Error BinaryStreamWriter::writeStreamRef(BinaryStreamRef Ref, uint32_t Length) { } std::pair<BinaryStreamWriter, BinaryStreamWriter> -BinaryStreamWriter::split(uint32_t Off) const { +BinaryStreamWriter::split(uint64_t Off) const { assert(getLength() >= Off); WritableBinaryStreamRef First = Stream.drop_front(Offset); @@ -93,7 +93,7 @@ BinaryStreamWriter::split(uint32_t Off) const { } Error BinaryStreamWriter::padToAlignment(uint32_t Align) { - uint32_t NewOffset = alignTo(Offset, Align); + uint64_t NewOffset = alignTo(Offset, Align); if (NewOffset > getLength()) return make_error<BinaryStreamError>(stream_error_code::stream_too_short); while (Offset < NewOffset) |