Turn stdout into binary mode during bitcode emission.
This is necessary on windows targets, since stdout is in text mode there.
Patch by Julien Lerouge!
llvm-svn: 52039
diff --git a/llvm-gcc-4.2/gcc/llvm-backend.cpp b/llvm-gcc-4.2/gcc/llvm-backend.cpp
index 5d87b1d..f5ea99d 100644
--- a/llvm-gcc-4.2/gcc/llvm-backend.cpp
+++ b/llvm-gcc-4.2/gcc/llvm-backend.cpp
@@ -51,6 +51,7 @@
#include "llvm/Support/Streams.h"
#include "llvm/Support/ManagedStatic.h"
#include "llvm/Support/MemoryBuffer.h"
+#include "llvm/System/Program.h"
#include <cassert>
#undef VISIBILITY_HIDDEN
extern "C" {
@@ -272,6 +273,10 @@
PerModulePasses = new PassManager();
PerModulePasses->add(new TargetData(*TheTarget->getTargetData()));
+ // If writing to stdout, set binary mode.
+ if (asm_out_file == stdout)
+ sys::Program::ChangeStdoutToBinary();
+
// Emit an LLVM .bc file to the output. This is used when passed
// -emit-llvm -c to the GCC driver.
PerModulePasses->add(CreateBitcodeWriterPass(*AsmOutStream));
@@ -473,6 +478,10 @@
// wrong for llvm/.bc emission cases.
flag_no_ident = 1;
+ // If writing to stdout, set binary mode.
+ if (asm_out_file == stdout)
+ sys::Program::ChangeStdoutToBinary();
+
AttributeUsedGlobals.clear();
timevar_pop(TV_LLVM_INIT);
}