fix(wasm): bind dynCall_* to real DYNCALLS=1 exports; refactor shim into files
The shim bound bare dynCall_* names to JS getWasmTableEntry() calls, bypassing the asyncify-instrumented dynCall_* wasm trampolines that -sDYNCALLS=1 provides. That broke Asyncify unwind/rewind through indirect calls -> "indirect call signature mismatch" (caught every frame in Firefox; fatal renderer crash in Chrome). Bind the bare names to wasmExports["dynCall_<sig>"] instead. Result: the PCBnew "select draw lines" e2e is green in Firefox (tool selects and draws, zero page errors). Dropped the fiber-stabilization block, the shipped diagnostic block, and the exportCallStack JS hack (all compensated for the wrong binding); shim shrank 521 -> ~250 lines. - scripts/common/inject-dyncall-shims.sh: orchestrator only; injected JS extracted to scripts/common/shims/ - scripts/common/shims/dyncall-binding.js.tmpl: per-signature binding template - scripts/common/shims/handlesleep.js: nested-Asyncify handleSleep fix (#9153) - scripts/common/shims/diagnostics.js: logging-only, opt-in via SHIM_DIAGNOSTICS=1 - tests/package.json: add test:kicad:firefox / test:kicad:chrome scripts Known issue (tracked separately): Chrome still renderer-crashes on the first coroutine resume. Asyncify.doRewind replays the deep main-context call stack and exceeds V8's execution-stack limit (Firefox tolerates the same wasm). Proper fix is JSPI. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
9a04217788
commit
a4ad69412e
5 changed files with 259 additions and 466 deletions
|
|
@ -9,8 +9,10 @@
|
|||
"build-wasm": "cd apps && make -f Makefile.wasm",
|
||||
"serve": "npx serve apps -p 8080 -c ../serve.json",
|
||||
"setup:kicad": "./scripts/setup-kicad-wasm.sh",
|
||||
"test:kicad": "npm run setup:kicad && playwright test --config=playwright-kicad.config.ts --project=firefox --headed",
|
||||
"test:kicad:headed": "npm run setup:kicad && playwright test --config=playwright-kicad.config.ts --project=chromium --headed"
|
||||
"test:kicad:firefox": "npm run setup:kicad && playwright test --config=playwright-kicad.config.ts --project=firefox",
|
||||
"test:kicad:chrome": "npm run setup:kicad && playwright test --config=playwright-kicad.config.ts --project=chromium --headed",
|
||||
"test:kicad": "npm run test:kicad:firefox",
|
||||
"test:kicad:headed": "npm run test:kicad:chrome"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@playwright/test": "^1.40.0",
|
||||
|
|
|
|||
Loading…
Reference in a new issue