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:
parent
ae26b45113
commit
e0844acfc8
@ -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()
|
||||||
|
@ -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")
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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}
|
||||||
|
Loading…
Reference in New Issue
Block a user