Skip to content

Commit

Permalink
Support custom stack guard size (bytecodealliance#1368)
Browse files Browse the repository at this point in the history
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).
  • Loading branch information
no1wudi authored Aug 12, 2022
1 parent e23acfa commit 88cf1e3
Show file tree
Hide file tree
Showing 5 changed files with 16 additions and 5 deletions.
4 changes: 4 additions & 0 deletions build-scripts/config_common.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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 ()
6 changes: 3 additions & 3 deletions core/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
5 changes: 3 additions & 2 deletions core/iwasm/common/wasm_exec_env.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions doc/build_wamr.md
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
2 changes: 2 additions & 0 deletions product-mini/platforms/nuttx/wamr.mk
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 88cf1e3

Please sign in to comment.