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:
@ -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);
|
||||
|
||||
Reference in New Issue
Block a user