Commit b37b35ed authored by LE Manh Cuong's avatar LE Manh Cuong Committed by Ian Lance Taylor

debug/gosym: simplify parsing symbol name rule

Symbol name with linker prefix like "type." and "go." is not parsed
correctly and returns the prefix as parts of package name.

So just returns empty string for symbol name start with linker prefix.

Fixes #29551

Change-Id: Idb4ce872345e5781a5a5da2b2146faeeebd9e63b
Reviewed-on: https://go-review.googlesource.com/c/go/+/156397
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
parent 91c9ed08
......@@ -35,13 +35,21 @@ func (s *Sym) Static() bool { return s.Type >= 'a' }
// PackageName returns the package part of the symbol name,
// or the empty string if there is none.
func (s *Sym) PackageName() string {
pathend := strings.LastIndex(s.Name, "/")
name := s.Name
// A prefix of "type." and "go." is a compiler-generated symbol that doesn't belong to any package.
// See variable reservedimports in cmd/compile/internal/gc/subr.go
if strings.HasPrefix(name, "go.") || strings.HasPrefix(name, "type.") {
return ""
}
pathend := strings.LastIndex(name, "/")
if pathend < 0 {
pathend = 0
}
if i := strings.Index(s.Name[pathend:], "."); i != -1 {
return s.Name[:pathend+i]
if i := strings.Index(name[pathend:], "."); i != -1 {
return name[:pathend+i]
}
return ""
}
......
......@@ -41,3 +41,18 @@ func TestRemotePackage(t *testing.T) {
assertString(t, fmt.Sprintf("receiver of %q", s1.Name), s1.ReceiverName(), "(*FlagSet)")
assertString(t, fmt.Sprintf("receiver of %q", s2.Name), s2.ReceiverName(), "")
}
func TestIssue29551(t *testing.T) {
symNames := []string{
"type..eq.[9]debug/elf.intName",
"type..hash.debug/elf.ProgHeader",
"type..eq.runtime._panic",
"type..hash.struct { runtime.gList; runtime.n int32 }",
"go.(*struct { sync.Mutex; math/big.table [64]math/big",
}
for _, symName := range symNames {
s := Sym{Name: symName}
assertString(t, fmt.Sprintf("package of %q", s.Name), s.PackageName(), "")
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment