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