diff --git a/include/llvm/MC/MCObjectWriter.h b/include/llvm/MC/MCObjectWriter.h index ed1f493d74e..63c833ac20d 100644 --- a/include/llvm/MC/MCObjectWriter.h +++ b/include/llvm/MC/MCObjectWriter.h @@ -49,6 +49,10 @@ protected: // Can only create subclasses. MCObjectWriter(raw_pwrite_stream &OS, bool IsLittleEndian) : OS(&OS), IsLittleEndian(IsLittleEndian) {} + unsigned getInitialOffset() { + return OS->tell(); + } + public: virtual ~MCObjectWriter(); diff --git a/lib/MC/WinCOFFObjectWriter.cpp b/lib/MC/WinCOFFObjectWriter.cpp index 7eb470353b7..875a61425f1 100644 --- a/lib/MC/WinCOFFObjectWriter.cpp +++ b/lib/MC/WinCOFFObjectWriter.cpp @@ -962,7 +962,7 @@ void WinCOFFObjectWriter::writeObject(MCAssembler &Asm, // Assign file offsets to COFF object file structures. - unsigned offset = 0; + unsigned offset = getInitialOffset(); if (UseBigObj) offset += COFF::Header32Size; diff --git a/test/MC/COFF/stdin.s b/test/MC/COFF/stdin.s new file mode 100644 index 00000000000..9a22da5488e --- /dev/null +++ b/test/MC/COFF/stdin.s @@ -0,0 +1,3 @@ +// REQUIRES: shell +// RUN: ( echo "test"; llvm-mc -filetype=obj -triple i686-pc-win32 %s ) > %t +