about summary refs log tree commit diff homepage
diff options
context:
space:
mode:
authorCristian Cadar <c.cadar@imperial.ac.uk>2013-10-08 08:35:16 -0700
committerCristian Cadar <c.cadar@imperial.ac.uk>2013-10-08 08:35:16 -0700
commit7adaf410e2819ba7de7aad92ce2807c2f451ff7a (patch)
treeb117e1248215ff7b996962f1cde69a779f9a6305
parent64ed10370e518897e54ed49a2948836e365ccefe (diff)
parent5326f3014757cc43710127445566f643fe0e8777 (diff)
downloadklee-7adaf410e2819ba7de7aad92ce2807c2f451ff7a.tar.gz
Merge pull request #34 from ddcc/master
Replace current implementation of linkWithLibrary()
-rw-r--r--lib/Module/ModuleUtil.cpp37
-rw-r--r--tools/klee/Makefile2
2 files changed, 12 insertions, 27 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);
 
diff --git a/tools/klee/Makefile b/tools/klee/Makefile
index 01486fef..0721695f 100644
--- a/tools/klee/Makefile
+++ b/tools/klee/Makefile
@@ -13,7 +13,7 @@ TOOLNAME = klee
 include $(LEVEL)/Makefile.config
 
 USEDLIBS = kleeCore.a kleeBasic.a kleeModule.a  kleaverSolver.a kleaverExpr.a kleeSupport.a 
-LINK_COMPONENTS = jit bitreader bitwriter ipo linker engine
+LINK_COMPONENTS = jit bitreader bitwriter ipo linker engine irreader
 
 include $(LEVEL)/Makefile.common