]> Cypherpunks.ru repositories - gostls13.git/commit
runtime: do not treat morestack as a topofstack
authorRuss Cox <rsc@golang.org>
Fri, 29 Jan 2021 14:05:10 +0000 (09:05 -0500)
committerRuss Cox <rsc@golang.org>
Fri, 19 Feb 2021 00:03:07 +0000 (00:03 +0000)
commit776ee4079a1d5fabd855a05b300aebdc3ea53efb
tree95f7c53043617ba96bd66304a1f2b3c80e84c520
parent5ecd9e34dfe0491f1d76372e272d782578ad5bdb
runtime: do not treat morestack as a topofstack

I added morestack to this list in 2013 with an explanation
that they were needed if we “start a garbage collection on g0
during a stack split or unsplit”.
(https://golang.org/cl/11533043)

This explanation no longer applies for a handful of reasons,
most importantly that if we did stop a stack scan in the middle
of a call to morestack, we'd ignore pointers above the split,
which would lead to memory corruption. But we don't scan
goroutine stacks during morestack now, so that can't happen.
If we did see morestack during a GC, that would be a good time
to crash the program.

The real problem with morestack is during profiling, as noted
in the code review conversation during 2013. And in profiling
we just need to know to stop and not unwind further, which
the new SPWRITE bit will do for us.

So remove from topofstack and let the program crash if GC
sees morestack and otherwise let the SPWRITE stop morestack
unwinding during profiling.

This CL is part of a stack adding windows/arm64
support (#36439), intended to land in the Go 1.17 cycle.
This CL is, however, not windows/arm64-specific.
It is cleanup meant to make the port (and future ports) easier.

Change-Id: I06d95920b18c599c7c46f64c21028104978215d7
Reviewed-on: https://go-review.googlesource.com/c/go/+/288804
Trust: Russ Cox <rsc@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
src/runtime/traceback.go