diff --git a/tools/llvm2cpp/Makefile b/tools/llvm2cpp/Makefile index f9c8aec24c9..89ffc97e80b 100644 --- a/tools/llvm2cpp/Makefile +++ b/tools/llvm2cpp/Makefile @@ -8,8 +8,7 @@ ##===----------------------------------------------------------------------===## LEVEL = ../.. TOOLNAME = llvm2cpp -LINK_COMPONENTS = bcreader -REQUIRES_EH := 1 +LINK_COMPONENTS = bcreader bitreader include $(LEVEL)/Makefile.common diff --git a/tools/llvm2cpp/llvm2cpp.cpp b/tools/llvm2cpp/llvm2cpp.cpp index fe9504e5673..3424482fda6 100644 --- a/tools/llvm2cpp/llvm2cpp.cpp +++ b/tools/llvm2cpp/llvm2cpp.cpp @@ -17,19 +17,22 @@ //===------------------------------------------------------------------------=== #include "llvm/Module.h" +#include "llvm/Bitcode/ReaderWriter.h" #include "llvm/Bytecode/Reader.h" #include "llvm/Analysis/Verifier.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/ManagedStatic.h" +#include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/SystemUtils.h" #include "llvm/System/Signals.h" #include "CppWriter.h" #include #include #include - using namespace llvm; +cl::opt Bitcode("bitcode"); + static cl::opt InputFilename(cl::Positional, cl::desc(""), cl::init("-")); @@ -49,9 +52,20 @@ int main(int argc, char **argv) { int exitCode = 0; std::ostream *Out = 0; std::string ErrorMessage; - std::auto_ptr M(ParseBytecodeFile(InputFilename, - Compressor::decompressToNewBuffer, - &ErrorMessage)); + + std::auto_ptr M; + if (Bitcode) { + std::auto_ptr Buffer( + MemoryBuffer::getFileOrSTDIN(&InputFilename[0], InputFilename.size())); + if (Buffer.get()) + M.reset(ParseBitcodeFile(Buffer.get(), &ErrorMessage)); + else + ErrorMessage = "Error reading file '" + InputFilename + "'"; + } else { + M.reset(ParseBytecodeFile(InputFilename, + Compressor::decompressToNewBuffer, + &ErrorMessage)); + } if (M.get() == 0) { std::cerr << argv[0] << ": "; if (ErrorMessage.size())