Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for Emscripten version 3.1.57 #2290

Merged
merged 2 commits into from
Jul 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion imports/emscripten/emscripten_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ var growWasm []byte

// invokeWasm was generated by the following:
//
// cd testdata; wat2wasm --debug-names invoke.wat
// cd testdata; wasm-tools parse invoke.wat -o invoke.wasm
//
//go:embed testdata/invoke.wasm
var invokeWasm []byte
Expand Down
Binary file modified imports/emscripten/testdata/invoke.wasm
Binary file not shown.
4 changes: 2 additions & 2 deletions imports/emscripten/testdata/invoke.wat
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@
(table 22 22 funcref)

(global $__stack_pointer (mut i32) (i32.const 65536))
(func $stackSave (export "stackSave") (result i32)
(func $stackSave (export "emscripten_stack_get_current") (result i32)
global.get $__stack_pointer)
(func $stackRestore (export "stackRestore") (param i32)
(func $stackRestore (export "_emscripten_stack_restore") (param i32)
local.get 0
global.set $__stack_pointer)
(func $setThrew (export "setThrew") (param i32 i32))
Expand Down
12 changes: 6 additions & 6 deletions internal/emscripten/emscripten.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,21 +110,21 @@ func (v *InvokeFunc) Call(ctx context.Context, mod api.Module, stack []uint64) {
// indirection function calls in Emscripten JS is like this:
//
// function invoke_iii(index,a1,a2) {
// var sp = stackSave();
// var sp = emscripten_stack_get_current();
// try {
// return getWasmTableEntry(index)(a1,a2);
// } catch(e) {
// stackRestore(sp);
// _emscripten_stack_restore(sp);
// if (e !== e+0) throw e;
// _setThrew(1, 0);
// }
//}

// This is the equivalent of "var sp = stackSave();".
// This is the equivalent of "var sp = emscripten_stack_get_current();".
// We reuse savedStack to save allocations. We allocate with a size of 2
// here to accommodate for the input and output of setThrew.
var savedStack [2]uint64
callOrPanic(ctx, mod, "stackSave", savedStack[:])
callOrPanic(ctx, mod, "emscripten_stack_get_current", savedStack[:])

err := f.CallWithStack(ctx, stack)
if err != nil {
Expand All @@ -133,9 +133,9 @@ func (v *InvokeFunc) Call(ctx context.Context, mod api.Module, stack []uint64) {
panic(err)
}

// This is the equivalent of "stackRestore(sp);".
// This is the equivalent of "_emscripten_stack_restore(sp);".
// Do not overwrite err here to preserve the original error.
callOrPanic(ctx, mod, "stackRestore", savedStack[:])
callOrPanic(ctx, mod, "_emscripten_stack_restore", savedStack[:])

// If we encounter ThrowLongjmpError, this means that the C code did a
// longjmp, which in turn called _emscripten_throw_longjmp and that is
Expand Down
Loading