Add Wasmtime C API function to control linker shadowing.
This commit is contained in:
@@ -72,7 +72,9 @@ WASM_API_EXTERN bool wasmtime_wat2wasm(
|
|||||||
|
|
||||||
WASMTIME_DECLARE_OWN(linker)
|
WASMTIME_DECLARE_OWN(linker)
|
||||||
|
|
||||||
WASM_API_EXTERN own wasmtime_linker_t* wasmtime_linker_new(wasm_store_t* store, bool allow_shadowing);
|
WASM_API_EXTERN own wasmtime_linker_t* wasmtime_linker_new(wasm_store_t* store);
|
||||||
|
|
||||||
|
WASM_API_EXTERN void wasmtime_linker_allow_shadowing(wasmtime_linker_t* linker, bool allow_shadowing);
|
||||||
|
|
||||||
WASM_API_EXTERN bool wasmtime_linker_define(
|
WASM_API_EXTERN bool wasmtime_linker_define(
|
||||||
wasmtime_linker_t *linker,
|
wasmtime_linker_t *linker,
|
||||||
|
|||||||
@@ -142,13 +142,18 @@ pub struct wasmtime_linker_t {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn wasmtime_linker_new(
|
pub unsafe extern "C" fn wasmtime_linker_new(store: *mut wasm_store_t) -> *mut wasmtime_linker_t {
|
||||||
store: *mut wasm_store_t,
|
Box::into_raw(Box::new(wasmtime_linker_t {
|
||||||
|
linker: Linker::new(&(*store).store.borrow()),
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe extern "C" fn wasmtime_linker_allow_shadowing(
|
||||||
|
linker: *mut wasmtime_linker_t,
|
||||||
allow_shadowing: bool,
|
allow_shadowing: bool,
|
||||||
) -> *mut wasmtime_linker_t {
|
) {
|
||||||
let mut linker = Linker::new(&(*store).store.borrow());
|
(*linker).linker.allow_shadowing(allow_shadowing);
|
||||||
linker.allow_shadowing(allow_shadowing);
|
|
||||||
Box::into_raw(Box::new(wasmtime_linker_t { linker }))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
|||||||
@@ -668,12 +668,14 @@ namespace Wasmtime
|
|||||||
{
|
{
|
||||||
CheckDisposed();
|
CheckDisposed();
|
||||||
|
|
||||||
var linker = Interop.wasmtime_linker_new(Store, allowShadowing: true);
|
var linker = Interop.wasmtime_linker_new(Store);
|
||||||
if (linker.IsInvalid)
|
if (linker.IsInvalid)
|
||||||
{
|
{
|
||||||
throw new WasmtimeException("Failed to create Wasmtime linker.");
|
throw new WasmtimeException("Failed to create Wasmtime linker.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Interop.wasmtime_linker_allow_shadowing(linker, allowShadowing: true);
|
||||||
|
|
||||||
Linker.Dispose();
|
Linker.Dispose();
|
||||||
Linker = linker;
|
Linker = linker;
|
||||||
}
|
}
|
||||||
@@ -722,12 +724,14 @@ namespace Wasmtime
|
|||||||
throw new WasmtimeException("Failed to create Wasmtime store.");
|
throw new WasmtimeException("Failed to create Wasmtime store.");
|
||||||
}
|
}
|
||||||
|
|
||||||
var linker = Interop.wasmtime_linker_new(store, allowShadowing: true);
|
var linker = Interop.wasmtime_linker_new(store);
|
||||||
if (linker.IsInvalid)
|
if (linker.IsInvalid)
|
||||||
{
|
{
|
||||||
throw new WasmtimeException("Failed to create Wasmtime linker.");
|
throw new WasmtimeException("Failed to create Wasmtime linker.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Interop.wasmtime_linker_allow_shadowing(linker, allowShadowing: true);
|
||||||
|
|
||||||
Engine = engine;
|
Engine = engine;
|
||||||
Store = store;
|
Store = store;
|
||||||
Linker = linker;
|
Linker = linker;
|
||||||
|
|||||||
@@ -1020,7 +1020,10 @@ namespace Wasmtime
|
|||||||
// Linking functions
|
// Linking functions
|
||||||
|
|
||||||
[DllImport(LibraryName)]
|
[DllImport(LibraryName)]
|
||||||
public static extern LinkerHandle wasmtime_linker_new(StoreHandle store, [MarshalAs(UnmanagedType.I1)] bool allowShadowing);
|
public static extern LinkerHandle wasmtime_linker_new(StoreHandle store);
|
||||||
|
|
||||||
|
[DllImport(LibraryName)]
|
||||||
|
public static extern void wasmtime_linker_allow_shadowing(LinkerHandle linker, [MarshalAs(UnmanagedType.I1)] bool allowShadowing);
|
||||||
|
|
||||||
[DllImport(LibraryName)]
|
[DllImport(LibraryName)]
|
||||||
public static extern void wasmtime_linker_delete(IntPtr linker);
|
public static extern void wasmtime_linker_delete(IntPtr linker);
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ int main() {
|
|||||||
|
|
||||||
// Create our linker which will be linking our modules together, and then add
|
// Create our linker which will be linking our modules together, and then add
|
||||||
// our WASI instance to it.
|
// our WASI instance to it.
|
||||||
wasmtime_linker_t *linker = wasmtime_linker_new(store, false);
|
wasmtime_linker_t *linker = wasmtime_linker_new(store);
|
||||||
bool ok = wasmtime_linker_define_wasi(linker, wasi);
|
bool ok = wasmtime_linker_define_wasi(linker, wasi);
|
||||||
assert(ok);
|
assert(ok);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user