Эх сурвалжийг харах

Document how to use WASI threads in AOT mode (#1905)

Describe how to use WASI threads in AOT mode, following the discussion below:
  https://github.com/bytecodealliance/wasm-micro-runtime/pull/1867#discussion_r1070268062

Make aux stack boundary checks of wasi-threads always successful by setting
`exec_env->aux_stack_bottom` to UINT32_MAX and `exec_env->aux_stack_boundary` to 0
Enrico Loparco 3 жил өмнө
parent
commit
2eed50b303

+ 8 - 12
core/iwasm/interpreter/wasm_interp_classic.c

@@ -1780,18 +1780,14 @@ 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 (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;
-                    }
+                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--;

+ 8 - 12
core/iwasm/interpreter/wasm_interp_fast.c

@@ -1576,18 +1576,14 @@ 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 (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;
-                    }
+                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

+ 5 - 0
core/iwasm/libraries/thread-mgr/thread_manager.c

@@ -586,6 +586,11 @@ wasm_cluster_create_thread(WASMExecEnv *exec_env,
             goto fail3;
         }
     }
+    else {
+        /* Disable aux stack */
+        new_exec_env->aux_stack_boundary.boundary = 0;
+        new_exec_env->aux_stack_bottom.bottom = UINT32_MAX;
+    }
 
     if (!wasm_cluster_add_exec_env(cluster, new_exec_env))
         goto fail3;

+ 8 - 1
samples/wasi-threads/README.md

@@ -10,7 +10,7 @@ make \
     THREAD_MODEL=posix
 ```
 
-Build and run the samples
+## Build and run the samples
 
 ```shell
 $ mkdir build
@@ -22,3 +22,10 @@ $ ./iwasm wasm-apps/no_pthread.wasm
 ...
 $ ./iwasm wasm-apps/exception_propagation.wasm
 ```
+
+## Run samples in AOT mode
+```shell
+$ ../../../wamr-compiler/build/wamrc \
+    -o wasm-apps/no_pthread.aot wasm-apps/no_pthread.wasm
+$ ./iwasm wasm-apps/no_pthread.aot
+```