Recently, while executing the same wasm file with different wasm runtime tools, the obtained results were different. Here are related files.
The given testcase simply mutated a wasm file, which was obtained by compiling C program generated with Csmithusing Emscripten Compiler(Emcc).
The original C program is c_file.c, the compilation results with Emscripten is wasm_file.wasm, and its wat format is wat_file.wat.
We mutated the wat file to change its global.set 0 in line 7627 with local.set 0. The result after mutation is mutated_file.wat, and its wasm format is mutated_file.wasm.
We use runtime tools such as wasmer, wasmtime, wasmedge and wasmi to execute mutated_file.wasm. Wasmtime outputs checksum results with runtime error, while other tools only output checksum results. The execution results of different tools are shown in the following figure.
It seems that tools such as wasmtime and wasmi validate exit status, while other tools do not. Mutation makes the provided status isn't in the printed range, resulting in runtime error for tools like wasmtime when outputting checksum results.
The current documentation for proc_exit does not exactly specify what to do here. So I wonder whether this behavior is still desired and/or should be codified in the documentation.
If not wasmtime should remove it. If so other runtimes should be updated. Thanks a lot!
Recently, while executing the same wasm file with different wasm runtime tools, the obtained results were different. Here are related files.
The given testcase simply mutated a wasm file, which was obtained by compiling C program generated with
Csmith
usingEmscripten Compiler
(Emcc).The original C program is
c_file.c
, the compilation results with Emscripten iswasm_file.wasm
, and its wat format iswat_file.wat
.We mutated the wat file to change its
global.set 0
in line 7627 withlocal.set 0
. The result after mutation ismutated_file.wat
, and its wasm format ismutated_file.wasm
.We use runtime tools such as wasmer, wasmtime, wasmedge and wasmi to execute![runtime result](https://github.com/WebAssembly/WASI/assets/92167273/b6c21a45-cda8-4a44-aa22-3771f4c2cb8d)
mutated_file.wasm
. Wasmtime outputs checksum results with runtime error, while other tools only output checksum results. The execution results of different tools are shown in the following figure.It seems that tools such as wasmtime and wasmi validate exit status, while other tools do not. Mutation makes the provided status isn't in the printed range, resulting in runtime error for tools like wasmtime when outputting checksum results.
The current documentation for
proc_exit
does not exactly specify what to do here. So I wonder whether this behavior is still desired and/or should be codified in the documentation. If not wasmtime should remove it. If so other runtimes should be updated. Thanks a lot!