1
0
mirror of https://github.com/golang/go synced 2024-11-06 22:26:11 -07:00

[dev.link] cmd/link/internal/loader: reduce ABI alias postprocessing overhead

In loadObjFull when populating the sym.Reloc vector for live symbols,
avoid using the loader.SymType() method to determine if a relocation
targets an ABI alias; since invoking loader.SymType requires a
global-to-local index translation and a read from the object file.
Instead just look at the target symbol itself, which has already been
created at this point.

Hyperkube performance numbers for this change:

name                         old time/op  new time/op  delta
RelinkHyperkube               29.9s ± 2%   29.2s ± 3%  -2.42%  (p=0.000 n=20+20)
RelinkWithoutDebugHyperkube   22.0s ± 3%   21.4s ± 3%  -2.58%  (p=0.000 n=20+20)

Change-Id: Ib7696d8760dd0485240246d6d640668fbf451d71
Reviewed-on: https://go-review.googlesource.com/c/go/+/205257
Run-TryBot: Than McIntosh <thanm@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Jeremy Faller <jeremy@golang.org>
This commit is contained in:
Than McIntosh 2019-11-02 09:36:28 -04:00
parent b4245ea544
commit 17722c21e7

View File

@ -1058,7 +1058,7 @@ func loadObjFull(l *Loader, r *oReader) {
rs = 0 rs = 0
sz = 0 sz = 0
} }
if rs != 0 && l.SymType(rs) == sym.SABIALIAS { if rs != 0 && l.Syms[rs] != nil && l.Syms[rs].Type == sym.SABIALIAS {
rsrelocs := l.Relocs(rs) rsrelocs := l.Relocs(rs)
rs = rsrelocs.At(0).Sym rs = rsrelocs.At(0).Sym
} }