]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/obj/riscv: correct CALL reloc symbol handling
authorJoel Sing <joel@sing.id.au>
Tue, 31 Dec 2019 14:44:54 +0000 (01:44 +1100)
committerJoel Sing <joel@sing.id.au>
Sat, 4 Jan 2020 04:11:40 +0000 (04:11 +0000)
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/+/212759
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/internal/obj/riscv/obj.go

index 2e9ac6750b1ea4608bb3d2cdc6f75cc0db3665dc..b024a6a546797876533e426467bf3b15858c9a0b 100644 (file)
@@ -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 = 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.From.Type = obj.TYPE_REG
        p.From.Reg = lr
+       p.From.Sym = to.Sym
        p.Reg = 0
        p.To.Type = obj.TYPE_REG
        p.To.Reg = REG_TMP
-       p.To.Sym = to.Sym
        lowerJALR(p)
 
        return p