]> Cypherpunks repositories - gostls13.git/commit
[dev.link] cmd/link: only do name expansion when needed
authorCherry Zhang <cherryyz@google.com>
Mon, 18 May 2020 22:20:18 +0000 (18:20 -0400)
committerCherry Zhang <cherryyz@google.com>
Tue, 19 May 2020 14:53:39 +0000 (14:53 +0000)
commit586d0755e2cd6a51f0837c6b7748e93d58b966f1
tree3d1592610fba5fc3eee6c068623c1e113af9b0ef
parentb8c5d6871f7a0799749537daa4a27491a369a4f7
[dev.link] cmd/link: only do name expansion when needed

Most Go objects are compiled with known package path, so the
symbol name is already fully expanded. Nevertheless, currently
in the linker strings.Replace is called unconditionally, and most
of the time it doesn't do anything.

This CL records a per-object flag in the object file, and do the
name expansion only when the name is not expanded at compile time.

This gives small speedups for the linker. Linking cmd/compile:

name                    old time/op    new time/op    delta
Loadlib                   35.1ms ± 2%    32.8ms ± 4%   -6.43%  (p=0.008 n=5+5)
Symtab                    15.8ms ± 2%    14.0ms ± 8%  -11.45%  (p=0.008 n=5+5)
TotalTime                  399ms ± 1%     385ms ± 2%   -3.63%  (p=0.008 n=5+5)

Change-Id: I735084971a051cd9be4284ad294c284cd5b545f4
Reviewed-on: https://go-review.googlesource.com/c/go/+/234490
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Jeremy Faller <jeremy@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
src/cmd/internal/goobj2/objfile.go
src/cmd/internal/obj/objfile2.go
src/cmd/link/internal/loader/loader.go