diff --git a/core/iwasm/aot/aot_runtime.c b/core/iwasm/aot/aot_runtime.c index 3e6371f42..94c66e679 100644 --- a/core/iwasm/aot/aot_runtime.c +++ b/core/iwasm/aot/aot_runtime.c @@ -1271,9 +1271,9 @@ aot_deinstantiate(AOTModuleInstance *module_inst, bool is_sub_inst) if (module_inst->func_type_indexes) wasm_runtime_free(module_inst->func_type_indexes); - if (((AOTModuleInstanceExtra *)module_inst->e)->c_api_func_imports) - wasm_runtime_free( - ((AOTModuleInstanceExtra *)module_inst->e)->c_api_func_imports); + if (((AOTModuleInstanceExtra *)module_inst->e)->common.c_api_func_imports) + wasm_runtime_free(((AOTModuleInstanceExtra *)module_inst->e) + ->common.c_api_func_imports); if (!is_sub_inst) { #if WASM_ENABLE_LIBC_WASI != 0 @@ -1925,8 +1925,8 @@ aot_invoke_native(WASMExecEnv *exec_env, uint32 func_idx, uint32 argc, AOTModuleInstanceExtra *module_inst_extra = (AOTModuleInstanceExtra *)module_inst->e; CApiFuncImport *c_api_func_import = - module_inst_extra->c_api_func_imports - ? module_inst_extra->c_api_func_imports + func_idx + module_inst_extra->common.c_api_func_imports + ? module_inst_extra->common.c_api_func_imports + func_idx : NULL; uint32 *func_type_indexes = module_inst->func_type_indexes; uint32 func_type_idx = func_type_indexes[func_idx]; diff --git a/core/iwasm/aot/aot_runtime.h b/core/iwasm/aot/aot_runtime.h index 2dea832be..895823af3 100644 --- a/core/iwasm/aot/aot_runtime.h +++ b/core/iwasm/aot/aot_runtime.h @@ -89,11 +89,7 @@ typedef struct AOTFunctionInstance { typedef struct AOTModuleInstanceExtra { DefPointer(const uint32 *, stack_sizes); - CApiFuncImport *c_api_func_imports; -#if WASM_CONFIGUABLE_BOUNDS_CHECKS != 0 - /* Disable bounds checks or not */ - bool disable_bounds_checks; -#endif + WASMModuleInstanceExtraCommon common; } AOTModuleInstanceExtra; #if defined(OS_ENABLE_HW_BOUND_CHECK) && defined(BH_PLATFORM_WINDOWS) diff --git a/core/iwasm/common/wasm_c_api.c b/core/iwasm/common/wasm_c_api.c index 7b8cf4779..a595a6269 100644 --- a/core/iwasm/common/wasm_c_api.c +++ b/core/iwasm/common/wasm_c_api.c @@ -4858,7 +4858,7 @@ wasm_instance_new_with_args(wasm_store_t *store, const wasm_module_t *module, if (instance->inst_comm_rt->module_type == Wasm_Module_Bytecode) { WASMModuleInstanceExtra *e = ((WASMModuleInstance *)instance->inst_comm_rt)->e; - p_func_imports = &(e->c_api_func_imports); + p_func_imports = &(e->common.c_api_func_imports); import_func_count = MODULE_INTERP(module)->import_function_count; } #endif @@ -4868,7 +4868,7 @@ wasm_instance_new_with_args(wasm_store_t *store, const wasm_module_t *module, (AOTModuleInstanceExtra *)((AOTModuleInstance *) instance->inst_comm_rt) ->e; - p_func_imports = &(e->c_api_func_imports); + p_func_imports = &(e->common.c_api_func_imports); import_func_count = MODULE_AOT(module)->import_func_count; } #endif diff --git a/core/iwasm/common/wasm_runtime_common.c b/core/iwasm/common/wasm_runtime_common.c index 8e7933798..a39613a37 100644 --- a/core/iwasm/common/wasm_runtime_common.c +++ b/core/iwasm/common/wasm_runtime_common.c @@ -2491,14 +2491,14 @@ wasm_runtime_set_bounds_checks(WASMModuleInstanceCommon *module_inst, #if WASM_ENABLE_INTERP != 0 if (module_inst->module_type == Wasm_Module_Bytecode) { ((WASMModuleInstanceExtra *)((WASMModuleInstance *)module_inst)->e) - ->disable_bounds_checks = enable ? false : true; + ->common.disable_bounds_checks = enable ? false : true; } #endif #if WASM_ENABLE_AOT != 0 if (module_inst->module_type == Wasm_Module_AoT) { ((AOTModuleInstanceExtra *)((AOTModuleInstance *)module_inst)->e) - ->disable_bounds_checks = enable ? false : true; + ->common.disable_bounds_checks = enable ? false : true; } #endif } @@ -2511,7 +2511,7 @@ wasm_runtime_is_bounds_checks_enabled(WASMModuleInstanceCommon *module_inst) if (module_inst->module_type == Wasm_Module_Bytecode) { return !((WASMModuleInstanceExtra *)((WASMModuleInstance *)module_inst) ->e) - ->disable_bounds_checks; + ->common.disable_bounds_checks; } #endif @@ -2519,7 +2519,7 @@ wasm_runtime_is_bounds_checks_enabled(WASMModuleInstanceCommon *module_inst) if (module_inst->module_type == Wasm_Module_AoT) { return !((AOTModuleInstanceExtra *)((WASMModuleInstance *)module_inst) ->e) - ->disable_bounds_checks; + ->common.disable_bounds_checks; } #endif diff --git a/core/iwasm/interpreter/wasm_interp_classic.c b/core/iwasm/interpreter/wasm_interp_classic.c index 949900950..2a48c1bde 100644 --- a/core/iwasm/interpreter/wasm_interp_classic.c +++ b/core/iwasm/interpreter/wasm_interp_classic.c @@ -905,8 +905,9 @@ wasm_interp_call_func_native(WASMModuleInstance *module_inst, if (!func_import->call_conv_wasm_c_api) { native_func_pointer = module_inst->import_func_ptrs[cur_func_index]; } - else if (module_inst->e->c_api_func_imports) { - c_api_func_import = module_inst->e->c_api_func_imports + cur_func_index; + else if (module_inst->e->common.c_api_func_imports) { + c_api_func_import = + module_inst->e->common.c_api_func_imports + cur_func_index; native_func_pointer = c_api_func_import->func_ptr_linked; } diff --git a/core/iwasm/interpreter/wasm_interp_fast.c b/core/iwasm/interpreter/wasm_interp_fast.c index 729d4c60d..229a2151d 100644 --- a/core/iwasm/interpreter/wasm_interp_fast.c +++ b/core/iwasm/interpreter/wasm_interp_fast.c @@ -938,8 +938,9 @@ wasm_interp_call_func_native(WASMModuleInstance *module_inst, if (!func_import->call_conv_wasm_c_api) { native_func_pointer = module_inst->import_func_ptrs[cur_func_index]; } - else if (module_inst->e->c_api_func_imports) { - c_api_func_import = module_inst->e->c_api_func_imports + cur_func_index; + else if (module_inst->e->common.c_api_func_imports) { + c_api_func_import = + module_inst->e->common.c_api_func_imports + cur_func_index; native_func_pointer = c_api_func_import->func_ptr_linked; } diff --git a/core/iwasm/interpreter/wasm_runtime.c b/core/iwasm/interpreter/wasm_runtime.c index eef2e3688..0fdef512d 100644 --- a/core/iwasm/interpreter/wasm_runtime.c +++ b/core/iwasm/interpreter/wasm_runtime.c @@ -2227,8 +2227,8 @@ wasm_deinstantiate(WASMModuleInstance *module_inst, bool is_sub_inst) } #endif - if (module_inst->e->c_api_func_imports) - wasm_runtime_free(module_inst->e->c_api_func_imports); + if (module_inst->e->common.c_api_func_imports) + wasm_runtime_free(module_inst->e->common.c_api_func_imports); if (!is_sub_inst) { #if WASM_ENABLE_LIBC_WASI != 0 @@ -3141,8 +3141,9 @@ llvm_jit_invoke_native(WASMExecEnv *exec_env, uint32 func_idx, uint32 argc, import_func = &module->import_functions[func_idx].u.function; if (import_func->call_conv_wasm_c_api) { - if (module_inst->e->c_api_func_imports) { - c_api_func_import = module_inst->e->c_api_func_imports + func_idx; + if (module_inst->e->common.c_api_func_imports) { + c_api_func_import = + module_inst->e->common.c_api_func_imports + func_idx; func_ptr = c_api_func_import->func_ptr_linked; } else { diff --git a/core/iwasm/interpreter/wasm_runtime.h b/core/iwasm/interpreter/wasm_runtime.h index 6698d0e75..3e0852487 100644 --- a/core/iwasm/interpreter/wasm_runtime.h +++ b/core/iwasm/interpreter/wasm_runtime.h @@ -210,8 +210,19 @@ typedef struct CApiFuncImport { void *env_arg; } CApiFuncImport; +/* The common part of WASMModuleInstanceExtra and AOTModuleInstanceExtra */ +typedef struct WASMModuleInstanceExtraCommon { + CApiFuncImport *c_api_func_imports; +#if WASM_CONFIGUABLE_BOUNDS_CHECKS != 0 + /* Disable bounds checks or not */ + bool disable_bounds_checks; +#endif +} WASMModuleInstanceExtraCommon; + /* Extra info of WASM module instance for interpreter/jit mode */ typedef struct WASMModuleInstanceExtra { + WASMModuleInstanceExtraCommon common; + WASMGlobalInstance *globals; WASMFunctionInstance *functions; @@ -223,7 +234,6 @@ typedef struct WASMModuleInstanceExtra { WASMFunctionInstance *free_function; WASMFunctionInstance *retain_function; - CApiFuncImport *c_api_func_imports; RunningMode running_mode; #if WASM_ENABLE_MULTI_MODULE != 0 @@ -242,10 +252,6 @@ typedef struct WASMModuleInstanceExtra { && WASM_ENABLE_LAZY_JIT != 0) WASMModuleInstance *next; #endif -#if WASM_CONFIGUABLE_BOUNDS_CHECKS != 0 - /* Disable bounds checks or not */ - bool disable_bounds_checks; -#endif } WASMModuleInstanceExtra; struct AOTFuncPerfProfInfo; diff --git a/core/iwasm/libraries/thread-mgr/thread_manager.c b/core/iwasm/libraries/thread-mgr/thread_manager.c index 4d1da83ac..21425786a 100644 --- a/core/iwasm/libraries/thread-mgr/thread_manager.c +++ b/core/iwasm/libraries/thread-mgr/thread_manager.c @@ -746,10 +746,10 @@ wasm_cluster_dup_c_api_imports(WASMModuleInstanceCommon *module_inst_dst, #if WASM_ENABLE_INTERP != 0 if (module_inst_src->module_type == Wasm_Module_Bytecode) { - new_c_api_func_imports = - &(((WASMModuleInstance *)module_inst_dst)->e->c_api_func_imports); + new_c_api_func_imports = &(((WASMModuleInstance *)module_inst_dst) + ->e->common.c_api_func_imports); c_api_func_imports = ((const WASMModuleInstance *)module_inst_src) - ->e->c_api_func_imports; + ->e->common.c_api_func_imports; import_func_count = ((WASMModule *)(((const WASMModuleInstance *)module_inst_src) ->module)) @@ -760,10 +760,10 @@ wasm_cluster_dup_c_api_imports(WASMModuleInstanceCommon *module_inst_dst, if (module_inst_src->module_type == Wasm_Module_AoT) { AOTModuleInstanceExtra *e = (AOTModuleInstanceExtra *)((AOTModuleInstance *)module_inst_dst)->e; - new_c_api_func_imports = &(e->c_api_func_imports); + new_c_api_func_imports = &(e->common.c_api_func_imports); e = (AOTModuleInstanceExtra *)((AOTModuleInstance *)module_inst_src)->e; - c_api_func_imports = e->c_api_func_imports; + c_api_func_imports = e->common.c_api_func_imports; import_func_count = ((AOTModule *)(((AOTModuleInstance *)module_inst_src)->module))