Skip to content

Commit c3e33a9

Browse files
Remove unused argument in wasm_runtime_lookup_function and refactor WASMModuleInstance (#3218)
Remove the unused parameter `signature` from `wasm_runtime_lookup_function`. Refactor the layout of WASMModuleInstance structure: - move common data members `c_api_func_imports` and `cur_exec_env` from `WASMModuleInstanceExtraCommon` to `WASMModuleInstance` - In `WASMModuleInstance`, enlarge `reserved[3]` to `reserved[5]` in case that we need to add more fields in the future ps. #2530 #3202
1 parent ce44e0e commit c3e33a9

File tree

28 files changed

+100
-136
lines changed

28 files changed

+100
-136
lines changed

core/iwasm/aot/aot_runtime.c

+16-26
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,15 @@ bh_static_assert(offsetof(AOTModuleInstance, func_type_indexes)
4747
== 6 * sizeof(uint64));
4848
bh_static_assert(offsetof(AOTModuleInstance, cur_exception)
4949
== 13 * sizeof(uint64));
50+
bh_static_assert(offsetof(AOTModuleInstance, c_api_func_imports)
51+
== 13 * sizeof(uint64) + 128 + 8 * sizeof(uint64));
5052
bh_static_assert(offsetof(AOTModuleInstance, global_table_data)
51-
== 13 * sizeof(uint64) + 128 + 11 * sizeof(uint64));
53+
== 13 * sizeof(uint64) + 128 + 14 * sizeof(uint64));
5254

5355
bh_static_assert(sizeof(AOTMemoryInstance) == 112);
5456
bh_static_assert(offsetof(AOTTableInstance, elems) == 24);
5557

5658
bh_static_assert(offsetof(AOTModuleInstanceExtra, stack_sizes) == 0);
57-
bh_static_assert(offsetof(AOTModuleInstanceExtra, common.c_api_func_imports)
58-
== sizeof(uint64));
5959

6060
bh_static_assert(sizeof(CApiFuncImport) == sizeof(uintptr_t) * 3);
6161

@@ -1273,7 +1273,7 @@ lookup_post_instantiate_func(AOTModuleInstance *module_inst,
12731273
AOTFunctionInstance *func;
12741274
AOTFuncType *func_type;
12751275

1276-
if (!(func = aot_lookup_function(module_inst, func_name, NULL)))
1276+
if (!(func = aot_lookup_function(module_inst, func_name)))
12771277
/* Not found */
12781278
return NULL;
12791279

@@ -1908,9 +1908,8 @@ aot_deinstantiate(AOTModuleInstance *module_inst, bool is_sub_inst)
19081908
if (module_inst->func_type_indexes)
19091909
wasm_runtime_free(module_inst->func_type_indexes);
19101910

1911-
if (common->c_api_func_imports)
1912-
wasm_runtime_free(((AOTModuleInstanceExtra *)module_inst->e)
1913-
->common.c_api_func_imports);
1911+
if (module_inst->c_api_func_imports)
1912+
wasm_runtime_free(module_inst->c_api_func_imports);
19141913

19151914
#if WASM_ENABLE_GC != 0
19161915
if (!is_sub_inst) {
@@ -1941,8 +1940,7 @@ aot_deinstantiate(AOTModuleInstance *module_inst, bool is_sub_inst)
19411940
}
19421941

19431942
AOTFunctionInstance *
1944-
aot_lookup_function(const AOTModuleInstance *module_inst, const char *name,
1945-
const char *signature)
1943+
aot_lookup_function(const AOTModuleInstance *module_inst, const char *name)
19461944
{
19471945
uint32 i;
19481946
AOTFunctionInstance *export_funcs =
@@ -1951,7 +1949,6 @@ aot_lookup_function(const AOTModuleInstance *module_inst, const char *name,
19511949
for (i = 0; i < module_inst->export_func_count; i++)
19521950
if (!strcmp(export_funcs[i].func_name, name))
19531951
return &export_funcs[i];
1954-
(void)signature;
19551952
return NULL;
19561953
}
19571954

@@ -2157,8 +2154,8 @@ aot_call_function(WASMExecEnv *exec_env, AOTFunctionInstance *function,
21572154
hw bound check is enabled */
21582155
#endif
21592156

2160-
/* Set exec env so it can be later retrieved from instance */
2161-
((AOTModuleInstanceExtra *)module_inst->e)->common.cur_exec_env = exec_env;
2157+
/* Set exec env, so it can be later retrieved from instance */
2158+
module_inst->cur_exec_env = exec_env;
21622159

21632160
if (ext_ret_count > 0) {
21642161
uint32 cell_num = 0, i;
@@ -2497,22 +2494,18 @@ aot_module_malloc_internal(AOTModuleInstance *module_inst,
24972494
&& module->free_func_index != (uint32)-1) {
24982495
AOTFunctionInstance *malloc_func, *retain_func = NULL;
24992496
char *malloc_func_name;
2500-
char *malloc_func_sig;
25012497

25022498
if (module->retain_func_index != (uint32)-1) {
25032499
malloc_func_name = "__new";
2504-
malloc_func_sig = "(ii)i";
2505-
retain_func = aot_lookup_function(module_inst, "__retain", "(i)i");
2500+
retain_func = aot_lookup_function(module_inst, "__retain");
25062501
if (!retain_func)
2507-
retain_func = aot_lookup_function(module_inst, "__pin", "(i)i");
2502+
retain_func = aot_lookup_function(module_inst, "__pin");
25082503
bh_assert(retain_func);
25092504
}
25102505
else {
25112506
malloc_func_name = "malloc";
2512-
malloc_func_sig = "(i)i";
25132507
}
2514-
malloc_func =
2515-
aot_lookup_function(module_inst, malloc_func_name, malloc_func_sig);
2508+
malloc_func = aot_lookup_function(module_inst, malloc_func_name);
25162509

25172510
if (!malloc_func
25182511
|| !execute_malloc_function(module_inst, exec_env, malloc_func,
@@ -2621,10 +2614,9 @@ aot_module_free_internal(AOTModuleInstance *module_inst, WASMExecEnv *exec_env,
26212614
else {
26222615
free_func_name = "free";
26232616
}
2624-
free_func =
2625-
aot_lookup_function(module_inst, free_func_name, "(i)i");
2617+
free_func = aot_lookup_function(module_inst, free_func_name);
26262618
if (!free_func && module->retain_func_index != (uint32)-1)
2627-
free_func = aot_lookup_function(module_inst, "__unpin", "(i)i");
2619+
free_func = aot_lookup_function(module_inst, "__unpin");
26282620

26292621
if (free_func)
26302622
execute_free_function(module_inst, exec_env, free_func,
@@ -2687,11 +2679,9 @@ aot_invoke_native(WASMExecEnv *exec_env, uint32 func_idx, uint32 argc,
26872679
AOTModuleInstance *module_inst =
26882680
(AOTModuleInstance *)wasm_runtime_get_module_inst(exec_env);
26892681
AOTModule *aot_module = (AOTModule *)module_inst->module;
2690-
AOTModuleInstanceExtra *module_inst_extra =
2691-
(AOTModuleInstanceExtra *)module_inst->e;
26922682
CApiFuncImport *c_api_func_import =
2693-
module_inst_extra->common.c_api_func_imports
2694-
? module_inst_extra->common.c_api_func_imports + func_idx
2683+
module_inst->c_api_func_imports
2684+
? module_inst->c_api_func_imports + func_idx
26952685
: NULL;
26962686
uint32 *func_type_indexes = module_inst->func_type_indexes;
26972687
uint32 func_type_idx = func_type_indexes[func_idx];

core/iwasm/aot/aot_runtime.h

+2-4
Original file line numberDiff line numberDiff line change
@@ -499,14 +499,12 @@ aot_deinstantiate(AOTModuleInstance *module_inst, bool is_sub_inst);
499499
*
500500
* @param module_inst the module instance
501501
* @param name the name of the function
502-
* @param signature the signature of the function, use "i32"/"i64"/"f32"/"f64"
503-
* to represent the type of i32/i64/f32/f64, e.g. "(i32i64)" "(i32)f32"
504502
*
505503
* @return the function instance found
506504
*/
507505
AOTFunctionInstance *
508-
aot_lookup_function(const AOTModuleInstance *module_inst, const char *name,
509-
const char *signature);
506+
aot_lookup_function(const AOTModuleInstance *module_inst, const char *name);
507+
510508
/**
511509
* Call the given AOT function of a AOT module instance with
512510
* arguments.

core/iwasm/common/wasm_application.c

+5-6
Original file line numberDiff line numberDiff line change
@@ -147,10 +147,10 @@ execute_main(WASMModuleInstanceCommon *module_inst, int32 argc, char *argv[])
147147
}
148148
#endif /* end of WASM_ENABLE_LIBC_WASI */
149149

150-
if (!(func = wasm_runtime_lookup_function(module_inst, "main", NULL))
151-
&& !(func = wasm_runtime_lookup_function(module_inst,
152-
"__main_argc_argv", NULL))
153-
&& !(func = wasm_runtime_lookup_function(module_inst, "_main", NULL))) {
150+
if (!(func = wasm_runtime_lookup_function(module_inst, "main"))
151+
&& !(func =
152+
wasm_runtime_lookup_function(module_inst, "__main_argc_argv"))
153+
&& !(func = wasm_runtime_lookup_function(module_inst, "_main"))) {
154154
#if WASM_ENABLE_LIBC_WASI != 0
155155
wasm_runtime_set_exception(
156156
module_inst, "lookup the entry point symbol (like _start, main, "
@@ -337,8 +337,7 @@ execute_func(WASMModuleInstanceCommon *module_inst, const char *name,
337337
bh_assert(argc >= 0);
338338
LOG_DEBUG("call a function \"%s\" with %d arguments", name, argc);
339339

340-
if (!(target_func =
341-
wasm_runtime_lookup_function(module_inst, name, NULL))) {
340+
if (!(target_func = wasm_runtime_lookup_function(module_inst, name))) {
342341
snprintf(buf, sizeof(buf), "lookup function %s failed", name);
343342
wasm_runtime_set_exception(module_inst, buf);
344343
goto fail;

core/iwasm/common/wasm_c_api.c

+7-9
Original file line numberDiff line numberDiff line change
@@ -4939,19 +4939,17 @@ wasm_instance_new_with_args_ex(wasm_store_t *store, const wasm_module_t *module,
49394939
/* create the c-api func import list */
49404940
#if WASM_ENABLE_INTERP != 0
49414941
if (instance->inst_comm_rt->module_type == Wasm_Module_Bytecode) {
4942-
WASMModuleInstanceExtra *e =
4943-
((WASMModuleInstance *)instance->inst_comm_rt)->e;
4944-
p_func_imports = &(e->common.c_api_func_imports);
4942+
WASMModuleInstance *wasm_module_inst =
4943+
(WASMModuleInstance *)instance->inst_comm_rt;
4944+
p_func_imports = &(wasm_module_inst->c_api_func_imports);
49454945
import_func_count = MODULE_INTERP(module)->import_function_count;
49464946
}
49474947
#endif
49484948
#if WASM_ENABLE_AOT != 0
49494949
if (instance->inst_comm_rt->module_type == Wasm_Module_AoT) {
4950-
AOTModuleInstanceExtra *e =
4951-
(AOTModuleInstanceExtra *)((AOTModuleInstance *)
4952-
instance->inst_comm_rt)
4953-
->e;
4954-
p_func_imports = &(e->common.c_api_func_imports);
4950+
AOTModuleInstance *aot_module_inst =
4951+
(AOTModuleInstance *)instance->inst_comm_rt;
4952+
p_func_imports = &(aot_module_inst->c_api_func_imports);
49554953
import_func_count = MODULE_AOT(module)->import_func_count;
49564954
}
49574955
#endif
@@ -4965,7 +4963,7 @@ wasm_instance_new_with_args_ex(wasm_store_t *store, const wasm_module_t *module,
49654963
goto failed;
49664964
}
49674965

4968-
/* fill in module_inst->e->c_api_func_imports */
4966+
/* fill in module_inst->c_api_func_imports */
49694967
for (i = 0; imports && i < imports->num_elems; i++) {
49704968
wasm_func_t *func_host = NULL;
49714969
wasm_extern_t *in = imports->data[i];

core/iwasm/common/wasm_memory.c

+2-4
Original file line numberDiff line numberDiff line change
@@ -823,13 +823,11 @@ wasm_enlarge_memory_internal(WASMModuleInstance *module, uint32 inc_page_count)
823823

824824
#if WASM_ENABLE_INTERP != 0
825825
if (module->module_type == Wasm_Module_Bytecode)
826-
exec_env =
827-
((WASMModuleInstanceExtra *)module->e)->common.cur_exec_env;
826+
exec_env = ((WASMModuleInstance *)module)->cur_exec_env;
828827
#endif
829828
#if WASM_ENABLE_AOT != 0
830829
if (module->module_type == Wasm_Module_AoT)
831-
exec_env =
832-
((AOTModuleInstanceExtra *)module->e)->common.cur_exec_env;
830+
exec_env = ((AOTModuleInstance *)module)->cur_exec_env;
833831
#endif
834832

835833
enlarge_memory_error_cb(inc_page_count, total_size_old, 0,

core/iwasm/common/wasm_runtime_common.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -1853,17 +1853,17 @@ wasm_runtime_get_function_type(const WASMFunctionInstanceCommon *function,
18531853

18541854
WASMFunctionInstanceCommon *
18551855
wasm_runtime_lookup_function(WASMModuleInstanceCommon *const module_inst,
1856-
const char *name, const char *signature)
1856+
const char *name)
18571857
{
18581858
#if WASM_ENABLE_INTERP != 0
18591859
if (module_inst->module_type == Wasm_Module_Bytecode)
18601860
return (WASMFunctionInstanceCommon *)wasm_lookup_function(
1861-
(const WASMModuleInstance *)module_inst, name, signature);
1861+
(const WASMModuleInstance *)module_inst, name);
18621862
#endif
18631863
#if WASM_ENABLE_AOT != 0
18641864
if (module_inst->module_type == Wasm_Module_AoT)
18651865
return (WASMFunctionInstanceCommon *)aot_lookup_function(
1866-
(const AOTModuleInstance *)module_inst, name, signature);
1866+
(const AOTModuleInstance *)module_inst, name);
18671867
#endif
18681868
return NULL;
18691869
}

core/iwasm/common/wasm_runtime_common.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -611,7 +611,7 @@ wasm_runtime_get_module(WASMModuleInstanceCommon *module_inst);
611611
/* See wasm_export.h for description */
612612
WASM_RUNTIME_API_EXTERN WASMFunctionInstanceCommon *
613613
wasm_runtime_lookup_function(WASMModuleInstanceCommon *const module_inst,
614-
const char *name, const char *signature);
614+
const char *name);
615615

616616
/* Internal API */
617617
WASMFuncType *

core/iwasm/compilation/aot_emit_function.c

+3-7
Original file line numberDiff line numberDiff line change
@@ -329,13 +329,9 @@ call_aot_invoke_c_api_native(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx,
329329

330330
param_values[0] = func_ctx->aot_inst;
331331

332-
/* Get module_inst->e->common.c_api_func_imports */
333-
offset_c_api_func_imports =
334-
get_module_inst_extra_offset(comp_ctx)
335-
+ (comp_ctx->is_jit_mode
336-
? offsetof(WASMModuleInstanceExtra, common.c_api_func_imports)
337-
/* offsetof(AOTModuleInstanceExtra, common.c_api_func_imports) */
338-
: sizeof(uint64));
332+
/* Get module_inst->c_api_func_imports, jit mode WASMModuleInstance is the
333+
* same layout with AOTModuleInstance */
334+
offset_c_api_func_imports = offsetof(AOTModuleInstance, c_api_func_imports);
339335
offset = I32_CONST(offset_c_api_func_imports);
340336
CHECK_LLVM_CONST(offset);
341337
c_api_func_imports =

core/iwasm/compilation/aot_llvm.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ create_basic_func_context(const AOTCompContext *comp_ctx,
124124
{
125125
LLVMValueRef aot_inst_offset = I32_TWO, aot_inst_addr;
126126

127-
/* Save the pameters for fast access */
127+
/* Save the parameters for fast access */
128128
func_ctx->exec_env = LLVMGetParam(func_ctx->func, 0);
129129

130130
/* Get aot inst address, the layout of exec_env is:

core/iwasm/include/wasm_export.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -616,13 +616,12 @@ wasm_runtime_get_wasi_exit_code(wasm_module_inst_t module_inst);
616616
*
617617
* @param module_inst the module instance
618618
* @param name the name of the function
619-
* @param signature the signature of the function, ignored currently
620619
*
621620
* @return the function instance found, NULL if not found
622621
*/
623622
WASM_RUNTIME_API_EXTERN wasm_function_inst_t
624623
wasm_runtime_lookup_function(wasm_module_inst_t const module_inst,
625-
const char *name, const char *signature);
624+
const char *name);
626625

627626
/**
628627
* Get parameter count of the function instance

core/iwasm/interpreter/wasm_interp_classic.c

+6-8
Original file line numberDiff line numberDiff line change
@@ -1106,9 +1106,8 @@ wasm_interp_call_func_native(WASMModuleInstance *module_inst,
11061106
if (!func_import->call_conv_wasm_c_api) {
11071107
native_func_pointer = module_inst->import_func_ptrs[cur_func_index];
11081108
}
1109-
else if (module_inst->e->common.c_api_func_imports) {
1110-
c_api_func_import =
1111-
module_inst->e->common.c_api_func_imports + cur_func_index;
1109+
else if (module_inst->c_api_func_imports) {
1110+
c_api_func_import = module_inst->c_api_func_imports + cur_func_index;
11121111
native_func_pointer = c_api_func_import->func_ptr_linked;
11131112
}
11141113

@@ -5427,8 +5426,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
54275426
#ifndef OS_ENABLE_HW_BOUND_CHECK
54285427
CHECK_BULK_MEMORY_OVERFLOW(addr, bytes, maddr);
54295428
#else
5430-
if ((uint64)(uint32)addr + bytes
5431-
> (uint64)linear_mem_size)
5429+
if ((uint64)(uint32)addr + bytes > linear_mem_size)
54325430
goto out_of_bounds;
54335431
maddr = memory->memory_data + (uint32)addr;
54345432
#endif
@@ -5447,7 +5445,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
54475445
if (offset + bytes > seg_len)
54485446
goto out_of_bounds;
54495447

5450-
bh_memcpy_s(maddr, linear_mem_size - addr,
5448+
bh_memcpy_s(maddr, (uint32)(linear_mem_size - addr),
54515449
data + offset, (uint32)bytes);
54525450
break;
54535451
}
@@ -5479,11 +5477,11 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
54795477
CHECK_BULK_MEMORY_OVERFLOW(src, len, msrc);
54805478
CHECK_BULK_MEMORY_OVERFLOW(dst, len, mdst);
54815479
#else
5482-
if ((uint64)(uint32)src + len > (uint64)linear_mem_size)
5480+
if ((uint64)(uint32)src + len > linear_mem_size)
54835481
goto out_of_bounds;
54845482
msrc = memory->memory_data + (uint32)src;
54855483

5486-
if ((uint64)(uint32)dst + len > (uint64)linear_mem_size)
5484+
if ((uint64)(uint32)dst + len > linear_mem_size)
54875485
goto out_of_bounds;
54885486
mdst = memory->memory_data + (uint32)dst;
54895487
#endif

core/iwasm/interpreter/wasm_interp_fast.c

+2-3
Original file line numberDiff line numberDiff line change
@@ -1187,9 +1187,8 @@ wasm_interp_call_func_native(WASMModuleInstance *module_inst,
11871187
if (!func_import->call_conv_wasm_c_api) {
11881188
native_func_pointer = module_inst->import_func_ptrs[cur_func_index];
11891189
}
1190-
else if (module_inst->e->common.c_api_func_imports) {
1191-
c_api_func_import =
1192-
module_inst->e->common.c_api_func_imports + cur_func_index;
1190+
else if (module_inst->c_api_func_imports) {
1191+
c_api_func_import = module_inst->c_api_func_imports + cur_func_index;
11931192
native_func_pointer = c_api_func_import->func_ptr_linked;
11941193
}
11951194

0 commit comments

Comments
 (0)