]> Cypherpunks repositories - gostls13.git/commit
runtime, cmd: rationalize StackLimit and StackGuard
authorAustin Clements <austin@google.com>
Wed, 19 Apr 2023 18:01:05 +0000 (14:01 -0400)
committerAustin Clements <austin@google.com>
Thu, 20 Apr 2023 16:05:21 +0000 (16:05 +0000)
commit921699fe5f67a2e5246badc8f626cc70a615ad1c
tree16cec2ce81c3263a8ee09490f850dce56db71244
parentf5f7755da878934c3b0799f511f5c1d5711a0296
runtime, cmd: rationalize StackLimit and StackGuard

The current definitions of StackLimit and StackGuard only indirectly
specify the NOSPLIT stack limit and duplicate a literal constant
(928). Currently, they define the stack guard delta, and from there
compute the NOSPLIT limit.

Rationalize these by defining a new constant, abi.StackNosplitBase,
which consolidates and directly specifies the NOSPLIT stack limit (in
the default case). From this we then compute the stack guard delta,
inverting the relationship between these two constants. While we're
here, we rename StackLimit to StackNosplit to make it clearer what's
being limited.

This change does not affect the values of these constants in the
default configuration. It does slightly change how
StackGuardMultiplier values other than 1 affect the constants, but
this multiplier is a pretty rough heuristic anyway.

                    before after
stackNosplit           800   800
_StackGuard            928   928
stackNosplit -race    1728  1600
_StackGuard -race     1856  1728

For #59670.

Change-Id: Ibe20825ebe0076bbd7b0b7501177b16c9dbcb79e
Reviewed-on: https://go-review.googlesource.com/c/go/+/486380
Run-TryBot: Austin Clements <austin@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
src/cmd/internal/objabi/stack.go
src/cmd/link/internal/ld/stackcheck.go
src/internal/abi/stack.go
src/runtime/preempt.go
src/runtime/stack.go
test/nosplit.go