mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile, runtime: use unwrapped PC for goroutine creation tracing
With the switch to the register ABI, we now generate wrapper functions for go statements in many cases. A new goroutine's start PC now points to the wrapper function. This does not affect execution, but the runtime tracer uses the start PC and the function name as the name/label of that goroutine. If the start function is a named function, using the name of the wrapper loses that information. Furthur, the tracer's goroutine view groups goroutines by start PC. For multiple go statements with the same callee, they are grouped together. With the wrappers, which is context-dependent as it is a closure, they are no longer grouped. This CL fixes the problem by providing the underlying unwrapped PC for tracing. The compiler emits metadata to link the unwrapped PC to the wrapper function. And the runtime reads that metadata and record that unwrapped PC for tracing. (This doesn't work for shared buildmode. Unfortunate.) TODO: is there a way to test? Fixes #50622. Change-Id: Iaa20e1b544111c0255eb0fc04427aab7a5e3b877 Reviewed-on: https://go-review.googlesource.com/c/go/+/384158 Trust: Cherry Mui <cherryyz@google.com> Reviewed-by: Than McIntosh <thanm@google.com> Run-TryBot: Cherry Mui <cherryyz@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
parent
0bde2cf5fe
commit
bcee121ae4
12 changed files with 70 additions and 3 deletions
|
|
@ -487,6 +487,7 @@ type FuncInfo struct {
|
|||
OpenCodedDeferInfo *LSym
|
||||
ArgInfo *LSym // argument info for traceback
|
||||
ArgLiveInfo *LSym // argument liveness info for traceback
|
||||
WrapInfo *LSym // for wrapper, info of wrapped function
|
||||
|
||||
FuncInfoSym *LSym
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue