mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2025-05-13 21:21:22 +00:00
Avoid memory import failure when wasi-threads is enabled (#2893)
According to the specification: ``` When instantiating a module which is expected to run with `wasi-threads`, the WASI host must first allocate shared memories to satisfy the module's imports. ``` Currently, if a test from the spec is executed while having the `multi-module` feature enabled, WAMR fails with `WASM module load failed: unknown import`. That happens because spec tests use memory like this: `(memory (export "memory") (import "foo" "bar") 1 1 shared)` and WAMR tries to find a registered module named `foo`. At the moment, there is no specific module name that can be used to identify that the memory is imported because using WASI threads: https://github.com/WebAssembly/wasi-threads/issues/33, so this PR only avoids treating the submodule dependency not being found as a failure.
This commit is contained in:
parent
269b695f85
commit
4aee3cf14e
|
@ -1169,23 +1169,31 @@ load_memory_import(const uint8 **p_buf, const uint8 *buf_end,
|
||||||
(WASMModuleCommon *)parent_module, sub_module_name, error_buf,
|
(WASMModuleCommon *)parent_module, sub_module_name, error_buf,
|
||||||
error_buf_size);
|
error_buf_size);
|
||||||
if (!sub_module) {
|
if (!sub_module) {
|
||||||
|
#if WASM_ENABLE_LIB_WASI_THREADS != 0
|
||||||
|
/* Avoid memory import failure when wasi-threads is enabled
|
||||||
|
and the memory is shared */
|
||||||
|
if (!(declare_max_page_count_flag & 2))
|
||||||
|
return false;
|
||||||
|
#else
|
||||||
return false;
|
return false;
|
||||||
|
#endif /* WASM_ENABLE_LIB_WASI_THREADS */
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
linked_memory = wasm_loader_resolve_memory(
|
||||||
|
sub_module_name, memory_name, declare_init_page_count,
|
||||||
|
declare_max_page_count, error_buf, error_buf_size);
|
||||||
|
if (!linked_memory) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
linked_memory = wasm_loader_resolve_memory(
|
/**
|
||||||
sub_module_name, memory_name, declare_init_page_count,
|
* reset with linked memory limit
|
||||||
declare_max_page_count, error_buf, error_buf_size);
|
*/
|
||||||
if (!linked_memory) {
|
memory->import_module = sub_module;
|
||||||
return false;
|
memory->import_memory_linked = linked_memory;
|
||||||
|
declare_init_page_count = linked_memory->init_page_count;
|
||||||
|
declare_max_page_count = linked_memory->max_page_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* reset with linked memory limit
|
|
||||||
*/
|
|
||||||
memory->import_module = sub_module;
|
|
||||||
memory->import_memory_linked = linked_memory;
|
|
||||||
declare_init_page_count = linked_memory->init_page_count;
|
|
||||||
declare_max_page_count = linked_memory->max_page_count;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user