diff options
| author | Johan Brandhorst-Satzkorn <johan.brandhorst@gmail.com> | 2023-03-24 23:07:58 -0700 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2023-04-05 19:28:25 +0000 |
| commit | 99de78e175bed03e21e0da72d2f084c88e4f62ad (patch) | |
| tree | 695fc1cf5ec100426b3dd72f4bb846b5f0b71f0e /src/cmd/link | |
| parent | c00e9285eae4599f6a123d0a355633379be998e8 (diff) | |
| download | go-99de78e175bed03e21e0da72d2f084c88e4f62ad.tar.xz | |
all: add wasip1 asm and link logic
Add wasip1 asm and symbols to cmd/internal/obj, cmd/link and
runtime.
For #58141
Co-authored-by: Richard Musiol <neelance@gmail.com>
Co-authored-by: Achille Roussel <achille.roussel@gmail.com>
Co-authored-by: Julien Fabre <ju.pryz@gmail.com>
Co-authored-by: Evan Phoenix <evan@phx.io>
Change-Id: Ie088d9b65ea13e231694af6341465f95be33093f
Reviewed-on: https://go-review.googlesource.com/c/go/+/479617
Reviewed-by: Ian Lance Taylor <iant@google.com>
TryBot-Bypass: Ian Lance Taylor <iant@golang.org>
Auto-Submit: Ian Lance Taylor <iant@golang.org>
Auto-Submit: Ian Lance Taylor <iant@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Run-TryBot: Ian Lance Taylor <iant@google.com>
Diffstat (limited to 'src/cmd/link')
| -rw-r--r-- | src/cmd/link/internal/ld/dwarf.go | 2 | ||||
| -rw-r--r-- | src/cmd/link/internal/ld/sym.go | 2 | ||||
| -rw-r--r-- | src/cmd/link/internal/wasm/asm.go | 33 |
3 files changed, 26 insertions, 11 deletions
diff --git a/src/cmd/link/internal/ld/dwarf.go b/src/cmd/link/internal/ld/dwarf.go index a402c9ea92..41da25805f 100644 --- a/src/cmd/link/internal/ld/dwarf.go +++ b/src/cmd/link/internal/ld/dwarf.go @@ -1636,7 +1636,7 @@ func dwarfEnabled(ctxt *Link) bool { if *FlagS && ctxt.HeadType != objabi.Hdarwin { return false } - if ctxt.HeadType == objabi.Hplan9 || ctxt.HeadType == objabi.Hjs { + if ctxt.HeadType == objabi.Hplan9 || ctxt.HeadType == objabi.Hjs || ctxt.HeadType == objabi.Hwasip1 { return false } diff --git a/src/cmd/link/internal/ld/sym.go b/src/cmd/link/internal/ld/sym.go index d51a59ef46..6ae110602e 100644 --- a/src/cmd/link/internal/ld/sym.go +++ b/src/cmd/link/internal/ld/sym.go @@ -75,7 +75,7 @@ func (ctxt *Link) computeTLSOffset() { default: log.Fatalf("unknown thread-local storage offset for %v", ctxt.HeadType) - case objabi.Hplan9, objabi.Hwindows, objabi.Hjs, objabi.Haix: + case objabi.Hplan9, objabi.Hwindows, objabi.Hjs, objabi.Hwasip1, objabi.Haix: break case objabi.Hlinux, diff --git a/src/cmd/link/internal/wasm/asm.go b/src/cmd/link/internal/wasm/asm.go index 30d0dc7ff2..413a809414 100644 --- a/src/cmd/link/internal/wasm/asm.go +++ b/src/cmd/link/internal/wasm/asm.go @@ -114,6 +114,8 @@ func readWasmImport(ldr *loader.Loader, s loader.Sym) obj.WasmImport { var wasmFuncTypes = map[string]*wasmFuncType{ "_rt0_wasm_js": {Params: []byte{}}, // + "_rt0_wasm_wasip1": {Params: []byte{}}, // + "wasm_export__start": {}, // "wasm_export_run": {Params: []byte{I32, I32}}, // argc, argv "wasm_export_resume": {Params: []byte{}}, // "wasm_export_getsp": {Results: []byte{I32}}, // sp @@ -450,20 +452,33 @@ func writeGlobalSec(ctxt *ld.Link) { func writeExportSec(ctxt *ld.Link, ldr *loader.Loader, lenHostImports int) { sizeOffset := writeSecHeader(ctxt, sectionExport) - writeUleb128(ctxt.Out, 4) // number of exports - - for _, name := range []string{"run", "resume", "getsp"} { - s := ldr.Lookup("wasm_export_"+name, 0) + switch buildcfg.GOOS { + case "wasip1": + writeUleb128(ctxt.Out, 2) // number of exports + s := ldr.Lookup("_rt0_wasm_wasip1", 0) idx := uint32(lenHostImports) + uint32(ldr.SymValue(s)>>16) - funcValueOffset - writeName(ctxt.Out, name) // inst.exports.run/resume/getsp in wasm_exec.js + writeName(ctxt.Out, "_start") // the wasi entrypoint ctxt.Out.WriteByte(0x00) // func export writeUleb128(ctxt.Out, uint64(idx)) // funcidx + writeName(ctxt.Out, "memory") // memory in wasi + ctxt.Out.WriteByte(0x02) // mem export + writeUleb128(ctxt.Out, 0) // memidx + case "js": + writeUleb128(ctxt.Out, 4) // number of exports + for _, name := range []string{"run", "resume", "getsp"} { + s := ldr.Lookup("wasm_export_"+name, 0) + idx := uint32(lenHostImports) + uint32(ldr.SymValue(s)>>16) - funcValueOffset + writeName(ctxt.Out, name) // inst.exports.run/resume/getsp in wasm_exec.js + 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 + default: + ld.Exitf("internal error: writeExportSec: unrecognized GOOS %s", buildcfg.GOOS) } - writeName(ctxt.Out, "mem") // inst.exports.mem in wasm_exec.js - ctxt.Out.WriteByte(0x02) // mem export - writeUleb128(ctxt.Out, 0) // memidx - writeSecSize(ctxt, sizeOffset) } |
