mirror of
https://github.com/golang/go
synced 2024-11-17 23:14:49 -07:00
[dev.link] cmd/link: fix accidental escape in extreloc
We accidentally passed the address of a local to a function pointer, where we should pass the address of a global. Linking cmd/compile with external linking: Asmb2_GC 32.5ms ± 5% 21.6ms ± 3% -33.57% (p=0.016 n=5+4) Asmb2_GC 29.2MB ± 0% 6.4MB ± 0% -78.20% (p=0.008 n=5+5) Asmb2_GC 1.43M ± 0% 0.00M ± 4% -99.98% (p=0.008 n=5+5) Change-Id: I4754189bcc20f824627d95858ba35285d53c614d Reviewed-on: https://go-review.googlesource.com/c/go/+/245337 Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Jeremy Faller <jeremy@golang.org>
This commit is contained in:
parent
4b3cfcee58
commit
2369e01234
@ -540,7 +540,7 @@ func (st *relocSymState) relocsym(s loader.Sym, P []byte) {
|
||||
// Convert a Go relocation to an external relocation.
|
||||
func extreloc(ctxt *Link, ldr *loader.Loader, s loader.Sym, r loader.Reloc2, ri int) (loader.ExtReloc, bool) {
|
||||
var rr loader.ExtReloc
|
||||
target := ctxt.Target
|
||||
target := &ctxt.Target
|
||||
siz := int32(r.Siz())
|
||||
if siz == 0 { // informational relocation - no work to do
|
||||
return rr, false
|
||||
@ -563,7 +563,7 @@ func extreloc(ctxt *Link, ldr *loader.Loader, s loader.Sym, r loader.Reloc2, ri
|
||||
|
||||
switch rt {
|
||||
default:
|
||||
return thearch.Extreloc(&target, ldr, r, s)
|
||||
return thearch.Extreloc(target, ldr, r, s)
|
||||
|
||||
case objabi.R_TLS_LE, objabi.R_TLS_IE:
|
||||
if target.IsElf() {
|
||||
|
Loading…
Reference in New Issue
Block a user