diff options
| author | Michael Pratt <mpratt@google.com> | 2022-09-30 17:08:43 -0400 |
|---|---|---|
| committer | Michael Pratt <mpratt@google.com> | 2022-10-14 14:48:40 +0000 |
| commit | a401468b0092446d537edc2000c23e8015ce6b58 (patch) | |
| tree | 38b59e415f489ac13d4ba25ff9c384dfcc9ae2a3 /src/runtime/pprof | |
| parent | f2656f20ea420ada5f15ef06ddf18d2797e18841 (diff) | |
| download | go-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.go | 9 | ||||
| -rw-r--r-- | src/runtime/pprof/runtime.go | 4 |
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 |
