From: Russ Cox Date: Wed, 29 Jul 2015 19:11:42 +0000 (-0400) Subject: cmd/compile: align arm64 stack frames correctly X-Git-Tag: go1.5beta3~11 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=3952057cf6597981efcc066349fcfae746333f83;p=gostls13.git cmd/compile: align arm64 stack frames correctly 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 --- diff --git a/src/cmd/compile/internal/arm64/ggen.go b/src/cmd/compile/internal/arm64/ggen.go index 851ca4e30f..6b0b40efbd 100644 --- a/src/cmd/compile/internal/arm64/ggen.go +++ b/src/cmd/compile/internal/arm64/ggen.go @@ -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