aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/link
diff options
context:
space:
mode:
authorJohan Brandhorst-Satzkorn <johan.brandhorst@gmail.com>2023-03-24 23:07:58 -0700
committerGopher Robot <gobot@golang.org>2023-04-05 19:28:25 +0000
commit99de78e175bed03e21e0da72d2f084c88e4f62ad (patch)
tree695fc1cf5ec100426b3dd72f4bb846b5f0b71f0e /src/cmd/link
parentc00e9285eae4599f6a123d0a355633379be998e8 (diff)
downloadgo-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.go2
-rw-r--r--src/cmd/link/internal/ld/sym.go2
-rw-r--r--src/cmd/link/internal/wasm/asm.go33
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)
}