diff --git a/core/iwasm/compilation/aot_llvm.c b/core/iwasm/compilation/aot_llvm.c index 028faf6e..25b2e4e2 100644 --- a/core/iwasm/compilation/aot_llvm.c +++ b/core/iwasm/compilation/aot_llvm.c @@ -263,12 +263,11 @@ get_inst_extra_offset(AOTCompContext *comp_ctx) * - update native_stack_top_min if necessary * - stack overflow check (if it does, trap) */ -static LLVMValueRef -aot_add_precheck_function(AOTCompContext *comp_ctx, LLVMModuleRef module, - uint32 func_index, uint32 orig_param_count, - LLVMTypeRef func_type, LLVMValueRef wrapped_func) +static bool +aot_build_precheck_function(AOTCompContext *comp_ctx, LLVMModuleRef module, + LLVMValueRef precheck_func, uint32 func_index, + LLVMTypeRef func_type, LLVMValueRef wrapped_func) { - LLVMValueRef precheck_func; LLVMBasicBlockRef begin = NULL; LLVMBasicBlockRef check_top_block = NULL; LLVMBasicBlockRef update_top_block = NULL; @@ -276,12 +275,6 @@ aot_add_precheck_function(AOTCompContext *comp_ctx, LLVMModuleRef module, LLVMBasicBlockRef call_wrapped_func_block = NULL; LLVMValueRef *params = NULL; - precheck_func = - aot_add_llvm_func1(comp_ctx, module, func_index, orig_param_count, - func_type, AOT_FUNC_PREFIX); - if (!precheck_func) { - goto fail; - } begin = LLVMAppendBasicBlockInContext(comp_ctx->context, precheck_func, "begin"); check_top_block = LLVMAppendBasicBlockInContext( @@ -550,13 +543,13 @@ aot_add_precheck_function(AOTCompContext *comp_ctx, LLVMModuleRef module, } } - return precheck_func; + return true; fail: if (params != NULL) { wasm_runtime_free(params); } aot_set_last_error("failed to build precheck wrapper function."); - return NULL; + return false; } /** @@ -626,7 +619,14 @@ aot_add_llvm_func(AOTCompContext *comp_ctx, LLVMModuleRef module, const char *prefix = AOT_FUNC_PREFIX; const bool need_precheck = comp_ctx->enable_stack_bound_check || comp_ctx->enable_stack_estimation; + LLVMValueRef precheck_func; if (need_precheck) { + precheck_func = aot_add_llvm_func1(comp_ctx, module, func_index, + aot_func_type->param_count, + func_type, AOT_FUNC_PREFIX); + if (!precheck_func) { + goto fail; + } /* * REVISIT: probably this breaks windows hw bound check * (the RtlAddFunctionTable stuff) @@ -671,10 +671,8 @@ aot_add_llvm_func(AOTCompContext *comp_ctx, LLVMModuleRef module, LLVMAddAttributeAtIndex(func, LLVMAttributeFunctionIndex, attr_noinline); - LLVMValueRef precheck_func = aot_add_precheck_function( - comp_ctx, module, func_index, aot_func_type->param_count, func_type, - func); - if (!precheck_func) + if (!aot_build_precheck_function(comp_ctx, module, precheck_func, + func_index, func_type, func)) goto fail; LLVMAddAttributeAtIndex(precheck_func, LLVMAttributeFunctionIndex, attr_noinline);