diff options
| author | Cherry Mui <cherryyz@google.com> | 2024-08-19 15:17:04 -0400 |
|---|---|---|
| committer | Cherry Mui <cherryyz@google.com> | 2024-08-21 01:11:27 +0000 |
| commit | f38d42f2c4c6ad0d7cbdad5e1417cac3be2a5dcb (patch) | |
| tree | d305e0873748c2f413f9b8cb4e354a2fcefbeee8 /src/cmd/link/internal | |
| parent | 24fd1a043d1a81267d4a8175c114b59a86928ddd (diff) | |
| download | go-f38d42f2c4c6ad0d7cbdad5e1417cac3be2a5dcb.tar.xz | |
cmd/link: support wasmexport on js/wasm
Add export functions to the wasm module on GOOS=js. (Other parts
work the same way as wasip1.)
Add a test.
Fixes #65199.
Change-Id: Ia22580859fe40631d487f70ee293c12867e0c988
Reviewed-on: https://go-review.googlesource.com/c/go/+/606855
Reviewed-by: Zxilly Chou <zxilly@outlook.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Johan Brandhorst-Satzkorn <johan.brandhorst@gmail.com>
Diffstat (limited to 'src/cmd/link/internal')
| -rw-r--r-- | src/cmd/link/internal/wasm/asm.go | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/cmd/link/internal/wasm/asm.go b/src/cmd/link/internal/wasm/asm.go index 87a67754cc..2a4c1ee7ea 100644 --- a/src/cmd/link/internal/wasm/asm.go +++ b/src/cmd/link/internal/wasm/asm.go @@ -446,7 +446,7 @@ func writeExportSec(ctxt *ld.Link, ldr *loader.Loader, lenHostImports int) { ctxt.Out.WriteByte(0x02) // mem export writeUleb128(ctxt.Out, 0) // memidx case "js": - writeUleb128(ctxt.Out, 4) // number of exports + writeUleb128(ctxt.Out, uint64(4+len(ldr.WasmExports))) // number of exports for _, name := range []string{"run", "resume", "getsp"} { s := ldr.Lookup("wasm_export_"+name, 0) if s == 0 { @@ -457,6 +457,12 @@ func writeExportSec(ctxt *ld.Link, ldr *loader.Loader, lenHostImports int) { ctxt.Out.WriteByte(0x00) // func export writeUleb128(ctxt.Out, uint64(idx)) // funcidx } + for _, s := range ldr.WasmExports { + idx := uint32(lenHostImports) + uint32(ldr.SymValue(s)>>16) - funcValueOffset + writeName(ctxt.Out, ldr.SymName(s)) + ctxt.Out.WriteByte(0x00) // func export + writeUleb128(ctxt.Out, uint64(idx)) // funcidx + } writeName(ctxt.Out, "mem") // inst.exports.mem in wasm_exec.js ctxt.Out.WriteByte(0x02) // mem export writeUleb128(ctxt.Out, 0) // memidx |
