]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/obj: fix PCSP table at runtime.morestack calls
authorMatthew Dempsky <mdempsky@google.com>
Wed, 30 Dec 2015 23:19:54 +0000 (15:19 -0800)
committerMatthew Dempsky <mdempsky@google.com>
Tue, 5 Jan 2016 01:48:31 +0000 (01:48 +0000)
Fixes #13346.

Change-Id: Ic903ee90575e8dbe23905d0678d3295745d1d47f
Reviewed-on: https://go-review.googlesource.com/18154
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: Russ Cox <rsc@golang.org>
src/cmd/internal/obj/arm/obj5.go
src/cmd/internal/obj/arm64/obj7.go
src/cmd/internal/obj/x86/obj6.go

index ae045049eefe32ebe0e80c968ac741f735576d4c..19a70e177e9ec4857fcb04a8b9a91002adf4ec74 100644 (file)
@@ -803,8 +803,12 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32) *obj.Prog {
        for last = ctxt.Cursym.Text; last.Link != nil; last = last.Link {
        }
 
+       spfix := obj.Appendp(ctxt, last)
+       spfix.As = obj.ANOP
+       spfix.Spadj = -framesize
+
        // MOVW LR, R3
-       movw := obj.Appendp(ctxt, last)
+       movw := obj.Appendp(ctxt, spfix)
        movw.As = AMOVW
        movw.From.Type = obj.TYPE_REG
        movw.From.Reg = REGLINK
@@ -831,6 +835,7 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32) *obj.Prog {
        b.As = obj.AJMP
        b.To.Type = obj.TYPE_BRANCH
        b.Pcond = ctxt.Cursym.Text.Link
+       b.Spadj = +framesize
 
        return bls
 }
index 39330c6c12d9f1b9a9861ab256f5a71a2097e85e..93c4b1a6b8d74c7adbbf4a3402eaa50f3d4ec733 100644 (file)
@@ -161,8 +161,12 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32) *obj.Prog {
        for last = ctxt.Cursym.Text; last.Link != nil; last = last.Link {
        }
 
+       spfix := obj.Appendp(ctxt, last)
+       spfix.As = obj.ANOP
+       spfix.Spadj = -framesize
+
        // MOV  LR, R3
-       movlr := obj.Appendp(ctxt, last)
+       movlr := obj.Appendp(ctxt, spfix)
        movlr.As = AMOVD
        movlr.From.Type = obj.TYPE_REG
        movlr.From.Reg = REGLINK
@@ -201,6 +205,7 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32) *obj.Prog {
        jmp.As = AB
        jmp.To.Type = obj.TYPE_BRANCH
        jmp.Pcond = ctxt.Cursym.Text.Link
+       jmp.Spadj = +framesize
 
        // placeholder for bls's jump target
        // p = obj.Appendp(ctxt, p)
index ef22e55cd8892783ba234947a32c968d04bed068..55ddfe108c8310c46a118697f963b4742e26f9b1 100644 (file)
@@ -1080,7 +1080,11 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32, textarg int32) *ob
        for last = ctxt.Cursym.Text; last.Link != nil; last = last.Link {
        }
 
-       call := obj.Appendp(ctxt, last)
+       spfix := obj.Appendp(ctxt, last)
+       spfix.As = obj.ANOP
+       spfix.Spadj = -framesize
+
+       call := obj.Appendp(ctxt, spfix)
        call.Lineno = ctxt.Cursym.Text.Lineno
        call.Mode = ctxt.Cursym.Text.Mode
        call.As = obj.ACALL
@@ -1098,6 +1102,7 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32, textarg int32) *ob
        jmp.As = obj.AJMP
        jmp.To.Type = obj.TYPE_BRANCH
        jmp.Pcond = ctxt.Cursym.Text.Link
+       jmp.Spadj = +framesize
 
        jls.Pcond = call
        if q1 != nil {