Re: x86-64: Maintain 16-byte stack alignment
From: Ard Biesheuvel <hidden>
Date: 2017-01-12 08:02:03
Also in:
lkml
On 12 January 2017 at 06:12, Herbert Xu [off-list ref] wrote:
On Tue, Jan 10, 2017 at 05:30:48PM +0000, Ard Biesheuvel wrote:quoted
Apologies for introducing this breakage. It seemed like an obvious and simple cleanup, so I didn't even bother to mention it in the commit log, but if the kernel does not guarantee 16 byte alignment, I guess we should revert to the old method. If SSE instructions are the only ones that require this alignment, then I suppose not having a ABI conforming stack pointer should not be an issue in general.BTW Ard, what is the stack alignment on ARM64?
[From memory] the arm64 ELF psABI mandates a 16 byte stack alignment at function entry, and 8 byte alignment at all other times. This means compiled code will typically preserve 16 byte alignment, and __aligned(16) on a stack variable will likely not result in an explicit alignment of the stack pointer *. But the arm64 ISA does not have any load/store instructions that would trigger a misalignment fault on an address that is 8 byte aligned but not 16 byte aligned, so the situation is very different from x86 (assuming I am correct in asserting that there are no failure modes resulting from a misaligned stack other than this one and a potential performance hit) * I didn't check whether the exception handling realigns the stack pointer on nested exceptions (arm64 has separate IRQ stacks)