mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/internal/obj: fix tail call in non-zero frame leaf function on MIPS and S390X
A "RET f(SB)" wasn't assembled correctly in a leaf function with non-zero frame size. Follows CL 371034, for MIPS(32/64)(be/le) and S390X. Other architectures seem to do it right. Add a test. Change-Id: I41349a7ae9862b924f3a3de2bcb55b782061ce21 Reviewed-on: https://go-review.googlesource.com/c/go/+/371214 Trust: Cherry Mui <cherryyz@google.com> Run-TryBot: Cherry Mui <cherryyz@google.com> Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
parent
9e85dc5f18
commit
67917c3d78
4 changed files with 27 additions and 6 deletions
|
|
@ -466,9 +466,15 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) {
|
|||
q = c.newprog()
|
||||
q.As = AJMP
|
||||
q.Pos = p.Pos
|
||||
q.To.Type = obj.TYPE_MEM
|
||||
q.To.Offset = 0
|
||||
q.To.Reg = REGLINK
|
||||
if retSym != nil { // retjmp
|
||||
q.To.Type = obj.TYPE_BRANCH
|
||||
q.To.Name = obj.NAME_EXTERN
|
||||
q.To.Sym = retSym
|
||||
} else {
|
||||
q.To.Type = obj.TYPE_MEM
|
||||
q.To.Reg = REGLINK
|
||||
q.To.Offset = 0
|
||||
}
|
||||
q.Mark |= BRANCH
|
||||
q.Spadj = +autosize
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue