]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: emit correct jump instruction on ARM for DYNIMPORT
authorCherry Zhang <cherryyz@google.com>
Thu, 13 Aug 2020 20:59:52 +0000 (16:59 -0400)
committerCherry Zhang <cherryyz@google.com>
Mon, 17 Aug 2020 14:55:08 +0000 (14:55 +0000)
On ARM, for a JMP/CALL relocation, the instruction bytes is
encoded in Reloc.Add (issue #19811). I really hate it, but before
it is fixed we have to follow the rule and emit the right bits
from r.Add.

Fixes #40769.

Change-Id: I862e105408d344c5cc58ca9140d2e552e4364453
Reviewed-on: https://go-review.googlesource.com/c/go/+/248399
Reviewed-by: Jeremy Faller <jeremy@golang.org>
Reviewed-by: Joel Sing <joel@sing.id.au>
Reviewed-by: Than McIntosh <thanm@google.com>
src/cmd/link/internal/arm/asm.go

index 22bcb518dfc61192e957cdf1e88fade25413c196..611c96ce35f0aca733cd73dec4d3ad9970578ca2 100644 (file)
@@ -220,7 +220,7 @@ func adddynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loade
                addpltsym(target, ldr, syms, targ)
                su := ldr.MakeSymbolUpdater(s)
                su.SetRelocSym(rIdx, syms.PLT)
-               su.SetRelocAdd(rIdx, int64(ldr.SymPlt(targ)))
+               su.SetRelocAdd(rIdx, int64(braddoff(int32(r.Add()), ldr.SymPlt(targ)/4))) // TODO: don't use r.Add for instruction bytes (issue 19811)
                return true
 
        case objabi.R_ADDR: