]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/obj/{arm,s390x}: make return jump print nicer
authorCherry Zhang <cherryyz@google.com>
Thu, 22 Oct 2020 01:29:43 +0000 (21:29 -0400)
committerCherry Zhang <cherryyz@google.com>
Mon, 26 Oct 2020 19:15:06 +0000 (19:15 +0000)
When a function with non-zero frame size makes a return jump
(RET target), it assembles to, conceptually,

MOV (SP), LR
ADD $framesize, SP
JMP target

We did not clear some fields in the first instruction's Prog.To,
causing it printed like (on ARM)

MOVW.P 4(R13), (R14)(R14)(REG)

Clear the fields to make it print nicer.

Change-Id: I180901aeea41f1ff287d7c6034a6d69005927744
Reviewed-on: https://go-review.googlesource.com/c/go/+/264343
Trust: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Joel Sing <joel@sing.id.au>
src/cmd/internal/obj/arm/obj5.go
src/cmd/internal/obj/s390x/objz.go

index f2bfb9679f661b7496fe7f2441f3e97ba1faab79..29d3a5867d5245e75f77f842427dd0a8d6228bb0 100644 (file)
@@ -487,6 +487,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) {
                        // If there are instructions following
                        // this ARET, they come from a branch
                        // with the same stackframe, so no spadj.
+
                        if p.To.Sym != nil { // retjmp
                                p.To.Reg = REGLINK
                                q2 = obj.Appendp(p, newprog)
@@ -494,6 +495,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) {
                                q2.To.Type = obj.TYPE_BRANCH
                                q2.To.Sym = p.To.Sym
                                p.To.Sym = nil
+                               p.To.Name = obj.NAME_NONE
                                p = q2
                        }
 
index 3af5425b367e7939511528d90f549b952a4ffd95..970cf827d6fee381b2a444b52ab0861ce92560cd 100644 (file)
@@ -497,8 +497,10 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) {
                        p.From.Type = obj.TYPE_MEM
                        p.From.Reg = REGSP
                        p.From.Offset = 0
-                       p.To.Type = obj.TYPE_REG
-                       p.To.Reg = REG_LR
+                       p.To = obj.Addr{
+                               Type: obj.TYPE_REG,
+                               Reg:  REG_LR,
+                       }
 
                        q = p