aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/traceback.go
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2021-01-29 09:05:10 -0500
committerRuss Cox <rsc@golang.org>2021-02-19 00:03:07 +0000
commit776ee4079a1d5fabd855a05b300aebdc3ea53efb (patch)
tree95f7c53043617ba96bd66304a1f2b3c80e84c520 /src/runtime/traceback.go
parent5ecd9e34dfe0491f1d76372e272d782578ad5bdb (diff)
downloadgo-776ee4079a1d5fabd855a05b300aebdc3ea53efb.tar.gz
go-776ee4079a1d5fabd855a05b300aebdc3ea53efb.zip
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>
Diffstat (limited to 'src/runtime/traceback.go')
-rw-r--r--src/runtime/traceback.go1
1 files changed, 0 insertions, 1 deletions
diff --git a/src/runtime/traceback.go b/src/runtime/traceback.go
index c89a8913ae4..dbc2bddf42f 100644
--- a/src/runtime/traceback.go
+++ b/src/runtime/traceback.go
@@ -1003,7 +1003,6 @@ func tracebackHexdump(stk stack, frame *stkframe, bad uintptr) {
// Does f mark the top of a goroutine stack?
func topofstack(f funcInfo, g0 bool) bool {
return f.flag&funcFlag_TOPFRAME != 0 ||
- f.funcID == funcID_morestack ||
// asmcgocall is TOS on the system stack because it
// switches to the system stack, but in this case we
// can come back to the regular stack and still want