about summary refs log tree commit diff
path: root/src/rustllvm/RustWrapper.cpp
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2013-06-13 12:40:22 -0700
committerBrian Anderson <banderson@mozilla.com>2013-06-13 13:08:57 -0700
commit19adece68b00bd1873499cca6f1537750608d769 (patch)
tree48f23286166ee3f2cefc80161054cadc62ff7040 /src/rustllvm/RustWrapper.cpp
parent5bff471dde5350437c1bb51178ba6a2a903ec813 (diff)
downloadrust-19adece68b00bd1873499cca6f1537750608d769.tar.gz
rust-19adece68b00bd1873499cca6f1537750608d769.zip
Revert "Have JIT execution take ownership of the LLVMContextRef"
This reverts commit 5c5095d25e3652c434c8d4ec178e6844877e3c2d.

Conflicts:
	src/librusti/rusti.rc
Diffstat (limited to 'src/rustllvm/RustWrapper.cpp')
-rw-r--r--src/rustllvm/RustWrapper.cpp30
1 files changed, 18 insertions, 12 deletions
diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp
index 30e01b53ab7..17eb0f50b9b 100644
--- a/src/rustllvm/RustWrapper.cpp
+++ b/src/rustllvm/RustWrapper.cpp
@@ -329,12 +329,12 @@ LLVMRustLoadCrate(void* mem, const char* crate) {
   return true;
 }
 
-extern "C" LLVMExecutionEngineRef
-LLVMRustBuildJIT(void* mem,
-                 LLVMPassManagerRef PMR,
-                 LLVMModuleRef M,
-                 CodeGenOpt::Level OptLevel,
-                 bool EnableSegmentedStacks) {
+extern "C" void*
+LLVMRustExecuteJIT(void* mem,
+                   LLVMPassManagerRef PMR,
+                   LLVMModuleRef M,
+                   CodeGenOpt::Level OptLevel,
+                   bool EnableSegmentedStacks) {
 
   InitializeNativeTarget();
   InitializeNativeTargetAsmPrinter();
@@ -371,15 +371,21 @@ LLVMRustBuildJIT(void* mem,
 
   if(!EE || Err != "") {
     LLVMRustError = Err.c_str();
-    // The EngineBuilder only takes ownership of these two structures if the
-    // create() call is successful, but here it wasn't successful.
-    LLVMDisposeModule(M);
-    delete MM;
-    return NULL;
+    return 0;
   }
 
   MM->invalidateInstructionCache();
-  return wrap(EE);
+  Function* func = EE->FindFunctionNamed("_rust_main");
+
+  if(!func || Err != "") {
+    LLVMRustError = Err.c_str();
+    return 0;
+  }
+
+  void* entry = EE->getPointerToFunction(func);
+  assert(entry);
+
+  return entry;
 }
 
 extern "C" bool