Disable aux stack allocations for threads spawned by wasi_thread_start (#1867)
This syscall doesn't need allocating stack or TLS and it's expected from the application to do that instead. E.g. WASI-libc already does this for `pthread_create`. Also fix some of the examples to allocate memory for stack and not use stack before the stack pointer is set to a correct value.
This commit is contained in:
@ -1783,14 +1783,18 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
|
||||
global = globals + global_idx;
|
||||
global_addr = get_global_addr(global_data, global);
|
||||
aux_stack_top = *(uint32 *)(frame_sp - 1);
|
||||
if (aux_stack_top <= exec_env->aux_stack_boundary.boundary) {
|
||||
wasm_set_exception(module, "wasm auxiliary stack overflow");
|
||||
goto got_exception;
|
||||
}
|
||||
if (aux_stack_top > exec_env->aux_stack_bottom.bottom) {
|
||||
wasm_set_exception(module,
|
||||
"wasm auxiliary stack underflow");
|
||||
goto got_exception;
|
||||
if (wasm_exec_env_is_aux_stack_managed_by_runtime(exec_env)) {
|
||||
if (aux_stack_top
|
||||
<= exec_env->aux_stack_boundary.boundary) {
|
||||
wasm_set_exception(module,
|
||||
"wasm auxiliary stack overflow");
|
||||
goto got_exception;
|
||||
}
|
||||
if (aux_stack_top > exec_env->aux_stack_bottom.bottom) {
|
||||
wasm_set_exception(module,
|
||||
"wasm auxiliary stack underflow");
|
||||
goto got_exception;
|
||||
}
|
||||
}
|
||||
*(int32 *)global_addr = aux_stack_top;
|
||||
frame_sp--;
|
||||
|
||||
@ -1576,14 +1576,18 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
|
||||
global = globals + global_idx;
|
||||
global_addr = get_global_addr(global_data, global);
|
||||
aux_stack_top = frame_lp[GET_OFFSET()];
|
||||
if (aux_stack_top <= exec_env->aux_stack_boundary.boundary) {
|
||||
wasm_set_exception(module, "wasm auxiliary stack overflow");
|
||||
goto got_exception;
|
||||
}
|
||||
if (aux_stack_top > exec_env->aux_stack_bottom.bottom) {
|
||||
wasm_set_exception(module,
|
||||
"wasm auxiliary stack underflow");
|
||||
goto got_exception;
|
||||
if (wasm_exec_env_is_aux_stack_managed_by_runtime(exec_env)) {
|
||||
if (aux_stack_top
|
||||
<= exec_env->aux_stack_boundary.boundary) {
|
||||
wasm_set_exception(module,
|
||||
"wasm auxiliary stack overflow");
|
||||
goto got_exception;
|
||||
}
|
||||
if (aux_stack_top > exec_env->aux_stack_bottom.bottom) {
|
||||
wasm_set_exception(module,
|
||||
"wasm auxiliary stack underflow");
|
||||
goto got_exception;
|
||||
}
|
||||
}
|
||||
*(int32 *)global_addr = aux_stack_top;
|
||||
#if WASM_ENABLE_MEMORY_PROFILING != 0
|
||||
|
||||
Reference in New Issue
Block a user