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 <roberthoodchatham@gmail.com>
This commit is contained in:
Łukasz Langa 2025-02-24 00:26:04 +01:00 committed by GitHub
parent 81a9b53fee
commit 72ea3c030a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -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;