aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Hudson-Doyle <michael.hudson@canonical.com>2016-08-12 10:31:17 +1200
committerMichael Hudson-Doyle <michael.hudson@canonical.com>2016-08-16 00:37:09 +0000
commitb5e43e669a5e1591c9a6c7157b4dd0d2796d3037 (patch)
treedb562dbbdf438170210864a91788eb6a46028f4d
parent3ddc9ad9161c6d5ae07ce2304aa838d4b853cc78 (diff)
downloadgo-b5e43e669a5e1591c9a6c7157b4dd0d2796d3037.tar.gz
go-b5e43e669a5e1591c9a6c7157b4dd0d2796d3037.zip
cmd/link: when dynlinking, do not mangle short symbol names
When dynamically linking, a type symbol's name is replaced with a name based on the SHA1 of the name as type symbol's names can be very long. However, this can make a type's symbol name longer in some cases. So skip it in that case. One of the symbols this changes the treatment of is 'type.string' and that fixes a bug where -X doesn't work when dynamically linking. Fixes #16671 Change-Id: If5269038261b76fb0ec52e25a9c1d64129631e3c Reviewed-on: https://go-review.googlesource.com/26890 Run-TryBot: Michael Hudson-Doyle <michael.hudson@canonical.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: David Crawshaw <crawshaw@golang.org>
-rw-r--r--src/cmd/link/internal/ld/objfile.go6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/cmd/link/internal/ld/objfile.go b/src/cmd/link/internal/ld/objfile.go
index be9832dc45..4db6489d00 100644
--- a/src/cmd/link/internal/ld/objfile.go
+++ b/src/cmd/link/internal/ld/objfile.go
@@ -564,8 +564,10 @@ func (r *objReader) readSymName() string {
// the symbol is not decodable.
//
// Leave type.runtime. symbols alone, because
- // other parts of the linker manipulates them.
- if strings.HasPrefix(s, "type.") && !strings.HasPrefix(s, "type.runtime.") {
+ // other parts of the linker manipulates them,
+ // and also symbols whose names would not be
+ // shortened by this process.
+ if len(s) > 14 && strings.HasPrefix(s, "type.") && !strings.HasPrefix(s, "type.runtime.") {
hash := sha1.Sum([]byte(s))
prefix := "type."
if s[5] == '.' {