From d1141f6f309b2ef4857df9cf5db3ab8bf52b096a Mon Sep 17 00:00:00 2001 From: TianlongLiang <111852609+TianlongLiang@users.noreply.github.com> Date: Thu, 29 Aug 2024 11:08:39 +0800 Subject: [PATCH] aot compiler: Allow to control stack boundary check when boundary check is enabled (#3754) In the AOT compiler, allow the user to control stack boundary check when the boundary check is enabled (e.g. `wamrc --bounds-checks=1`). Now the code logic is: 1. When `--stack-bounds-checks` is not set, it will be the same value as `--bounds-checks`. 2. When `--stack-bounds-checks` is set, it will be the option value no matter what the status of `--bounds-checks` is. --- core/iwasm/compilation/aot_llvm.c | 20 ++++++++++---------- core/iwasm/interpreter/wasm_interp_classic.c | 1 + wamr-compiler/main.c | 4 +--- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/core/iwasm/compilation/aot_llvm.c b/core/iwasm/compilation/aot_llvm.c index ab0b6ab0..39f64d81 100644 --- a/core/iwasm/compilation/aot_llvm.c +++ b/core/iwasm/compilation/aot_llvm.c @@ -2969,12 +2969,12 @@ aot_create_comp_context(const AOTCompData *comp_data, aot_comp_option_t option) sizeof(comp_ctx->target_arch)); if (option->bounds_checks == 1 || option->bounds_checks == 0) { - /* Set by user */ + /* Set by the user */ comp_ctx->enable_bound_check = (option->bounds_checks == 1) ? true : false; } else { - /* Unset by user, use default value */ + /* Unset by the user, use the default value */ if (strstr(comp_ctx->target_arch, "64") && !option->is_sgx_platform) { comp_ctx->enable_bound_check = false; @@ -2984,17 +2984,17 @@ aot_create_comp_context(const AOTCompData *comp_data, aot_comp_option_t option) } } - if (comp_ctx->enable_bound_check) { - /* Always enable stack boundary check if `bounds-checks` - is enabled */ - comp_ctx->enable_stack_bound_check = true; - } - else { - /* When `bounds-checks` is disabled, we set stack boundary - check status according to the input option */ + if (option->stack_bounds_checks == 1 + || option->stack_bounds_checks == 0) { + /* Set by the user */ comp_ctx->enable_stack_bound_check = (option->stack_bounds_checks == 1) ? true : false; } + else { + /* Unset by the user, use the default value, it will be the same + * value as the bound check */ + comp_ctx->enable_stack_bound_check = comp_ctx->enable_bound_check; + } if ((comp_ctx->enable_stack_bound_check || comp_ctx->enable_stack_estimation) diff --git a/core/iwasm/interpreter/wasm_interp_classic.c b/core/iwasm/interpreter/wasm_interp_classic.c index 4a8ba4e2..67f8c2d4 100644 --- a/core/iwasm/interpreter/wasm_interp_classic.c +++ b/core/iwasm/interpreter/wasm_interp_classic.c @@ -5739,6 +5739,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, /* use memmove when memory64 is enabled since len may be larger than UINT32_MAX */ memmove(mdst, msrc, len); + (void)dlen; #endif break; } diff --git a/wamr-compiler/main.c b/wamr-compiler/main.c index 8eed1c99..bd9e5435 100644 --- a/wamr-compiler/main.c +++ b/wamr-compiler/main.c @@ -142,9 +142,7 @@ print_help() printf(" with a runtime without the hardware bounds checks.\n"); printf(" --stack-bounds-checks=1/0 Enable or disable the bounds checks for native stack:\n"); printf(" if the option isn't set, the status is same as `--bounds-check`,\n"); - printf(" if the option is set:\n"); - printf(" (1) it is always enabled when `--bounds-checks` is enabled,\n"); - printf(" (2) else it is enabled/disabled according to the option value\n"); + printf(" if the option is set, the status is same as the option value\n"); printf(" --stack-usage= Generate a stack-usage file.\n"); printf(" Similarly to `clang -fstack-usage`.\n"); printf(" --format= Specifies the format of the output file\n");