From 7bdea3c2ae1f23683299c008bd5093ccaeb5f7b1 Mon Sep 17 00:00:00 2001 From: YAMAMOTO Takashi Date: Mon, 22 Apr 2024 16:00:09 +0900 Subject: [PATCH] Add some more comments on WASM_STACK_GUARD_SIZE (#3341) --- core/config.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/core/config.h b/core/config.h index 5758132d77..c341a9ad54 100644 --- a/core/config.h +++ b/core/config.h @@ -450,9 +450,11 @@ * WASM_STACK_GUARD_SIZE needs to be large enough for: * * - native functions + * * w/o hw bound check, the overhead (aot_call_function etc) + the native * function itself. as of writing this, the former is about 1000 bytes * on macOS amd64. + * * with hw bound check, theoretically, only needs to cover the logic to * set up the jmp_buf stack. * @@ -461,9 +463,20 @@ * * - w/o hw bound check, the intepreter loop * + * the classic interpreter wasm_interp_call_func_bytecode alone + * seems to consume about 2600 bytes stack. + * (with the default configuration for macOS/amd64) + * + * libc snprintf (used by eg. wasm_runtime_set_exception) consumes about + * 1600 bytes stack on macOS/amd64, about 2000 bytes on Ubuntu amd64 20.04. + * * - stack check wrapper functions generated by the aot compiler * (--stack-bounds-checks=1) * + * wamrc issues a warning + * "precheck functions themselves consume relatively large amount of stack" + * when it detects wrapper functions requiring more than 1KB. + * * Note: on platforms with lazy function binding, don't forget to consider * the symbol resolution overhead on the first call. For example, * on Ubuntu amd64 20.04, it seems to consume about 1500 bytes.