[PATCH] D14776: Fix bug where WinCOFFObjectWriter would assume starting from an empty output.

Manuel Klimek via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 18 07:18:40 PST 2015


klimek created this revision.
klimek added a reviewer: bkramer.
klimek added a subscriber: llvm-commits.

Starting on an input stream that is not at offset 0 would trigger the
assert in WinCOFFObjectWriter.cpp:1065:
  assert(getStream().tell() <= (*i)->Header.PointerToRawData &&
                 "Section::PointerToRawData is insane!");

http://reviews.llvm.org/D14776

Files:
  include/llvm/MC/MCObjectWriter.h
  lib/MC/WinCOFFObjectWriter.cpp
  test/MC/COFF/stdin.s

Index: test/MC/COFF/stdin.s
===================================================================
--- /dev/null
+++ test/MC/COFF/stdin.s
@@ -0,0 +1,3 @@
+// REQUIRES: shell
+// RUN: ( echo "test"; llvm-mc -filetype=obj -triple i686-pc-win32 %s ) > %t
+
Index: lib/MC/WinCOFFObjectWriter.cpp
===================================================================
--- lib/MC/WinCOFFObjectWriter.cpp
+++ lib/MC/WinCOFFObjectWriter.cpp
@@ -962,7 +962,7 @@
 
   // Assign file offsets to COFF object file structures.
 
-  unsigned offset = 0;
+  unsigned offset = getInitialOffset();
 
   if (UseBigObj)
     offset += COFF::Header32Size;
Index: include/llvm/MC/MCObjectWriter.h
===================================================================
--- include/llvm/MC/MCObjectWriter.h
+++ include/llvm/MC/MCObjectWriter.h
@@ -49,6 +49,10 @@
   MCObjectWriter(raw_pwrite_stream &OS, bool IsLittleEndian)
       : OS(&OS), IsLittleEndian(IsLittleEndian) {}
 
+  unsigned getInitialOffset() {
+    return OS->tell();
+  }
+
 public:
   virtual ~MCObjectWriter();
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D14776.40507.patch
Type: text/x-patch
Size: 1051 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151118/eb61666b/attachment.bin>


More information about the llvm-commits mailing list