diff options
author | Daniel Dunbar <daniel@zuster.org> | 2008-11-13 05:01:07 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2008-11-13 05:01:07 +0000 |
commit | 0d9eb9b4917340acbfc831890655b8e9724959f6 (patch) | |
tree | 874f6b97b8075e6ab9ab5713e91dcacff7140c7b | |
parent | 241085aa3875edd7eaddd235dd9f535e967aaed4 (diff) | |
download | external_llvm-0d9eb9b4917340acbfc831890655b8e9724959f6.zip external_llvm-0d9eb9b4917340acbfc831890655b8e9724959f6.tar.gz external_llvm-0d9eb9b4917340acbfc831890655b8e9724959f6.tar.bz2 |
Add Binary flag to raw_fd_ostream constructor.
Document raw_fd_ostream's treatment of "-".
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59219 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/Support/raw_ostream.h | 7 | ||||
-rw-r--r-- | lib/Support/raw_ostream.cpp | 15 | ||||
-rw-r--r-- | tools/llc/llc.cpp | 7 | ||||
-rw-r--r-- | tools/lto/LTOCodeGenerator.cpp | 2 |
4 files changed, 25 insertions, 6 deletions
diff --git a/include/llvm/Support/raw_ostream.h b/include/llvm/Support/raw_ostream.h index 9b307db..709a063 100644 --- a/include/llvm/Support/raw_ostream.h +++ b/include/llvm/Support/raw_ostream.h @@ -156,7 +156,12 @@ public: /// error occurs, information about the error is put into ErrorInfo, /// and the stream should be immediately destroyed; the string will /// be empty if no error occurred. - raw_fd_ostream(const char *Filename, std::string &ErrorInfo); + /// + /// \param Filename - The file to open. If this is "-" then the + /// stream will use stdout instead. + /// \param Binary - The file should be opened in binary mode on + /// platforms that support this distinction. + raw_fd_ostream(const char *Filename, bool Binary, std::string &ErrorInfo); /// raw_fd_ostream ctor - FD is the file descriptor that this writes to. If /// ShouldClose is true, this closes the file when diff --git a/lib/Support/raw_ostream.cpp b/lib/Support/raw_ostream.cpp index 8c704cb..a8e6c78 100644 --- a/lib/Support/raw_ostream.cpp +++ b/lib/Support/raw_ostream.cpp @@ -13,6 +13,7 @@ #include "llvm/Support/raw_ostream.h" #include "llvm/Support/Format.h" +#include "llvm/System/Program.h" #include "llvm/ADT/SmallVector.h" #include "llvm/Config/config.h" #include <ostream> @@ -200,17 +201,27 @@ void format_object_base::home() { /// occurs, information about the error is put into ErrorInfo, and the /// stream should be immediately destroyed; the string will be empty /// if no error occurred. -raw_fd_ostream::raw_fd_ostream(const char *Filename, std::string &ErrorInfo) { +raw_fd_ostream::raw_fd_ostream(const char *Filename, bool Binary, + std::string &ErrorInfo) { ErrorInfo.clear(); // Handle "-" as stdout. if (Filename[0] == '-' && Filename[1] == 0) { FD = STDOUT_FILENO; + // If user requested binary then put stdout into binary mode if + // possible. + if (Binary) + sys::Program::ChangeStdoutToBinary(); ShouldClose = false; return; } - FD = open(Filename, O_WRONLY|O_CREAT|O_TRUNC, 0644); + int Flags = O_WRONLY|O_CREAT|O_TRUNC; +#ifdef O_BINARY + if (Binary) + Flags |= O_BINARY; +#endif + FD = open(Filename, Flags, 0644); if (FD < 0) { ErrorInfo = "Error opening output file '" + std::string(Filename) + "'"; ShouldClose = false; diff --git a/tools/llc/llc.cpp b/tools/llc/llc.cpp index f185490..bd915ae 100644 --- a/tools/llc/llc.cpp +++ b/tools/llc/llc.cpp @@ -125,7 +125,7 @@ static raw_ostream *GetOutputStream(const char *ProgName) { sys::RemoveFileOnSignal(sys::Path(OutputFilename)); std::string error; - raw_ostream *Out = new raw_fd_ostream(OutputFilename.c_str(), error); + raw_ostream *Out = new raw_fd_ostream(OutputFilename.c_str(), true, error); if (!error.empty()) { std::cerr << error << '\n'; delete Out; @@ -142,6 +142,7 @@ static raw_ostream *GetOutputStream(const char *ProgName) { OutputFilename = GetFileNameRoot(InputFilename); + bool Binary = false; switch (FileType) { case TargetMachine::AssemblyFile: if (MArch->Name[0] == 'c') { @@ -156,9 +157,11 @@ static raw_ostream *GetOutputStream(const char *ProgName) { break; case TargetMachine::ObjectFile: OutputFilename += ".o"; + Binary = true; break; case TargetMachine::DynamicLibrary: OutputFilename += LTDL_SHLIB_EXT; + Binary = true; break; } @@ -175,7 +178,7 @@ static raw_ostream *GetOutputStream(const char *ProgName) { sys::RemoveFileOnSignal(sys::Path(OutputFilename)); std::string error; - raw_ostream *Out = new raw_fd_ostream(OutputFilename.c_str(), error); + raw_ostream *Out = new raw_fd_ostream(OutputFilename.c_str(), Binary, error); if (!error.empty()) { std::cerr << error << '\n'; delete Out; diff --git a/tools/lto/LTOCodeGenerator.cpp b/tools/lto/LTOCodeGenerator.cpp index 0474a88..e0e1f52 100644 --- a/tools/lto/LTOCodeGenerator.cpp +++ b/tools/lto/LTOCodeGenerator.cpp @@ -165,7 +165,7 @@ const void* LTOCodeGenerator::compile(size_t* length, std::string& errMsg) // generate assembly code bool genResult = false; { - raw_fd_ostream asmFile(uniqueAsmPath.c_str(), errMsg); + raw_fd_ostream asmFile(uniqueAsmPath.c_str(), false, errMsg); if (!errMsg.empty()) return NULL; genResult = this->generateAssemblyCode(asmFile, errMsg); |