]> Cypherpunks repositories - gostls13.git/commit
cmd/compile, runtime: use unwrapped PC for goroutine creation tracing
authorCherry Mui <cherryyz@google.com>
Mon, 7 Feb 2022 17:00:44 +0000 (12:00 -0500)
committerCherry Mui <cherryyz@google.com>
Fri, 11 Feb 2022 20:01:24 +0000 (20:01 +0000)
commitbcee121ae4f67281450280c72399890a3c7a7d5b
tree9ae9af3d9b8975f452e2f8ffc46411e6b35f4e20
parent0bde2cf5fe1fea62bb0975a7098c55abd8f3da34
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>
12 files changed:
src/cmd/compile/internal/escape/call.go
src/cmd/compile/internal/gc/obj.go
src/cmd/compile/internal/ir/func.go
src/cmd/compile/internal/ir/sizeof_test.go
src/cmd/compile/internal/ssagen/ssa.go
src/cmd/internal/obj/link.go
src/cmd/internal/obj/objfile.go
src/cmd/internal/objabi/funcdata.go
src/cmd/link/internal/ld/symtab.go
src/runtime/funcdata.h
src/runtime/symtab.go
src/runtime/trace.go