Commit b5e43e66 authored by Michael Hudson-Doyle's avatar Michael Hudson-Doyle

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: default avatarDavid Crawshaw <crawshaw@golang.org>
parent 3ddc9ad9
......@@ -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] == '.' {
......
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