]> Cypherpunks repositories - gostls13.git/commit
[dev.link] cmd/link: unescape relocs passed to Archreloc2
authorCherry Zhang <cherryyz@google.com>
Thu, 30 Apr 2020 03:53:33 +0000 (23:53 -0400)
committerCherry Zhang <cherryyz@google.com>
Thu, 30 Apr 2020 15:53:32 +0000 (15:53 +0000)
commit5aa59c6a99606d914abb170ee3e15342af3727b8
tree9bf0f7d34d2826b53c3894ea23932b96e3af9679
parentd23cd597aac567a048f4d87a7d6d993bf59ddffd
[dev.link] cmd/link: unescape relocs passed to Archreloc2

Archreloc2 is a function pointer. It will escape its pointer
arguments. In relocsym, as we pass &r and &rr to Archreloc2, it
causes them to escape, even if Archreloc2 is not actually called.

Instead, pass r by value. loader.Reloc2 is a small structure
which is intended to be passed by value.

For rr, as Archreloc2 will likely return true, we speculatively
add it to extRelocs slice and use that space to pass to
Archreloc2.

Linking cmd/compile,

name              old alloc/op   new alloc/op   delta
Dwarfcompress_GC     110MB ± 0%      24MB ± 0%   -78.34%  (p=0.008 n=5+5)
Reloc_GC            24.6MB ± 0%     0.0MB ± 0%  -100.00%  (p=0.029 n=4+4)

Linking cmd/compile using external linking

name              old alloc/op   new alloc/op   delta
Reloc_GC             152MB ± 0%      36MB ± 0%   -76.07%  (p=0.008 n=5+5)

Change-Id: I1415479e0c17ea9787f9a62453dce00ad9ea792f
Reviewed-on: https://go-review.googlesource.com/c/go/+/231077
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
Reviewed-by: Jeremy Faller <jeremy@golang.org>
src/cmd/link/internal/ld/data.go
src/cmd/link/internal/ld/lib.go
src/cmd/link/internal/x86/asm.go