[PATCH] D56941: Fix a bug that file size is sometimes silently rounded up to the page size.
Rui Ueyama via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 18 16:32:55 PST 2019
ruiu updated this revision to Diff 182638.
ruiu added a comment.
- rebase
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D56941/new/
https://reviews.llvm.org/D56941
Files:
lld/test/ELF/stdout.s
llvm/lib/Support/FileOutputBuffer.cpp
Index: llvm/lib/Support/FileOutputBuffer.cpp
===================================================================
--- llvm/lib/Support/FileOutputBuffer.cpp
+++ llvm/lib/Support/FileOutputBuffer.cpp
@@ -76,20 +76,20 @@
// output file on commit(). This is used only when we cannot use OnDiskBuffer.
class InMemoryBuffer : public FileOutputBuffer {
public:
- InMemoryBuffer(StringRef Path, MemoryBlock Buf, unsigned Mode)
- : FileOutputBuffer(Path), Buffer(Buf), Mode(Mode) {}
+ InMemoryBuffer(StringRef Path, MemoryBlock Buf, unsigned Mode, size_t Size)
+ : FileOutputBuffer(Path), Buffer(Buf), Mode(Mode), Size(Size) {}
uint8_t *getBufferStart() const override { return (uint8_t *)Buffer.base(); }
uint8_t *getBufferEnd() const override {
- return (uint8_t *)Buffer.base() + Buffer.size();
+ return (uint8_t *)Buffer.base() + Size;
}
- size_t getBufferSize() const override { return Buffer.size(); }
+ size_t getBufferSize() const override { return Size; }
Error commit() override {
if (FinalPath == "-") {
- llvm::outs() << StringRef((const char *)Buffer.base(), Buffer.size());
+ llvm::outs() << StringRef((const char *)Buffer.base(), Size);
return Error::success();
}
@@ -100,13 +100,14 @@
openFileForWrite(FinalPath, FD, CD_CreateAlways, OF_None, Mode))
return errorCodeToError(EC);
raw_fd_ostream OS(FD, /*shouldClose=*/true, /*unbuffered=*/true);
- OS << StringRef((const char *)Buffer.base(), Buffer.size());
+ OS << StringRef((const char *)Buffer.base(), Size);
return Error::success();
}
private:
OwningMemoryBlock Buffer;
unsigned Mode;
+ size_t Size;
};
} // namespace
@@ -117,7 +118,7 @@
Size, nullptr, sys::Memory::MF_READ | sys::Memory::MF_WRITE, EC);
if (EC)
return errorCodeToError(EC);
- return llvm::make_unique<InMemoryBuffer>(Path, MB, Mode);
+ return llvm::make_unique<InMemoryBuffer>(Path, MB, Size, Mode);
}
static Expected<std::unique_ptr<OnDiskBuffer>>
Index: lld/test/ELF/stdout.s
===================================================================
--- lld/test/ELF/stdout.s
+++ lld/test/ELF/stdout.s
@@ -1,12 +1,15 @@
# REQUIRES: x86
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
-# RUN: ld.lld %t.o -o - > %t
-# RUN: llvm-objdump -d %t | FileCheck %s
+# RUN: ld.lld %t.o -o - > %t1
+# RUN: llvm-objdump -d %t1 | FileCheck %s
# CHECK: 0000000000201000 _start:
# CHECK: 201000: 90 nop
+# RUN: ld.lld %t.o -o %t2
+# RUN: diff %t1 %t2
+
.globl _start
_start:
nop
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D56941.182638.patch
Type: text/x-patch
Size: 2569 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190119/c8ac1e37/attachment.bin>
More information about the llvm-commits
mailing list