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>
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