Store import function pointer in module instance (#1130)

Fix the issue reported by #1118 , use this approach since it avoids copying
unnecessary static information into instance and reduces the footprint.
This commit is contained in:
Xu Jun
2022-04-27 20:21:51 +08:00
committed by GitHub
parent f8b4ca2a70
commit 98431225f2
4 changed files with 40 additions and 14 deletions

View File

@ -580,6 +580,13 @@ functions_instantiate(const WASMModule *module, WASMModuleInstance *module_inst,
return NULL;
}
total_size = sizeof(void *) * (uint64)module->import_function_count;
if (!(module_inst->import_func_ptrs =
runtime_malloc(total_size, error_buf, error_buf_size))) {
wasm_runtime_free(functions);
return NULL;
}
/* instantiate functions from import section */
function = functions;
import = module->import_functions;
@ -608,6 +615,10 @@ functions_instantiate(const WASMModule *module, WASMModuleInstance *module_inst,
function->local_count = 0;
function->local_types = NULL;
/* Copy the function pointer to current instance */
module_inst->import_func_ptrs[i] =
function->u.func_import->func_ptr_linked;
function++;
}
@ -1597,6 +1608,10 @@ wasm_deinstantiate(WASMModuleInstance *module_inst, bool is_sub_inst)
memories_deinstantiate(module_inst, module_inst->memories,
module_inst->memory_count);
if (module_inst->import_func_ptrs) {
wasm_runtime_free(module_inst->import_func_ptrs);
}
tables_deinstantiate(module_inst->tables, module_inst->table_count);
functions_deinstantiate(module_inst->functions,
module_inst->function_count);