Просмотр исходного кода

Support custom stack guard size (#1368)

Add a new option WAMR_BUILD_STACK_GUARD_SIZE to set the custom
stack guard size. For most RTOS systems, we use the native stack base
address as the check boundary which may be not safe as POSIX based
systems (like Linux).
Huang Qi 3 лет назад
Родитель
Сommit
88cf1e36c1

+ 4 - 0
build-scripts/config_common.cmake

@@ -262,3 +262,7 @@ if (WAMR_BUILD_LOAD_CUSTOM_SECTION EQUAL 1)
     add_definitions (-DWASM_ENABLE_LOAD_CUSTOM_SECTION=1)
     message ("     Load custom section enabled")
 endif ()
+if (WAMR_BUILD_STACK_GUARD_SIZE GREATER 0)
+    add_definitions (-DWASM_STACK_GUARD_SIZE=${WAMR_BUILD_STACK_GUARD_SIZE})
+    message ("     Custom stack guard size: " ${WAMR_BUILD_STACK_GUARD_SIZE})
+endif ()

+ 3 - 3
core/config.h

@@ -343,12 +343,12 @@
 
 /* Reserved bytes to the native thread stack boundary, throw native
    stack overflow exception if the guard boudary is reached */
-#ifndef RESERVED_BYTES_TO_NATIVE_STACK_BOUNDARY
+#ifndef WASM_STACK_GUARD_SIZE
 #if WASM_ENABLE_UVWASI != 0
 /* UVWASI requires larger native stack */
-#define RESERVED_BYTES_TO_NATIVE_STACK_BOUNDARY (4096 * 6)
+#define WASM_STACK_GUARD_SIZE (4096 * 6)
 #else
-#define RESERVED_BYTES_TO_NATIVE_STACK_BOUNDARY (1024)
+#define WASM_STACK_GUARD_SIZE (1024)
 #endif
 #endif
 

+ 3 - 2
core/iwasm/common/wasm_exec_env.c

@@ -189,9 +189,10 @@ wasm_exec_env_set_module_inst(WASMExecEnv *exec_env,
 void
 wasm_exec_env_set_thread_info(WASMExecEnv *exec_env)
 {
+    uint8 *stack_boundary = os_thread_get_stack_boundary();
     exec_env->handle = os_self_thread();
-    exec_env->native_stack_boundary = os_thread_get_stack_boundary()
-                                      + RESERVED_BYTES_TO_NATIVE_STACK_BOUNDARY;
+    exec_env->native_stack_boundary =
+        stack_boundary ? stack_boundary + WASM_STACK_GUARD_SIZE : NULL;
 }
 
 #if WASM_ENABLE_THREAD_MGR != 0

+ 4 - 0
doc/build_wamr.md

@@ -158,6 +158,10 @@ Currently we only profile the memory consumption of module, module_instance and
 
 > For AoT file, must use `--emit-custom-sections` to specify which sections need to be emitted into AoT file, otherwise all custom sections (except custom name section) will be ignored.
 
+### **Stack guard size**
+- **WAMR_BUILD_STACK_GUARD_SIZE**=n, default to N/A if not set.
+> Note: By default, the stack guard size is 1K (1024) or 24K (if uvwasi enabled).
+
 **Combination of configurations:**
 
 We can combine the configurations. For example, if we want to disable interpreter, enable AOT and WASI, we can run command:

+ 2 - 0
product-mini/platforms/nuttx/wamr.mk

@@ -147,6 +147,8 @@ CSRCS += wasm_loader.c
 endif
 endif
 
+CFLAGS += -DWASM_STACK_GUARD_SIZE=CONFIG_INTERPRETERS_WAMR_STACK_GUARD_SIZE
+
 ifeq ($(CONFIG_INTERPRETERS_WAMR_SHARED_MEMORY),y)
 CFLAGS += -DWASM_ENABLE_SHARED_MEMORY=1
 CSRCS += wasm_shared_memory.c