mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-21 20:26:41 +00:00
env_create updated
This commit is contained in:
parent
6f84f3d1ad
commit
69dae9a83a
2 changed files with 8 additions and 10 deletions
|
|
@ -56,7 +56,7 @@ extern "C"
|
||||||
_env->suicide(right160(*_address));
|
_env->suicide(right160(*_address));
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT void ext_create(ExtVMFace* _env, i256* _endowment, i256* _initOff, i256* _initSize, h256* o_address)
|
EXPORT void env_create(ExtVMFace* _env, i256* _endowment, byte* _initBeg, uint64_t _initSize, h256* o_address)
|
||||||
{
|
{
|
||||||
auto endowment = llvm2eth(*_endowment);
|
auto endowment = llvm2eth(*_endowment);
|
||||||
|
|
||||||
|
|
@ -64,12 +64,8 @@ extern "C"
|
||||||
{
|
{
|
||||||
_env->subBalance(endowment);
|
_env->subBalance(endowment);
|
||||||
u256 gas; // TODO: Handle gas
|
u256 gas; // TODO: Handle gas
|
||||||
auto initOff = static_cast<size_t>(llvm2eth(*_initOff));
|
|
||||||
auto initSize = static_cast<size_t>(llvm2eth(*_initSize));
|
|
||||||
//auto&& initRef = bytesConstRef(_rt->getMemory().data() + initOff, initSize);
|
|
||||||
auto initRef = bytesConstRef(); // FIXME: Handle memory
|
|
||||||
OnOpFunc onOp {}; // TODO: Handle that thing
|
OnOpFunc onOp {}; // TODO: Handle that thing
|
||||||
h256 address(_env->create(endowment, &gas, initRef, onOp), h256::AlignRight);
|
h256 address(_env->create(endowment, &gas, {_initBeg, _initSize}, onOp), h256::AlignRight);
|
||||||
*o_address = address;
|
*o_address = address;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,6 @@ Ext::Ext(RuntimeManager& _runtimeManager, Memory& _memoryMan):
|
||||||
m_calldataload = llvm::Function::Create(llvm::FunctionType::get(Type::Void, {argsTypes, 3}, false), Linkage::ExternalLinkage, "ext_calldataload", module);
|
m_calldataload = llvm::Function::Create(llvm::FunctionType::get(Type::Void, {argsTypes, 3}, false), Linkage::ExternalLinkage, "ext_calldataload", module);
|
||||||
m_balance = llvm::Function::Create(llvm::FunctionType::get(Type::Void, {argsTypes, 3}, false), Linkage::ExternalLinkage, "ext_balance", module);
|
m_balance = llvm::Function::Create(llvm::FunctionType::get(Type::Void, {argsTypes, 3}, false), Linkage::ExternalLinkage, "ext_balance", module);
|
||||||
m_suicide = llvm::Function::Create(llvm::FunctionType::get(Type::Void, {argsTypes, 2}, false), Linkage::ExternalLinkage, "ext_suicide", module);
|
m_suicide = llvm::Function::Create(llvm::FunctionType::get(Type::Void, {argsTypes, 2}, false), Linkage::ExternalLinkage, "ext_suicide", module);
|
||||||
m_create = llvm::Function::Create(llvm::FunctionType::get(Type::Void, {argsTypes, 5}, false), Linkage::ExternalLinkage, "ext_create", module);
|
|
||||||
m_call = llvm::Function::Create(llvm::FunctionType::get(Type::Void, argsTypes, false), Linkage::ExternalLinkage, "ext_call", module);
|
m_call = llvm::Function::Create(llvm::FunctionType::get(Type::Void, argsTypes, false), Linkage::ExternalLinkage, "ext_call", module);
|
||||||
m_exp = llvm::Function::Create(llvm::FunctionType::get(Type::Void, {argsTypes, 4}, false), Linkage::ExternalLinkage, "ext_exp", module);
|
m_exp = llvm::Function::Create(llvm::FunctionType::get(Type::Void, {argsTypes, 4}, false), Linkage::ExternalLinkage, "ext_exp", module);
|
||||||
m_codeAt = llvm::Function::Create(llvm::FunctionType::get(Type::BytePtr, {argsTypes, 2}, false), Linkage::ExternalLinkage, "ext_codeAt", module);
|
m_codeAt = llvm::Function::Create(llvm::FunctionType::get(Type::BytePtr, {argsTypes, 2}, false), Linkage::ExternalLinkage, "ext_codeAt", module);
|
||||||
|
|
@ -61,6 +60,9 @@ Ext::Ext(RuntimeManager& _runtimeManager, Memory& _memoryMan):
|
||||||
|
|
||||||
llvm::Type* sha3ArgsTypes[] = {Type::BytePtr, Type::Size, Type::WordPtr};
|
llvm::Type* sha3ArgsTypes[] = {Type::BytePtr, Type::Size, Type::WordPtr};
|
||||||
m_sha3 = llvm::Function::Create(llvm::FunctionType::get(Type::Void, sha3ArgsTypes, false), Linkage::ExternalLinkage, "env_sha3", module);
|
m_sha3 = llvm::Function::Create(llvm::FunctionType::get(Type::Void, sha3ArgsTypes, false), Linkage::ExternalLinkage, "env_sha3", module);
|
||||||
|
|
||||||
|
llvm::Type* createArgsTypes[] = {Type::EnvPtr, Type::WordPtr, Type::BytePtr, Type::Size, Type::WordPtr};
|
||||||
|
m_create = llvm::Function::Create(llvm::FunctionType::get(Type::Void, createArgsTypes, false), Linkage::ExternalLinkage, "env_create", module);
|
||||||
}
|
}
|
||||||
|
|
||||||
llvm::Value* Ext::sload(llvm::Value* _index)
|
llvm::Value* Ext::sload(llvm::Value* _index)
|
||||||
|
|
@ -103,9 +105,9 @@ void Ext::suicide(llvm::Value* _address)
|
||||||
llvm::Value* Ext::create(llvm::Value* _endowment, llvm::Value* _initOff, llvm::Value* _initSize)
|
llvm::Value* Ext::create(llvm::Value* _endowment, llvm::Value* _initOff, llvm::Value* _initSize)
|
||||||
{
|
{
|
||||||
m_builder.CreateStore(_endowment, m_args[0]);
|
m_builder.CreateStore(_endowment, m_args[0]);
|
||||||
m_builder.CreateStore(_initOff, m_arg2);
|
auto begin = m_memoryMan.getBytePtr(_initOff);
|
||||||
m_builder.CreateStore(_initSize, m_arg3);
|
auto size = m_builder.CreateTrunc(_initSize, Type::Size, "size");
|
||||||
createCall(m_create, getRuntimeManager().getRuntimePtr(), m_args[0], m_arg2, m_arg3, m_args[1]);
|
createCall(m_create, getRuntimeManager().getEnv(), m_args[0], begin, size, m_args[1]);
|
||||||
llvm::Value* address = m_builder.CreateLoad(m_args[1]);
|
llvm::Value* address = m_builder.CreateLoad(m_args[1]);
|
||||||
address = Endianness::toNative(m_builder, address);
|
address = Endianness::toNative(m_builder, address);
|
||||||
return address;
|
return address;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue