https://github.com/python/cpython/commit/72ea3c030a81262af64ebcae2e83ce2ff529bcef
commit: 72ea3c030a81262af64ebcae2e83ce2ff529bcef
branch: main
author: Ɓukasz Langa <[email protected]>
committer: freakboy3742 <[email protected]>
date: 2025-02-24T07:26:04+08:00
summary:

gh-128627: Skip wasm-gc on iOS Safari where it's broken (#130418)

As of iOS 18.3.1, enabling wasm-gc breaks the interpreter. This disables the 
wasm-gc
trampoline on iOS.

Co-authored-by: Hood Chatham <[email protected]>

files:
M Python/emscripten_trampoline.c

diff --git a/Python/emscripten_trampoline.c b/Python/emscripten_trampoline.c
index 0293c7ea0f37ad..a7bb685bf3dc6d 100644
--- a/Python/emscripten_trampoline.c
+++ b/Python/emscripten_trampoline.c
@@ -77,7 +77,13 @@ EM_JS(CountArgsFunc, _PyEM_GetCountArgsPtr, (), {
 //         i32.const -1
 //     )
 // )
-addOnPreRun(() => {
+
+function getPyEMCountArgsPtr() {
+    let isIOS = globalThis.navigator && 
/iPad|iPhone|iPod/.test(navigator.platform);
+    if (isIOS) {
+        return 0;
+    }
+
     // Try to initialize countArgsFunc
     const code = new Uint8Array([
         0x00, 0x61, 0x73, 0x6d, // \0asm magic number
@@ -149,15 +155,19 @@ addOnPreRun(() => {
             0x41, 0x7f,       // i32.const -1
             0x0b // end function
     ]);
-    let ptr = 0;
     try {
         const mod = new WebAssembly.Module(code);
         const inst = new WebAssembly.Instance(mod, { e: { t: wasmTable } });
-        ptr = addFunction(inst.exports.f);
+        return addFunction(inst.exports.f);
     } catch (e) {
         // If something goes wrong, we'll null out _PyEM_CountFuncParams and 
fall
         // back to the JS trampoline.
+        return 0;
     }
+}
+
+addOnPreRun(() => {
+    const ptr = getPyEMCountArgsPtr();
     Module._PyEM_CountArgsPtr = ptr;
     const offset = HEAP32[__PyEM_EMSCRIPTEN_COUNT_ARGS_OFFSET / 4];
     HEAP32[(__PyRuntime + offset) / 4] = ptr;

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to