From 4a9d08d1b03149b5559efc7f8869f157da179787 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Tue, 16 Dec 2014 16:41:52 +0100 Subject: [PATCH] Change the way entry function is called. --- libevmjit/ExecutionEngine.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) 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);