1
0
mirror of https://github.com/golang/go synced 2024-11-26 08:38:01 -07:00

[dev.typeparams] runtime/pprof: replace funcPC with internal/abi.FuncPCABIInternal

All funcPC references are ABIInternal functions. Replace with the
intrinsics.

Change-Id: I2266bb6d2b713eb63b6a09846e9f9c423cab6e9b
Reviewed-on: https://go-review.googlesource.com/c/go/+/322349
Trust: Cherry Mui <cherryyz@google.com>
Run-TryBot: Cherry Mui <cherryyz@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
This commit is contained in:
Cherry Mui 2021-05-21 18:13:04 -04:00
parent ae26b45113
commit e0844acfc8
4 changed files with 11 additions and 12 deletions

View File

@ -76,6 +76,7 @@ import (
"bufio" "bufio"
"bytes" "bytes"
"fmt" "fmt"
"internal/abi"
"io" "io"
"runtime" "runtime"
"sort" "sort"
@ -289,7 +290,7 @@ func (p *Profile) Add(value interface{}, skip int) {
stk = stk[:n] stk = stk[:n]
if len(stk) == 0 { if len(stk) == 0 {
// The value for skip is too large, and there's no stack trace to record. // The value for skip is too large, and there's no stack trace to record.
stk = []uintptr{funcPC(lostProfileEvent)} stk = []uintptr{abi.FuncPCABIInternal(lostProfileEvent)}
} }
p.mu.Lock() p.mu.Lock()

View File

@ -11,6 +11,7 @@ import (
"bytes" "bytes"
"context" "context"
"fmt" "fmt"
"internal/abi"
"internal/profile" "internal/profile"
"internal/testenv" "internal/testenv"
"io" "io"
@ -116,7 +117,7 @@ func containsInlinedCall(f interface{}, maxBytes int) bool {
// findInlinedCall returns the PC of an inlined function call within // findInlinedCall returns the PC of an inlined function call within
// the function body for the function f if any. // the function body for the function f if any.
func findInlinedCall(f interface{}, maxBytes int) (pc uint64, found bool) { func findInlinedCall(f interface{}, maxBytes int) (pc uint64, found bool) {
fFunc := runtime.FuncForPC(uintptr(funcPC(f))) fFunc := runtime.FuncForPC(uintptr(abi.FuncPCABIInternal(f)))
if fFunc == nil || fFunc.Entry() == 0 { if fFunc == nil || fFunc.Entry() == 0 {
panic("failed to locate function entry") panic("failed to locate function entry")
} }

View File

@ -8,6 +8,7 @@ import (
"bytes" "bytes"
"compress/gzip" "compress/gzip"
"fmt" "fmt"
"internal/abi"
"io" "io"
"os" "os"
"runtime" "runtime"
@ -21,11 +22,6 @@ import (
// (The name shows up in the pprof graphs.) // (The name shows up in the pprof graphs.)
func lostProfileEvent() { lostProfileEvent() } func lostProfileEvent() { lostProfileEvent() }
// funcPC returns the PC for the func value f.
func funcPC(f interface{}) uintptr {
return *(*[2]*uintptr)(unsafe.Pointer(&f))[1]
}
// A profileBuilder writes a profile incrementally from a // A profileBuilder writes a profile incrementally from a
// stream of profile samples delivered by the runtime. // stream of profile samples delivered by the runtime.
type profileBuilder struct { type profileBuilder struct {
@ -325,7 +321,7 @@ func (b *profileBuilder) addCPUData(data []uint64, tags []unsafe.Pointer) error
// gentraceback guarantees that PCs in the // gentraceback guarantees that PCs in the
// stack can be unconditionally decremented and // stack can be unconditionally decremented and
// still be valid, so we must do the same. // still be valid, so we must do the same.
uint64(funcPC(lostProfileEvent) + 1), uint64(abi.FuncPCABIInternal(lostProfileEvent) + 1),
} }
} }
b.m.lookup(stk, tag).count += int64(count) b.m.lookup(stk, tag).count += int64(count)

View File

@ -8,6 +8,7 @@ import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"fmt" "fmt"
"internal/abi"
"internal/profile" "internal/profile"
"internal/testenv" "internal/testenv"
"os" "os"
@ -97,11 +98,11 @@ func testPCs(t *testing.T) (addr1, addr2 uint64, map1, map2 *profile.Mapping) {
map2 = mprof.Mapping[1] map2 = mprof.Mapping[1]
map2.BuildID, _ = elfBuildID(map2.File) map2.BuildID, _ = elfBuildID(map2.File)
case "js": case "js":
addr1 = uint64(funcPC(f1)) addr1 = uint64(abi.FuncPCABIInternal(f1))
addr2 = uint64(funcPC(f2)) addr2 = uint64(abi.FuncPCABIInternal(f2))
default: default:
addr1 = uint64(funcPC(f1)) addr1 = uint64(abi.FuncPCABIInternal(f1))
addr2 = uint64(funcPC(f2)) addr2 = uint64(abi.FuncPCABIInternal(f2))
// Fake mapping - HasFunctions will be true because two PCs from Go // Fake mapping - HasFunctions will be true because two PCs from Go
// will be fully symbolized. // will be fully symbolized.
fake := &profile.Mapping{ID: 1, HasFunctions: true} fake := &profile.Mapping{ID: 1, HasFunctions: true}