Skip to content

Commit

Permalink
Add support for Emscripten version 3.1.57 (#2290)
Browse files Browse the repository at this point in the history
This update the imports/emscripten package implementation
so that it can support v3.1.57+ which came with a breaking
change: emscripten-core/emscripten#21555

Signed-off-by: Jeroen Bobbeldijk <[email protected]>
  • Loading branch information
jerbob92 authored Jul 19, 2024
1 parent c077eab commit c345ddf
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 9 deletions.
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

0 comments on commit c345ddf

Please sign in to comment.