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

Reply via email to