aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/vendor/github.com
diff options
context:
space:
mode:
authorEmmanuel T Odeke <emmanuel@orijtech.com>2022-07-29 22:38:24 -0600
committerEmmanuel Odeke <emmanuel@orijtech.com>2022-08-09 20:51:42 +0000
commitcd9cd925bb9ed79975f2531a6b84f69905e4fc31 (patch)
tree24207b56cef60511da66930813fe8603a33df2a4 /src/cmd/vendor/github.com
parent51a23d6681aef3736e09fbc61fc9ae03305efc2c (diff)
downloadgo-cd9cd925bb9ed79975f2531a6b84f69905e4fc31.tar.xz
cmd: vendor github.com/google/pprof to fix mangled type parameter symbol names
Updates github.com/google/pprof to bring in the commit from https://github.com/google/pprof/pull/717 which fixes mangled symbol names for type parameters. Fixes #54105 Change-Id: I01af9f780aba3338b960a03b30906a23642e4448 Reviewed-on: https://go-review.googlesource.com/c/go/+/420234 TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org> Run-TryBot: Emmanuel Odeke <emmanuel@orijtech.com> Reviewed-by: Than McIntosh <thanm@google.com>
Diffstat (limited to 'src/cmd/vendor/github.com')
-rw-r--r--src/cmd/vendor/github.com/google/pprof/internal/driver/settings.go8
-rw-r--r--src/cmd/vendor/github.com/google/pprof/internal/graph/dotgraph.go3
-rw-r--r--src/cmd/vendor/github.com/google/pprof/internal/symbolizer/symbolizer.go61
3 files changed, 46 insertions, 26 deletions
diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/settings.go b/src/cmd/vendor/github.com/google/pprof/internal/driver/settings.go
index f72314b185..1e9154c5f5 100644
--- a/src/cmd/vendor/github.com/google/pprof/internal/driver/settings.go
+++ b/src/cmd/vendor/github.com/google/pprof/internal/driver/settings.go
@@ -79,7 +79,7 @@ type configMenuEntry struct {
}
// configMenu returns a list of items to add to a menu in the web UI.
-func configMenu(fname string, url url.URL) []configMenuEntry {
+func configMenu(fname string, u url.URL) []configMenuEntry {
// Start with system configs.
configs := []namedConfig{{Name: "Default", config: defaultConfig()}}
if settings, err := readSettings(fname); err == nil {
@@ -91,13 +91,15 @@ func configMenu(fname string, url url.URL) []configMenuEntry {
result := make([]configMenuEntry, len(configs))
lastMatch := -1
for i, cfg := range configs {
- dst, changed := cfg.config.makeURL(url)
+ dst, changed := cfg.config.makeURL(u)
if !changed {
lastMatch = i
}
+ // Use a relative URL to work in presence of stripping/redirects in webui.go.
+ rel := &url.URL{RawQuery: dst.RawQuery, ForceQuery: true}
result[i] = configMenuEntry{
Name: cfg.Name,
- URL: dst.String(),
+ URL: rel.String(),
UserConfig: (i != 0),
}
}
diff --git a/src/cmd/vendor/github.com/google/pprof/internal/graph/dotgraph.go b/src/cmd/vendor/github.com/google/pprof/internal/graph/dotgraph.go
index 9ff4c95adb..09d40fd2c9 100644
--- a/src/cmd/vendor/github.com/google/pprof/internal/graph/dotgraph.go
+++ b/src/cmd/vendor/github.com/google/pprof/internal/graph/dotgraph.go
@@ -385,6 +385,9 @@ func multilinePrintableName(info *NodeInfo) string {
infoCopy := *info
infoCopy.Name = escapeForDot(ShortenFunctionName(infoCopy.Name))
infoCopy.Name = strings.Replace(infoCopy.Name, "::", `\n`, -1)
+ // Go type parameters are reported as "[...]" by Go pprof profiles.
+ // Keep this ellipsis rather than replacing with newlines below.
+ infoCopy.Name = strings.Replace(infoCopy.Name, "[...]", "[…]", -1)
infoCopy.Name = strings.Replace(infoCopy.Name, ".", `\n`, -1)
if infoCopy.File != "" {
infoCopy.File = filepath.Base(infoCopy.File)
diff --git a/src/cmd/vendor/github.com/google/pprof/internal/symbolizer/symbolizer.go b/src/cmd/vendor/github.com/google/pprof/internal/symbolizer/symbolizer.go
index cbb0ed4d1b..d243b800a9 100644
--- a/src/cmd/vendor/github.com/google/pprof/internal/symbolizer/symbolizer.go
+++ b/src/cmd/vendor/github.com/google/pprof/internal/symbolizer/symbolizer.go
@@ -205,49 +205,64 @@ func Demangle(prof *profile.Profile, force bool, demanglerMode string) {
}
}
- var options []demangle.Option
+ options := demanglerModeToOptions(demanglerMode)
+ for _, fn := range prof.Function {
+ demangleSingleFunction(fn, options)
+ }
+}
+
+func demanglerModeToOptions(demanglerMode string) []demangle.Option {
switch demanglerMode {
case "": // demangled, simplified: no parameters, no templates, no return type
- options = []demangle.Option{demangle.NoParams, demangle.NoTemplateParams}
+ return []demangle.Option{demangle.NoParams, demangle.NoTemplateParams}
case "templates": // demangled, simplified: no parameters, no return type
- options = []demangle.Option{demangle.NoParams}
+ return []demangle.Option{demangle.NoParams}
case "full":
- options = []demangle.Option{demangle.NoClones}
+ return []demangle.Option{demangle.NoClones}
case "none": // no demangling
- return
+ return []demangle.Option{}
}
+ panic(fmt.Sprintf("unknown demanglerMode %s", demanglerMode))
+}
+
+func demangleSingleFunction(fn *profile.Function, options []demangle.Option) {
+ if fn.Name != "" && fn.SystemName != fn.Name {
+ return // Already demangled.
+ }
// Copy the options because they may be updated by the call.
o := make([]demangle.Option, len(options))
- for _, fn := range prof.Function {
- if fn.Name != "" && fn.SystemName != fn.Name {
- continue // Already demangled.
- }
- copy(o, options)
- if demangled := demangle.Filter(fn.SystemName, o...); demangled != fn.SystemName {
- fn.Name = demangled
- continue
- }
- // Could not demangle. Apply heuristics in case the name is
- // already demangled.
- name := fn.SystemName
- if looksLikeDemangledCPlusPlus(name) {
- if demanglerMode == "" || demanglerMode == "templates" {
+ copy(o, options)
+ if demangled := demangle.Filter(fn.SystemName, o...); demangled != fn.SystemName {
+ fn.Name = demangled
+ return
+ }
+ // Could not demangle. Apply heuristics in case the name is
+ // already demangled.
+ name := fn.SystemName
+ if looksLikeDemangledCPlusPlus(name) {
+ for _, o := range options {
+ switch o {
+ case demangle.NoParams:
name = removeMatching(name, '(', ')')
- }
- if demanglerMode == "" {
+ case demangle.NoTemplateParams:
name = removeMatching(name, '<', '>')
}
}
- fn.Name = name
}
+ fn.Name = name
}
// looksLikeDemangledCPlusPlus is a heuristic to decide if a name is
// the result of demangling C++. If so, further heuristics will be
// applied to simplify the name.
func looksLikeDemangledCPlusPlus(demangled string) bool {
- if strings.Contains(demangled, ".<") { // Skip java names of the form "class.<init>"
+ // Skip java names of the form "class.<init>".
+ if strings.Contains(demangled, ".<") {
+ return false
+ }
+ // Skip Go names of the form "foo.(*Bar[...]).Method".
+ if strings.Contains(demangled, "]).") {
return false
}
return strings.ContainsAny(demangled, "<>[]") || strings.Contains(demangled, "::")