use alloc::vec::Vec; use log::trace; use wasmi::{Caller, Func, Linker, Module, Store}; pub fn wasm() -> Result<(), wasmi::Error> { use wasmi::Config; use wasmi::Engine; trace!(""); let conf = Config::default(); let engine = Engine::new(&conf); trace!("Engine constructed"); let wasm = include_bytes!("../../wasm_syscall_test.wasm"); trace!("Loading WASM binary"); let module = Module::new(&engine, &wasm[..]).unwrap(); trace!("Constructing wasm module"); let mut store = Store::new(&engine, 42); trace!("constructing host store"); let read_mem_addr = Func::wrap(&mut store, |caller: Caller<'_, HostState>, param: u64| { read_memory_address(caller, param); panic!(":)") }); let mut linker = >::new(&engine); linker.define("host", "read_mem_addr", read_mem_addr)?; trace!("Linked read_mem_addr"); let instance = linker.instantiate(&mut store, &module)?.start(&mut store)?; trace!("Instanced the engine and module"); let hello = instance.get_typed_func::<(), ()>(&store, "_start")?; hello.call(&mut store, ())?; trace!("Called _start"); Ok(()) } pub type HostState = u32; pub fn read_memory_address(caller: Caller<'_, HostState>, address: u64) -> u64 { trace!("Address: {}", address); 0 }