diff options
| author | Brian Anderson <banderson@mozilla.com> | 2013-06-13 12:40:22 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2013-06-13 13:08:57 -0700 |
| commit | 19adece68b00bd1873499cca6f1537750608d769 (patch) | |
| tree | 48f23286166ee3f2cefc80161054cadc62ff7040 /src/rustllvm/RustWrapper.cpp | |
| parent | 5bff471dde5350437c1bb51178ba6a2a903ec813 (diff) | |
| download | rust-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.cpp | 30 |
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 |
