diff options
Diffstat (limited to 'lib/Module/ModuleUtil.cpp')
-rw-r--r-- | lib/Module/ModuleUtil.cpp | 37 |
1 files changed, 11 insertions, 26 deletions
diff --git a/lib/Module/ModuleUtil.cpp b/lib/Module/ModuleUtil.cpp index 617a91ca..43eef0b7 100644 --- a/lib/Module/ModuleUtil.cpp +++ b/lib/Module/ModuleUtil.cpp @@ -15,6 +15,7 @@ #include "llvm/IR/Function.h" #include "llvm/IR/Instructions.h" #include "llvm/IR/IntrinsicInst.h" +#include "llvm/IRReader/IRReader.h" #include "llvm/IR/Module.h" #include "llvm/Support/SourceMgr.h" #include "llvm/Support/DataStream.h" @@ -54,34 +55,18 @@ using namespace klee; Module *klee::linkWithLibrary(Module *module, const std::string &libraryName) { #if LLVM_VERSION_CODE >= LLVM_VERSION(3, 3) - Linker linker(module); - std::string errorMessage; - - DataStreamer * streamer = getDataFileStreamer(libraryName, &errorMessage); - - if (!streamer) - fprintf(stderr, "Error Loading file: %s\n", errorMessage.c_str()); - assert(streamer); - - OwningPtr<Module> library_module; - library_module.reset(getStreamedBitcodeModule(libraryName, streamer, getGlobalContext(), &errorMessage)); - if (library_module.get() != 0 - && library_module->MaterializeAllPermanently(&errorMessage)) { - library_module.reset(); + SMDiagnostic err; + std::string err_str; + sys::Path libraryPath(libraryName); + Module *new_mod = ParseIRFile(libraryPath.str(), err, +module->getContext()); + + if (Linker::LinkModules(module, new_mod, Linker::DestroySource, +&err_str)) { + assert(0 && "linked in library failed!"); } - if (library_module.get() == 0) { - errs() << errorMessage << " for " << libraryName << "\n"; - assert(library_module.get()); - } - if (linker.linkInModule(library_module.get(), &errorMessage)){ - fprintf(stderr, "Error in Linking %s; Existing module: %s, library to be linked in %s\n", errorMessage.c_str(), - module->getModuleIdentifier().c_str(), libraryName.c_str()); - assert(0 && "linking in library failed!"); - } - - return linker.getModule(); - + return module; #else Linker linker("klee", module, false); |