From 4101e680c814c0faadaa2de1e228e56a6acea3fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Wed, 14 Jan 2015 13:49:56 +0100 Subject: [PATCH] Changes in EVM JIT C interface --- libevmjit/interface.cpp | 38 ++++++++++++-------------------------- libevmjit/interface.h | 4 ++-- 2 files changed, 14 insertions(+), 28 deletions(-) diff --git a/libevmjit/interface.cpp b/libevmjit/interface.cpp index ec7d07b33..6a729f3d0 100644 --- a/libevmjit/interface.cpp +++ b/libevmjit/interface.cpp @@ -5,36 +5,22 @@ extern "C" { -int evmjit_run() +int evmjit_run(void* _data, void* _env) { using namespace dev::eth::jit; + auto data = static_cast(_data); + + std::cerr << "GAS: " << data->elems[RuntimeData::Gas].a << "\n"; + ExecutionEngine engine; - u256 gas = 100000; - - bytes bytecode = { 0x60, 0x01 }; - - // Create random runtime data - RuntimeData data; - data.set(RuntimeData::Gas, gas); - data.set(RuntimeData::Address, 0); - data.set(RuntimeData::Caller, 0); - data.set(RuntimeData::Origin, 0); - data.set(RuntimeData::CallValue, 0xabcd); - data.set(RuntimeData::CallDataSize, 3); - data.set(RuntimeData::GasPrice, 1003); - data.set(RuntimeData::CoinBase, 0); - data.set(RuntimeData::TimeStamp, 1005); - data.set(RuntimeData::Number, 1006); - data.set(RuntimeData::Difficulty, 16); - data.set(RuntimeData::GasLimit, 1008); - data.set(RuntimeData::CodeSize, bytecode.size()); - data.callData = (uint8_t*)"abc"; - data.code = bytecode.data(); - - // BROKEN: env_* functions must be implemented & RuntimeData struct created - // TODO: Do not compile module again - auto result = engine.run(bytecode, &data, nullptr); + + auto codePtr = data->code; + auto codeSize = data->elems[RuntimeData::CodeSize].a; + bytes bytecode; + bytecode.insert(bytecode.end(), codePtr, codePtr + codeSize); + + auto result = engine.run(bytecode, data, static_cast(_env)); return static_cast(result); } diff --git a/libevmjit/interface.h b/libevmjit/interface.h index 0e3076283..1515fed86 100644 --- a/libevmjit/interface.h +++ b/libevmjit/interface.h @@ -4,7 +4,7 @@ extern "C" { #endif -int evmjit_run(); +int evmjit_run(void* _data, void* _env); // JIT object opaque type typedef struct evm_jit evm_jit; @@ -15,7 +15,7 @@ typedef int evm_jit_return_code; // Host-endian 256-bit integer type typedef struct i256 i256; -struct h256 +struct i256 { char b[33]; };