Commit 3a6cd4c7 authored by Joel Sing's avatar Joel Sing

cmd/internal/obj/riscv: correct CALL reloc symbol handling

Move the CALL reloc symbol back to p.From.Sym, rather than p.To.Sym - while
p.To.Sym is the correct final location, the call to lowerJALR flips the p.To
and p.From addresses (and proves that this form of obj.Prog rewriting is not
a good idea).

Updates #27532

Change-Id: Iaf9fa24b05bda32b963f8d243401c6cd82c1355c
Reviewed-on: https://go-review.googlesource.com/c/go/+/212759Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent 24902c5b
...@@ -58,14 +58,14 @@ func jalrToSym(ctxt *obj.Link, p *obj.Prog, newprog obj.ProgAlloc, lr int16) *ob ...@@ -58,14 +58,14 @@ func jalrToSym(ctxt *obj.Link, p *obj.Prog, newprog obj.ProgAlloc, lr int16) *ob
p.Mark |= NEED_PCREL_ITYPE_RELOC p.Mark |= NEED_PCREL_ITYPE_RELOC
p = obj.Appendp(p, newprog) p = obj.Appendp(p, newprog)
// Leave p.To.Sym only for the CALL reloc in assemble. // Leave Sym only for the CALL reloc in assemble.
p.As = AJALR p.As = AJALR
p.From.Type = obj.TYPE_REG p.From.Type = obj.TYPE_REG
p.From.Reg = lr p.From.Reg = lr
p.From.Sym = to.Sym
p.Reg = 0 p.Reg = 0
p.To.Type = obj.TYPE_REG p.To.Type = obj.TYPE_REG
p.To.Reg = REG_TMP p.To.Reg = REG_TMP
p.To.Sym = to.Sym
lowerJALR(p) lowerJALR(p)
return p return p
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment