]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: align arm64 stack frames correctly
authorRuss Cox <rsc@golang.org>
Wed, 29 Jul 2015 19:11:42 +0000 (15:11 -0400)
committerRuss Cox <rsc@golang.org>
Wed, 29 Jul 2015 21:34:50 +0000 (21:34 +0000)
If the compiler doesn't do it, cmd/internal/obj/arm64 will,
and that will break the zeroing of ambiguously live values
done in zerorange, which in turn produces uninitialized
pointer cells that the GC trips over.

For #9880.

Change-Id: Ice97c30bc8b36d06b7b88d778d87fab8e1827fdc
Reviewed-on: https://go-review.googlesource.com/12847
Reviewed-by: Austin Clements <austin@google.com>
src/cmd/compile/internal/arm64/ggen.go

index 851ca4e30f7a4d9af6f05904021cb1dc11d9b438..6b0b40efbdb08b5b20f5df217cbafb73279dd6b3 100644 (file)
@@ -19,6 +19,13 @@ func defframe(ptxt *obj.Prog) {
 
        ptxt.To.Val = int32(gc.Rnd(gc.Curfn.Type.Argwid, int64(gc.Widthptr)))
        frame := uint32(gc.Rnd(gc.Stksize+gc.Maxarg, int64(gc.Widthreg)))
+
+       // arm64 requires that the frame size (not counting saved LR)
+       // be empty or be 8 mod 16. If not, pad it.
+       if frame != 0 && frame%16 != 8 {
+               frame += 8
+       }
+
        ptxt.To.Offset = int64(frame)
 
        // insert code to zero ambiguously live variables