diff --git a/libevmjit/ExecutionEngine.cpp b/libevmjit/ExecutionEngine.cpp index 6e625388d0..b56d6bf152 100644 --- a/libevmjit/ExecutionEngine.cpp +++ b/libevmjit/ExecutionEngine.cpp @@ -112,11 +112,19 @@ ReturnCode ExecutionEngine::run(ExecBundle const& _exec, RuntimeData* _data, Env ReturnCode returnCode; Runtime runtime(_data, _env); + + std::vector args{{}, llvm::GenericValue(&runtime)}; + llvm::GenericValue result; + + typedef ReturnCode(*EntryFuncPtr)(int, Runtime*); + + auto entryFuncVoidPtr = _exec.engine->getPointerToFunction(_exec.entryFunc); + auto entryFuncPtr = static_cast(entryFuncVoidPtr); + auto r = setjmp(runtime.getJmpBuf()); if (r == 0) { - auto result = _exec.engine->runFunction(_exec.entryFunc, {{}, llvm::GenericValue(&runtime)}); - returnCode = static_cast(result.IntVal.getZExtValue()); + returnCode = entryFuncPtr(0, &runtime); } else returnCode = static_cast(r);