From 33d9db17f31f59ef72d6d8dac033a84c45d3c216 Mon Sep 17 00:00:00 2001 From: Cheng Shao <terrorjack@type.dance> Date: Mon, 16 Sep 2024 06:13:27 +0000 Subject: [PATCH] rts: add __wrapped_freeJSVal This commit wraps imported freeJSVal in a __wrapped_freeJSVal C function for wasm backend RTS. In general, wasm imports are only supposed to be directly called by C; they shouldn't be used as function pointers, which confuses wasm-ld at link-time when generating shared libraries. --- rts/wasm/JSFFI.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/rts/wasm/JSFFI.c b/rts/wasm/JSFFI.c index 6883ff27d5c..d5832ca66bf 100644 --- a/rts/wasm/JSFFI.c +++ b/rts/wasm/JSFFI.c @@ -83,6 +83,10 @@ JSValKey __imported_newJSVal(HsJSVal); __attribute__((import_module("ghc_wasm_jsffi"), import_name("freeJSVal"))) void __imported_freeJSVal(JSValKey); +static void __wrapped_freeJSVal(JSValKey k) { + __imported_freeJSVal(k); +} + HaskellObj rts_mkJSVal(Capability*, HsJSVal); HaskellObj rts_mkJSVal(Capability *cap, HsJSVal v) { JSValKey k = __imported_newJSVal(v); @@ -95,7 +99,7 @@ HaskellObj rts_mkJSVal(Capability *cap, HsJSVal v) { (StgCFinalizerList *)allocate(cap, sizeofW(StgCFinalizerList)); SET_HDR(cfin, &stg_C_FINALIZER_LIST_info, CCS_SYSTEM); cfin->link = &stg_NO_FINALIZER_closure; - cfin->fptr = (void (*)(void))__imported_freeJSVal; + cfin->fptr = (void (*)(void))__wrapped_freeJSVal; cfin->ptr = (void *)k; cfin->flag = 0; -- GitLab