mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-19 19:30:44 +00:00
Added Module* constructor argument to Memory and Ext.
This commit is contained in:
parent
b730bdc511
commit
1d17da1e5f
5 changed files with 11 additions and 15 deletions
|
|
@ -166,17 +166,16 @@ std::unique_ptr<llvm::Module> Compiler::compile(const dev::bytes& bytecode)
|
||||||
auto mainFuncType = FunctionType::get(builder.getInt64Ty(), false);
|
auto mainFuncType = FunctionType::get(builder.getInt64Ty(), false);
|
||||||
auto mainFunc = Function::Create(mainFuncType, Function::ExternalLinkage, "main", module.get());
|
auto mainFunc = Function::Create(mainFuncType, Function::ExternalLinkage, "main", module.get());
|
||||||
|
|
||||||
// Init stack and memory
|
|
||||||
auto stack = Stack(builder, module.get());
|
|
||||||
auto memory = Memory(builder);
|
|
||||||
|
|
||||||
auto ext = Ext(builder);
|
|
||||||
|
|
||||||
// Create the basic blocks.
|
// Create the basic blocks.
|
||||||
auto entryBlock = BasicBlock::Create(context, "entry", mainFunc);
|
auto entryBlock = BasicBlock::Create(context, "entry", mainFunc);
|
||||||
basicBlocks[0] = entryBlock;
|
basicBlocks[0] = entryBlock;
|
||||||
createBasicBlocks(bytecode);
|
createBasicBlocks(bytecode);
|
||||||
|
|
||||||
|
// Init runtime structures.
|
||||||
|
auto stack = Stack(builder, module.get());
|
||||||
|
auto memory = Memory(builder, module.get());
|
||||||
|
auto ext = Ext(builder, module.get());
|
||||||
|
|
||||||
auto userRet = false;
|
auto userRet = false;
|
||||||
auto finished = false;
|
auto finished = false;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -43,10 +43,9 @@ struct ExtData
|
||||||
const byte* calldata;
|
const byte* calldata;
|
||||||
};
|
};
|
||||||
|
|
||||||
Ext::Ext(llvm::IRBuilder<>& _builder)
|
Ext::Ext(llvm::IRBuilder<>& _builder, llvm::Module* module)
|
||||||
: m_builder(_builder)
|
: m_builder(_builder)
|
||||||
{
|
{
|
||||||
auto module = m_builder.GetInsertBlock()->getParent()->getParent();
|
|
||||||
auto&& ctx = _builder.getContext();
|
auto&& ctx = _builder.getContext();
|
||||||
|
|
||||||
auto i256Ty = m_builder.getIntNTy(256);
|
auto i256Ty = m_builder.getIntNTy(256);
|
||||||
|
|
@ -148,4 +147,4 @@ EXPORT void ext_calldataload(i256* _index, i256* _value)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ namespace evmcc
|
||||||
class Ext
|
class Ext
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Ext(llvm::IRBuilder<>& _builder);
|
Ext(llvm::IRBuilder<>& _builder, llvm::Module* module);
|
||||||
static void init(std::unique_ptr<dev::eth::ExtVMFace> _ext);
|
static void init(std::unique_ptr<dev::eth::ExtVMFace> _ext);
|
||||||
|
|
||||||
llvm::Value* store(llvm::Value* _index);
|
llvm::Value* store(llvm::Value* _index);
|
||||||
|
|
@ -43,4 +43,4 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,13 +26,11 @@ using MemoryImpl = dev::bytes;
|
||||||
static MemoryImpl* evmccrt_memory;
|
static MemoryImpl* evmccrt_memory;
|
||||||
|
|
||||||
|
|
||||||
Memory::Memory(llvm::IRBuilder<>& _builder)
|
Memory::Memory(llvm::IRBuilder<>& _builder, llvm::Module* module)
|
||||||
: m_builder(_builder)
|
: m_builder(_builder)
|
||||||
{
|
{
|
||||||
auto voidTy = m_builder.getVoidTy();
|
auto voidTy = m_builder.getVoidTy();
|
||||||
auto i64Ty = m_builder.getInt64Ty();
|
auto i64Ty = m_builder.getInt64Ty();
|
||||||
auto module = _builder.GetInsertBlock()->getParent()->getParent();
|
|
||||||
|
|
||||||
|
|
||||||
auto memRequireTy = llvm::FunctionType::get(m_builder.getInt8PtrTy(), i64Ty, false);
|
auto memRequireTy = llvm::FunctionType::get(m_builder.getInt8PtrTy(), i64Ty, false);
|
||||||
m_memRequire = llvm::Function::Create(memRequireTy,
|
m_memRequire = llvm::Function::Create(memRequireTy,
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ namespace evmcc
|
||||||
class Memory
|
class Memory
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Memory(llvm::IRBuilder<>& _builder);
|
Memory(llvm::IRBuilder<>& _builder, llvm::Module* module);
|
||||||
|
|
||||||
static const dev::bytes& init();
|
static const dev::bytes& init();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue