Richard Sandiford <richard.sandif...@arm.com> writes:
> Richard Biener <richard.guent...@gmail.com> writes:
>> On Fri, Apr 11, 2025 at 11:10 AM Richard Sandiford
>> <richard.sandif...@arm.com> wrote:
>>>
>>> Richard Biener <richard.guent...@gmail.com> writes:
>>> > On Thu, Apr 10, 2025 at 10:10 PM Richard Sandiford
>>> > <richard.sandif...@arm.com> wrote:
>>> >>
>>> >> PR119610 is about incorrect CFI output for a stack probe when that
>>> >> probe is not the initial allocation.  The main aarch64 stack probe
>>> >> function, aarch64_allocate_and_probe_stack_space, implicitly assumed
>>> >> that the incoming stack pointer pointed to the top of the frame,
>>> >> and thus held the CFA.
>>> >>
>>> >> aarch64_save_callee_saves and aarch64_restore_callee_saves use a
>>> >> parameter called bytes_below_sp to track how far the stack pointer
>>> >> is above the base of the static frame.  This patch does the same
>>> >> thing for aarch64_allocate_and_probe_stack_space.
>>> >>
>>> >> Also, I noticed that the SVE path was attaching the first CFA note
>>> >> to the wrong instruction: it was attaching the note to the calculation
>>> >> of the stack size, rather than to the r11<-sp copy.
>>> >>
>>> >> Bootstrapped & regression-tested on aarch64-linux-gnu.  I'll push on
>>> >> Monday if there are no comments before then.  I'd appreciate a second
>>> >> pair of eyes though, since this is a sensitive area.
>>> >
>>> > Do you happen to know if the backports to older branches you provided for
>>> > the change that triggered this issue (in particular to GCC 7) are also 
>>> > affected?
>>>
>>> GCC 7 and GCC 8 should be ok.  The bug relies on stack protection being
>>> enabled (-fstack-protector-strong for the testcase in the PR, but just
>>> -fstack-protector for others) and that was added in GCC 9.
>>
>> Hmm, I see -fstack-protector[-strong] working with GCC 7 on aarch64.
>
> I think it's just being silently accepted as a nop.  At least:
>
>> Specifically
>> the testcase produces for foo():
>>
>>         .text
>>         .align  2
>>         .global _Z3foov
>>         .type   _Z3foov, %function
>> _Z3foov:
>> .LFB0:
>>         .cfi_startproc
>>         stp     x29, x30, [sp, -16]!
>>         .cfi_def_cfa_offset 16
>>         .cfi_offset 29, -16
>>         .cfi_offset 30, -8
>>         add     x29, sp, 0
>>         .cfi_def_cfa_register 29
>>         sub     sp, sp, #16
>>         sub     sp, sp, #524288
>
> ...the function isn't probing the stack here.  It ought to be doing
> something like the code that Alex quoted in the PR.  Compare the
> GCC 8 and GCC 9 output in https://godbolt.org/z/cWbsG3eGb .

Gah, Alex pointed out off-list that I'd once again got the options
the wrong way around: -fstack-clash-protection is the thing that
was added in GCC 9.

I find these option names really confusing :-(

Richard

Reply via email to