wasmtime: Initial, partial support for externref
This is enough to get an `externref -> externref` identity function passing. However, `externref`s that are dropped by compiled Wasm code are (safely) leaked. Follow up work will leverage cranelift's stack maps to resolve this issue.
This commit is contained in:
@@ -12,7 +12,7 @@ pub struct wasmtime_linker_t {
|
||||
#[no_mangle]
|
||||
pub extern "C" fn wasmtime_linker_new(store: &wasm_store_t) -> Box<wasmtime_linker_t> {
|
||||
Box::new(wasmtime_linker_t {
|
||||
linker: Linker::new(&store.store.borrow()),
|
||||
linker: Linker::new(&store.store),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -87,7 +87,7 @@ pub unsafe extern "C" fn wasmtime_linker_instantiate(
|
||||
trap_ptr: &mut *mut wasm_trap_t,
|
||||
) -> Option<Box<wasmtime_error_t>> {
|
||||
let result = linker.linker.instantiate(&module.module.borrow());
|
||||
super::instance::handle_instantiate(result, instance_ptr, trap_ptr)
|
||||
super::instance::handle_instantiate(linker.linker.store(), result, instance_ptr, trap_ptr)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
@@ -116,6 +116,6 @@ pub unsafe extern "C" fn wasmtime_linker_get_default(
|
||||
Err(_) => return bad_utf8(),
|
||||
};
|
||||
handle_result(linker.get_default(name), |f| {
|
||||
*func = Box::into_raw(Box::new(HostRef::new(f).into()))
|
||||
*func = Box::into_raw(Box::new(HostRef::new(linker.store(), f).into()))
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user