]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.link] cmd/link: on AIX, use relocation to locate target symbol from TOC symbol
authorCherry Zhang <cherryyz@google.com>
Sat, 12 Oct 2019 01:51:01 +0000 (21:51 -0400)
committerCherry Zhang <cherryyz@google.com>
Mon, 14 Oct 2019 17:05:51 +0000 (17:05 +0000)
On AIX, a TOC symbol always has a relocation to its target symbol.
Instead of using name lookup to locate the target symbol, we can
just use the relocation.

Using name lookup, besides being less efficient, needs to provide
the right symbol version. In this particular case, we are looking
for a data symbol so it is almost always version 0. But in case
that it is a text symbol, we may get an ABIALIAS symbol, which
does not have its Sect set.

Change-Id: I1ecfd284b04a86bbbc450059ee89d99d40493e51
Reviewed-on: https://go-review.googlesource.com/c/go/+/201019
Reviewed-by: Than McIntosh <thanm@google.com>
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/link/internal/ppc64/asm.go

index ad91be3dade9a207b2717cdbb6659b7637d22357..cf6a2846dec773ac5e63c64fc82c3248086b7e03 100644 (file)
@@ -550,7 +550,7 @@ func archreloctoc(ctxt *ld.Link, r *sym.Reloc, s *sym.Symbol, val int64) int64 {
        const prefix = "TOC."
        var tarSym *sym.Symbol
        if strings.HasPrefix(r.Sym.Name, prefix) {
-               tarSym = ctxt.Syms.ROLookup(strings.TrimPrefix(r.Sym.Name, prefix), 0)
+               tarSym = r.Sym.R[0].Sym
        } else {
                ld.Errorf(s, "archreloctoc called for a symbol without TOC anchor")
        }