]> Cypherpunks repositories - gostls13.git/commit
runtime: track frame pointer while in syscall
authorMichael Anthony Knyszek <mknyszek@google.com>
Thu, 18 Apr 2024 20:54:55 +0000 (20:54 +0000)
committerMichael Knyszek <mknyszek@google.com>
Fri, 19 Apr 2024 17:25:00 +0000 (17:25 +0000)
commit2b82a4f488179a62a69dd318ea62f0624641ae63
treee86da95881d3bd61e9e6f9065b4ca658f4974487
parentdcb5de5cac5baee703b1fe215f28f22aebc93437
runtime: track frame pointer while in syscall

Currently the runtime only tracks the PC and SP upon entering a syscall,
but not the FP (BP). This is mainly for historical reasons, and because
the tracer (which uses the frame pointer unwinder) does not need it.

Until it did, of course, in CL 567076, where the tracer tries to take a
stack trace of a goroutine that's in a syscall from afar. It tries to
use gp.sched.bp and lots of things go wrong. It *really* should be using
the equivalent of gp.syscallbp, which doesn't exist before this CL.

This change introduces gp.syscallbp and tracks it. It also introduces
getcallerfp which is nice for simplifying some code. Because we now have
gp.syscallbp, we can also delete the frame skip count computation in
traceLocker.GoSysCall, because it's now the same regardless of whether
frame pointer unwinding is used.

Fixes #66889.

Change-Id: Ib6d761c9566055e0a037134138cb0f81be73ecf7
Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-nocgo
Reviewed-on: https://go-review.googlesource.com/c/go/+/580255
Auto-Submit: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
src/runtime/cgocall.go
src/runtime/export_windows_test.go
src/runtime/proc.go
src/runtime/runtime2.go
src/runtime/sizeof_test.go
src/runtime/traceruntime.go
src/runtime/tracestack.go