Skip to content

Commit 18b9702

Browse files
neelancedmitshur
authored andcommitted
[release-branch.go1.17] cmd/link: increase reserved space for passing env on wasm
On wasm, the wasm_exec.js helper passes the command line arguments and environment variables via a reserved space in the wasm linear memory. Increase this reserved space from 4096 to 8192 bytes so more environment variables can fit into the limit. Later, after https://golang.org/cl/350737 landed, we can switch to the WASI interface for getting the arguments and environment. This would remove the limit entirely. Updates #49011. Fixes #49154. Change-Id: I48a6e952a97d33404ed692c98e9b49c5cd6b269b Reviewed-on: https://go-review.googlesource.com/c/go/+/358194 Trust: Richard Musiol <[email protected]> Run-TryBot: Richard Musiol <[email protected]> TryBot-Result: Go Bot <[email protected]> Reviewed-by: Cherry Mui <[email protected]> (cherry picked from commit 252324e) Reviewed-on: https://go-review.googlesource.com/c/go/+/359399 Trust: Dmitri Shuralyov <[email protected]> Run-TryBot: Dmitri Shuralyov <[email protected]>
1 parent 91aa2f1 commit 18b9702

File tree

2 files changed

+6
-5
lines changed

2 files changed

+6
-5
lines changed

misc/wasm/wasm_exec.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -569,9 +569,9 @@
569569

570570
// The linker guarantees global data starts from at least wasmMinDataAddr.
571571
// Keep in sync with cmd/link/internal/ld/data.go:wasmMinDataAddr.
572-
const wasmMinDataAddr = 4096 + 4096;
572+
const wasmMinDataAddr = 4096 + 8192;
573573
if (offset >= wasmMinDataAddr) {
574-
throw new Error("command line too long");
574+
throw new Error("total length of command line and environment variables exceeds limit");
575575
}
576576

577577
this._inst.exports.run(argc, argv);

src/cmd/link/internal/ld/data.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -2450,10 +2450,11 @@ func splitTextSections(ctxt *Link) bool {
24502450
return (ctxt.IsPPC64() || (ctxt.IsARM64() && ctxt.IsDarwin())) && ctxt.IsExternal()
24512451
}
24522452

2453-
// On Wasm, we reserve 4096 bytes for zero page, then 4096 bytes for wasm_exec.js
2454-
// to store command line args. Data sections starts from at least address 8192.
2453+
// On Wasm, we reserve 4096 bytes for zero page, then 8192 bytes for wasm_exec.js
2454+
// to store command line args and environment variables.
2455+
// Data sections starts from at least address 12288.
24552456
// Keep in sync with wasm_exec.js.
2456-
const wasmMinDataAddr = 4096 + 4096
2457+
const wasmMinDataAddr = 4096 + 8192
24572458

24582459
// address assigns virtual addresses to all segments and sections and
24592460
// returns all segments in file order.

0 commit comments

Comments
 (0)