mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2024-11-26 15:32:05 +00:00
Allow to set native stack boundary to exec_env (#3862)
Add runtime API wasm_runtime_set_native_stack_boundary. p.s. https://github.com/bytecodealliance/wasm-micro-runtime/issues/3816
This commit is contained in:
parent
7e625a0624
commit
74d2427fdc
|
@ -282,6 +282,11 @@ wasm_exec_env_set_thread_info(WASMExecEnv *exec_env)
|
|||
os_mutex_lock(&exec_env->wait_lock);
|
||||
#endif
|
||||
exec_env->handle = os_self_thread();
|
||||
if (exec_env->user_native_stack_boundary)
|
||||
/* WASM_STACK_GUARD_SIZE isn't added for flexibility to developer,
|
||||
he must ensure that enough guard bytes are kept. */
|
||||
exec_env->native_stack_boundary = exec_env->user_native_stack_boundary;
|
||||
else
|
||||
exec_env->native_stack_boundary =
|
||||
stack_boundary ? stack_boundary + WASM_STACK_GUARD_SIZE : NULL;
|
||||
exec_env->native_stack_top_min = (void *)UINTPTR_MAX;
|
||||
|
|
|
@ -136,6 +136,10 @@ typedef struct WASMExecEnv {
|
|||
|
||||
void *user_data;
|
||||
|
||||
/* The boundary of native stack set by host embedder. It is used
|
||||
if it is not NULL when calling wasm functions. */
|
||||
uint8 *user_native_stack_boundary;
|
||||
|
||||
/* The native thread handle of current thread */
|
||||
korp_tid handle;
|
||||
|
||||
|
|
|
@ -2225,6 +2225,13 @@ wasm_runtime_get_user_data(WASMExecEnv *exec_env)
|
|||
return exec_env->user_data;
|
||||
}
|
||||
|
||||
void
|
||||
wasm_runtime_set_native_stack_boundary(WASMExecEnv *exec_env,
|
||||
uint8 *native_stack_boundary)
|
||||
{
|
||||
exec_env->user_native_stack_boundary = native_stack_boundary;
|
||||
}
|
||||
|
||||
#ifdef OS_ENABLE_HW_BOUND_CHECK
|
||||
void
|
||||
wasm_runtime_access_exce_check_guard_page()
|
||||
|
|
|
@ -673,6 +673,11 @@ wasm_runtime_set_user_data(WASMExecEnv *exec_env, void *user_data);
|
|||
WASM_RUNTIME_API_EXTERN void *
|
||||
wasm_runtime_get_user_data(WASMExecEnv *exec_env);
|
||||
|
||||
/* See wasm_export.h for description */
|
||||
WASM_RUNTIME_API_EXTERN void
|
||||
wasm_runtime_set_native_stack_boundary(WASMExecEnv *exec_env,
|
||||
uint8 *native_stack_boundary);
|
||||
|
||||
#if WASM_CONFIGURABLE_BOUNDS_CHECKS != 0
|
||||
/* See wasm_export.h for description */
|
||||
WASM_RUNTIME_API_EXTERN void
|
||||
|
|
|
@ -1755,6 +1755,26 @@ wasm_runtime_set_user_data(wasm_exec_env_t exec_env, void *user_data);
|
|||
WASM_RUNTIME_API_EXTERN void *
|
||||
wasm_runtime_get_user_data(wasm_exec_env_t exec_env);
|
||||
|
||||
/**
|
||||
* Set native stack boundary to execution environment, if it is set,
|
||||
* it will be used instead of getting the boundary with the platform
|
||||
* layer API when calling wasm functions. This is useful for some
|
||||
* fiber cases.
|
||||
*
|
||||
* Note: unlike setting the boundary by runtime, this API doesn't add
|
||||
* the WASM_STACK_GUARD_SIZE(see comments in core/config.h) to the
|
||||
* exec_env's native_stack_boundary to reserve bytes to the native
|
||||
* thread stack boundary, which is used to throw native stack overflow
|
||||
* exception if the guard boundary is reached. Developer should ensure
|
||||
* that enough guard bytes are kept.
|
||||
*
|
||||
* @param exec_env the execution environment
|
||||
* @param native_stack_boundary the user data to be set
|
||||
*/
|
||||
WASM_RUNTIME_API_EXTERN void
|
||||
wasm_runtime_set_native_stack_boundary(wasm_exec_env_t exec_env,
|
||||
uint8_t *native_stack_boundary);
|
||||
|
||||
/**
|
||||
* Dump runtime memory consumption, including:
|
||||
* Exec env memory consumption
|
||||
|
|
Loading…
Reference in New Issue
Block a user