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 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(Path, MB, Mode); + return llvm::make_unique(Path, MB, Size, Mode); } static Expected>