summaryrefslogtreecommitdiff
path: root/wasm/runtime.c
AgeCommit message (Collapse)Author
2023-11-22[wasm] Fix Asyncify loop exit condition for normal return (#9007)Yuta Saito
[wasm] Fix Asyncify loop exit condition for normal return Stop calling `asyncify_stop_unwind` when the main function returns without any unwinding. In the era when Asyncify buffers were allocated on the stack, the `top` and `end` fields were remained in the stack space even after the main function returned, so buffer-overflow check in the `asyncify_stop_unwind` function passed. But now, the `top` and `end` fields are part of the jump buffer allocated on the heap and they are deallocated with `free` when the corresponding VM tag is popped. So, the buffer-overflow check in the `asyncify_stop_unwind` function failed when the main fuction returned without any unwinding, and we have to break the asyncify loop before calling `asyncify_stop_unwind`. Related commit: https://github.com/ruby/ruby.wasm/commit/bc46b12b127e4b6625a100f373504ed5ea45ae66
2022-01-19[wasm] add asyncify based setjmp, fiber, register scan emulationYuta Saito
configure.ac: setup build tools and register objects main.c: wrap main with rb_wasm_rt_start to handle asyncify unwinds tool/m4/ruby_wasm_tools.m4: setup default command based on WASI_SDK_PATH environment variable. checks wasm-opt which is used for asyncify. tool/wasm-clangw wasm/wasm-opt: a clang wrapper which replaces real wasm-opt with do-nothing wasm-opt to avoid misoptimization before asyncify. asyncify is performed at POSTLINK, but clang linker driver tries to run optimization by wasm-opt unconditionally. inlining pass at wasm level breaks asyncify's assumption, so should not optimize before POSTLIK. wasm/GNUmakefile.in: wasm specific rules to compile objects Notes: Merged: https://github.com/ruby/ruby/pull/5407