This is the mail archive of the
mailing list for the GCC project.
Re: Can shrink-wrapping ever move prologue past an ASM statement?
- From: Richard Earnshaw <Richard dot Earnshaw at foss dot arm dot com>
- To: pinskia at gmail dot com
- Cc: Segher Boessenkool <segher at kernel dot crashing dot org>, Jeff Law <law at redhat dot com>, Josh Poimboeuf <jpoimboe at redhat dot com>, GCC Mailing List <gcc at gcc dot gnu dot org>, Vojtech Pavlik <vojtech at suse dot cz>
- Date: Fri, 10 Jul 2015 16:16:43 +0100
- Subject: Re: Can shrink-wrapping ever move prologue past an ASM statement?
- Authentication-results: sourceware.org; auth=none
- References: <20150707175349 dot GA2325 at virgil dot suse dot cz> <20150707184415 dot GB13004 at gate dot crashing dot org> <20150708092309 dot GB2325 at virgil dot suse dot cz> <20150708103631 dot GA23975 at gate dot crashing dot org> <20150708162234 dot GB4687 at treble dot redhat dot com> <20150708205111 dot GD4687 at treble dot redhat dot com> <559D92E0 dot 6030008 at redhat dot com> <559F8A0E dot 8030500 at foss dot arm dot com> <20150710121812 dot GC6366 at gate dot crashing dot org> <559FD30C dot 9000303 at foss dot arm dot com> <DE2A7A16-883E-4963-A565-5B43417200AC at gmail dot com>
On 10/07/15 16:00, email@example.com wrote:
>> On Jul 10, 2015, at 7:13 AM, Richard Earnshaw <Richard.Earnshaw@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.
>>> 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 :-)