On 10/07/15 16:00, pins...@gmail.com wrote: > > > > >> On Jul 10, 2015, at 7:13 AM, Richard Earnshaw >> <richard.earns...@foss.arm.com> wrote: >> >>> On 10/07/15 13:18, Segher Boessenkool wrote: >>>> On Fri, Jul 10, 2015 at 10:02:06AM +0100, Richard Earnshaw wrote: >>>> This isn't going to reliably work for ARM or AArch64. If the only call >>>> within a leaf function is via the ASM the compiler doesn't guarantee to >>>> ensure the stack is aligned to the ABI requirements. >>> >>> Those archs have a link register, which is clobbered by the call, so >>> asm doing a call should have the link register in its clobber list, >>> which is enough to prevent shrink-wrapping the asm. Does that also >>> help aligning the stack (as a side effect?) >> >> No. Currently there's no safe way to guarantee that the stack will be >> correctly aligned for a call from within an ASM block since the compiler >> has no way of detecting that this is necessary. > > Note aarch64 is not really affected as the architecture also prevents the > unaligned stack from happening in that you will get an interrupt if it is > unaligned. >
Not quite. You'll get an interrupt if SP is used for a *memory dereference* while it is unaligned. R. > Thanks, > Andrew > > >> >>> The problem you mention is not target-specific, and would also happen >>> without shrink-wrapping. Maybe forcing a frame pointer (which they >>> do in the reported case) helps? But there certainly could exist ABIs >>> where it does not. This is arch-dependent code by nature, but still. >>> >>> Nastiness :-) >>> >>> >>> Segher >>