]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link/internal/wasm: add Go version as a custom wasm section
authorRichard Musiol <mail@richard-musiol.de>
Thu, 2 Aug 2018 20:39:00 +0000 (22:39 +0200)
committerBrad Fitzpatrick <bradfitz@golang.org>
Thu, 2 Aug 2018 20:56:11 +0000 (20:56 +0000)
The interface between the wasm binary and wasm_exec.js is experimental
and likely to change in the future. Still, there are some early adopters
who experiment with non-web wasm runtimes. They can't use wasm_exec.js
and have to provide their own equivalent. Adding the Go version as a
custom wasm sections allows for them to support a stable Go version and
the latest devel at the same time.

Change-Id: I6d377bb0a0c33cb80e86dd15a34ddc9a70680227
Reviewed-on: https://go-review.googlesource.com/127597
Run-TryBot: Richard Musiol <neelance@gmail.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/cmd/link/internal/wasm/asm.go

index 7cc6bef6b78daa888c45f1ab26b19208efb280e1..bffbc7c8a671ed9fbb9602f2b2bff207efb69601 100644 (file)
@@ -11,6 +11,7 @@ import (
        "cmd/link/internal/sym"
        "io"
        "regexp"
+       "runtime"
 )
 
 const (
@@ -172,6 +173,7 @@ func asmb(ctxt *ld.Link) {
                writeBuildID(ctxt, buildid)
        }
 
+       writeGoVersion(ctxt)
        writeTypeSec(ctxt, types)
        writeImportSec(ctxt, hostImports)
        writeFunctionSec(ctxt, fns)
@@ -220,6 +222,13 @@ func writeBuildID(ctxt *ld.Link, buildid []byte) {
        writeSecSize(ctxt, sizeOffset)
 }
 
+func writeGoVersion(ctxt *ld.Link) {
+       sizeOffset := writeSecHeader(ctxt, sectionCustom)
+       writeName(ctxt.Out, "go.version")
+       ctxt.Out.Write([]byte(runtime.Version()))
+       writeSecSize(ctxt, sizeOffset)
+}
+
 // writeTypeSec writes the section that declares all function types
 // so they can be referenced by index.
 func writeTypeSec(ctxt *ld.Link, types []*wasmFuncType) {