summaryrefslogtreecommitdiff
path: root/wasm
diff options
context:
space:
mode:
-rw-r--r--wasm/asyncify.h10
-rw-r--r--wasm/setjmp.c70
-rw-r--r--wasm/setjmp.h34
3 files changed, 114 insertions, 0 deletions
@@ -3,8 +3,18 @@
__attribute__((import_module("asyncify"), import_name("start_unwind")))
void asyncify_start_unwind(void *buf);
__attribute__((import_module("asyncify"), import_name("stop_unwind")))
void asyncify_stop_unwind(void);
__attribute__((import_module("asyncify"), import_name("start_rewind")))
void asyncify_start_rewind(void *buf);
__attribute__((import_module("asyncify"), import_name("stop_rewind")))
@@ -57,6 +57,7 @@ async_buf_init(struct __rb_wasm_asyncify_jmp_buf* buf)
// Global unwinding/rewinding jmpbuf state
static rb_wasm_jmp_buf *_rb_wasm_active_jmpbuf;
__attribute__((noinline))
int
@@ -106,6 +107,75 @@ _rb_wasm_longjmp(rb_wasm_jmp_buf* env, int value)
asyncify_start_unwind(&env->longjmp_buf);
}
void *
rb_wasm_handle_jmp_unwind(void)
{
@@ -58,4 +58,38 @@ typedef rb_wasm_jmp_buf jmp_buf;
#define setjmp(env) rb_wasm_setjmp(env)
#define longjmp(env, payload) rb_wasm_longjmp(env, payload)
#endif