]> Cypherpunks.ru repositories - gostls13.git/commitdiff
cmd/internal/obj: consolidate emitting entry stack map
authorAustin Clements <austin@google.com>
Sun, 22 Apr 2018 01:13:56 +0000 (21:13 -0400)
committerAustin Clements <austin@google.com>
Tue, 22 May 2018 14:43:35 +0000 (14:43 +0000)
The obj package needs to emit the PCDATA to select the entry stack map
before calling morestack. Currently this is copied for every
architecture. Since we're about to change how this works, consolidate
all of these copies into a single helper function.

For #24543.

Change-Id: Ia92d94de78f8e23fd06dba747c43e03e5989f67b
Reviewed-on: https://go-review.googlesource.com/109346
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/internal/obj/arm/obj5.go
src/cmd/internal/obj/arm64/obj7.go
src/cmd/internal/obj/mips/obj0.go
src/cmd/internal/obj/plist.go
src/cmd/internal/obj/ppc64/obj9.go
src/cmd/internal/obj/s390x/objz.go
src/cmd/internal/obj/x86/obj6.go

index a177e5f75fd37a42e904851252e1d30867fea3c1..c17bf2a8ac1db9dce38da4a9732a2fc344d3dce8 100644 (file)
@@ -768,13 +768,7 @@ func (c *ctxt5) stacksplit(p *obj.Prog, framesize int32) *obj.Prog {
        spfix.As = obj.ANOP
        spfix.Spadj = -framesize
 
-       pcdata := obj.Appendp(spfix, c.newprog)
-       pcdata.Pos = c.cursym.Func.Text.Pos
-       pcdata.As = obj.APCDATA
-       pcdata.From.Type = obj.TYPE_CONST
-       pcdata.From.Offset = objabi.PCDATA_StackMapIndex
-       pcdata.To.Type = obj.TYPE_CONST
-       pcdata.To.Offset = -1 // pcdata starts at -1 at function entry
+       pcdata := c.ctxt.EmitEntryLiveness(c.cursym, spfix, c.newprog)
 
        // MOVW LR, R3
        movw := obj.Appendp(pcdata, c.newprog)
index 0ea9af285471d08c748426a9c8f57e1f35f314bb..0d832387d7f7dd08c1f215ccc6feed8d4d0893ef 100644 (file)
@@ -167,13 +167,7 @@ func (c *ctxt7) stacksplit(p *obj.Prog, framesize int32) *obj.Prog {
        spfix.As = obj.ANOP
        spfix.Spadj = -framesize
 
-       pcdata := obj.Appendp(spfix, c.newprog)
-       pcdata.Pos = c.cursym.Func.Text.Pos
-       pcdata.As = obj.APCDATA
-       pcdata.From.Type = obj.TYPE_CONST
-       pcdata.From.Offset = objabi.PCDATA_StackMapIndex
-       pcdata.To.Type = obj.TYPE_CONST
-       pcdata.To.Offset = -1 // pcdata starts at -1 at function entry
+       pcdata := c.ctxt.EmitEntryLiveness(c.cursym, spfix, c.newprog)
 
        // MOV  LR, R3
        movlr := obj.Appendp(pcdata, c.newprog)
index 5bbc4ce638d7b6684569e069af506d3cab79e753..5a2546af9ed428f94c5d49e98274142e5e1bbe1b 100644 (file)
@@ -790,6 +790,8 @@ func (c *ctxt0) stacksplit(p *obj.Prog, framesize int32) *obj.Prog {
                p.Mark |= LABEL
        }
 
+       p = c.ctxt.EmitEntryLiveness(c.cursym, p, c.newprog)
+
        // JAL  runtime.morestack(SB)
        p = obj.Appendp(p, c.newprog)
 
index 8e7040477488231b543ee7237e8d9edb830f5afd..d383d85cab3e3586e9ad46fc4cc40618742cabbb 100644 (file)
@@ -190,3 +190,18 @@ func (ctxt *Link) Globl(s *LSym, size int64, flag int) {
                s.Type = objabi.STLSBSS
        }
 }
+
+// EmitEntryLiveness generates PCDATA Progs after p to switch to the
+// liveness map active at the entry of function s. It returns the last
+// Prog generated.
+func (ctxt *Link) EmitEntryLiveness(s *LSym, p *Prog, newprog ProgAlloc) *Prog {
+       pcdata := Appendp(p, newprog)
+       pcdata.Pos = s.Func.Text.Pos
+       pcdata.As = APCDATA
+       pcdata.From.Type = TYPE_CONST
+       pcdata.From.Offset = objabi.PCDATA_StackMapIndex
+       pcdata.To.Type = TYPE_CONST
+       pcdata.To.Offset = -1 // pcdata starts at -1 at function entry
+
+       return pcdata
+}
index c3a9443228483aba56039924345c0ecc1b44afa2..7bb21ab439363e318a26667a1e8b518b368ac250 100644 (file)
@@ -966,6 +966,8 @@ func (c *ctxt9) stacksplit(p *obj.Prog, framesize int32) *obj.Prog {
                q.Pcond = p
        }
 
+       p = c.ctxt.EmitEntryLiveness(c.cursym, p, c.newprog)
+
        var morestacksym *obj.LSym
        if c.cursym.CFunc() {
                morestacksym = c.ctxt.Lookup("runtime.morestackc")
index 2408af82596a44cf89365f877ab4e97f86571514..b7b8a2c7a6373b4627fe000e8a186be69ac976e0 100644 (file)
@@ -679,13 +679,7 @@ func (c *ctxtz) stacksplitPost(p *obj.Prog, pPre *obj.Prog, pPreempt *obj.Prog,
        spfix.As = obj.ANOP
        spfix.Spadj = -framesize
 
-       pcdata := obj.Appendp(spfix, c.newprog)
-       pcdata.Pos = c.cursym.Func.Text.Pos
-       pcdata.As = obj.APCDATA
-       pcdata.From.Type = obj.TYPE_CONST
-       pcdata.From.Offset = objabi.PCDATA_StackMapIndex
-       pcdata.To.Type = obj.TYPE_CONST
-       pcdata.To.Offset = -1 // pcdata starts at -1 at function entry
+       pcdata := c.ctxt.EmitEntryLiveness(c.cursym, spfix, c.newprog)
 
        // MOVD LR, R5
        p = obj.Appendp(pcdata, c.newprog)
index 59a2e20d6b0054815a835e2db283a345a30d163d..139f293b136f0427a0ebd3a2306664e95b6e3af3 100644 (file)
@@ -1150,13 +1150,7 @@ func stacksplit(ctxt *obj.Link, cursym *obj.LSym, p *obj.Prog, newprog obj.ProgA
        spfix.As = obj.ANOP
        spfix.Spadj = -framesize
 
-       pcdata := obj.Appendp(spfix, newprog)
-       pcdata.Pos = cursym.Func.Text.Pos
-       pcdata.As = obj.APCDATA
-       pcdata.From.Type = obj.TYPE_CONST
-       pcdata.From.Offset = objabi.PCDATA_StackMapIndex
-       pcdata.To.Type = obj.TYPE_CONST
-       pcdata.To.Offset = -1 // pcdata starts at -1 at function entry
+       pcdata := ctxt.EmitEntryLiveness(cursym, spfix, newprog)
 
        call := obj.Appendp(pcdata, newprog)
        call.Pos = cursym.Func.Text.Pos