aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/pprof
diff options
context:
space:
mode:
authorMichael Pratt <mpratt@google.com>2022-09-30 17:08:43 -0400
committerMichael Pratt <mpratt@google.com>2022-10-14 14:48:40 +0000
commita401468b0092446d537edc2000c23e8015ce6b58 (patch)
tree38b59e415f489ac13d4ba25ff9c384dfcc9ae2a3 /src/runtime/pprof
parentf2656f20ea420ada5f15ef06ddf18d2797e18841 (diff)
downloadgo-a401468b0092446d537edc2000c23e8015ce6b58.tar.xz
runtime/pprof: set Function.start_line field
Now that we plumb the start line to the runtime, we can include in pprof files. Since runtime.Frame.startLine is not (currently) exported, we need a runtime helper to get the value. For #55022. Updates #56135. Change-Id: Ifc5b68a7b7170fd7895e4099deb24df7977b22ea Reviewed-on: https://go-review.googlesource.com/c/go/+/438255 TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Cherry Mui <cherryyz@google.com> Run-TryBot: Michael Pratt <mpratt@google.com> Reviewed-by: Austin Clements <austin@google.com>
Diffstat (limited to 'src/runtime/pprof')
-rw-r--r--src/runtime/pprof/proto.go9
-rw-r--r--src/runtime/pprof/runtime.go4
2 files changed, 12 insertions, 1 deletions
diff --git a/src/runtime/pprof/proto.go b/src/runtime/pprof/proto.go
index e856c7643e..8a49e144b9 100644
--- a/src/runtime/pprof/proto.go
+++ b/src/runtime/pprof/proto.go
@@ -590,6 +590,7 @@ func (b *profileBuilder) emitLocation() uint64 {
type newFunc struct {
id uint64
name, file string
+ startLine int64
}
newFuncs := make([]newFunc, 0, 8)
@@ -610,7 +611,12 @@ func (b *profileBuilder) emitLocation() uint64 {
if funcID == 0 {
funcID = uint64(len(b.funcs)) + 1
b.funcs[frame.Function] = int(funcID)
- newFuncs = append(newFuncs, newFunc{funcID, frame.Function, frame.File})
+ newFuncs = append(newFuncs, newFunc{
+ id: funcID,
+ name: frame.Function,
+ file: frame.File,
+ startLine: int64(runtime_FrameStartLine(&frame)),
+ })
}
b.pbLine(tagLocation_Line, funcID, int64(frame.Line))
}
@@ -633,6 +639,7 @@ func (b *profileBuilder) emitLocation() uint64 {
b.pb.int64Opt(tagFunction_Name, b.stringIndex(fn.name))
b.pb.int64Opt(tagFunction_SystemName, b.stringIndex(fn.name))
b.pb.int64Opt(tagFunction_Filename, b.stringIndex(fn.file))
+ b.pb.int64Opt(tagFunction_StartLine, fn.startLine)
b.pb.endMessage(tagProfile_Function, start)
}
diff --git a/src/runtime/pprof/runtime.go b/src/runtime/pprof/runtime.go
index dd2545b339..57e9ca480b 100644
--- a/src/runtime/pprof/runtime.go
+++ b/src/runtime/pprof/runtime.go
@@ -6,9 +6,13 @@ package pprof
import (
"context"
+ "runtime"
"unsafe"
)
+// runtime_FrameStartLine is defined in runtime/symtab.go.
+func runtime_FrameStartLine(f *runtime.Frame) int
+
// runtime_expandFinalInlineFrame is defined in runtime/symtab.go.
func runtime_expandFinalInlineFrame(stk []uintptr) []uintptr