1
0
mirror of https://github.com/golang/go synced 2024-11-08 02:56:18 -07:00

cmd/link/internal/wasm: add Go version as a custom wasm section

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>
This commit is contained in:
Richard Musiol 2018-08-02 22:39:00 +02:00 committed by Brad Fitzpatrick
parent 2069543bf1
commit 8589f46fe0

View File

@ -11,6 +11,7 @@ import (
"cmd/link/internal/sym" "cmd/link/internal/sym"
"io" "io"
"regexp" "regexp"
"runtime"
) )
const ( const (
@ -172,6 +173,7 @@ func asmb(ctxt *ld.Link) {
writeBuildID(ctxt, buildid) writeBuildID(ctxt, buildid)
} }
writeGoVersion(ctxt)
writeTypeSec(ctxt, types) writeTypeSec(ctxt, types)
writeImportSec(ctxt, hostImports) writeImportSec(ctxt, hostImports)
writeFunctionSec(ctxt, fns) writeFunctionSec(ctxt, fns)
@ -220,6 +222,13 @@ func writeBuildID(ctxt *ld.Link, buildid []byte) {
writeSecSize(ctxt, sizeOffset) 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 // writeTypeSec writes the section that declares all function types
// so they can be referenced by index. // so they can be referenced by index.
func writeTypeSec(ctxt *ld.Link, types []*wasmFuncType) { func writeTypeSec(ctxt *ld.Link, types []*wasmFuncType) {