• Russ Cox's avatar
    cmd/internal/obj/arm64: reject misaligned stack frames, except empty frames · 034a10d4
    Russ Cox authored
    The layout code has to date insisted on stack frames that are 16-aligned
    including the saved LR, and it ensured this by growing the frame itself.
    This breaks code that refers to values near the top of the frame by positive
    offset from SP, and in general it's too magical: if you see TEXT xxx, $N,
    you expect that the frame size is actually N, not sometimes N and sometimes N+8.
    
    This led to a serious bug in the compiler where ambiguously live values
    were not being zeroed correctly, which in turn triggered an assertion
    in the GC about finding only valid pointers. The compiler has been
    fixed to always emit aligned frames, and the hand-written assembly
    has also been fixed.
    
    Now that everything is aligned, make unaligned an error instead of
    something to "fix" silently.
    
    For #9880.
    
    Change-Id: I05f01a9df174d64b37fa19b36a6b6c5f18d5ba2d
    Reviewed-on: https://go-review.googlesource.com/12848Reviewed-by: 's avatarAustin Clements <austin@google.com>
    034a10d4
nosplit.go 8.79 KB