arm: Avoid emitting bogus CFA adjusts for CMSE nonsecure calls [PR99725]
authorAlex Coplan <alex.coplan@arm.com>
Tue, 11 May 2021 12:11:09 +0000 (13:11 +0100)
committerAlex Coplan <alex.coplan@arm.com>
Tue, 11 May 2021 12:11:09 +0000 (13:11 +0100)
commit2ac1f0eb3887335b7a7e845812956fa436e72a91
tree669c82dc015203eaa09cf5903e8b04b7adf6f3c6
parent28de75d27685b2735612d264bb96f39001f4d836
arm: Avoid emitting bogus CFA adjusts for CMSE nonsecure calls [PR99725]

The PR shows us attaching REG_CFA_ADJUST_CFA notes to stack pointer
adjustments emitted in cmse_nonsecure_call_inline_register_clear (when
-march=armv8.1-m.main). However, the stack pointer is not guaranteed to
be the CFA reg. If we're at -O0 or we have -fno-omit-frame-pointer, then
the frame pointer will be used as the CFA reg, and these notes on the sp
adjustments will lead to ICEs in dwarf2out_frame_debug_adjust_cfa.

This patch avoids emitting these notes if the current function has a
frame pointer.

gcc/ChangeLog:

PR target/99725
* config/arm/arm.c (cmse_nonsecure_call_inline_register_clear):
Avoid emitting CFA adjusts on the sp if we have the fp.

gcc/testsuite/ChangeLog:

PR target/99725
* gcc.target/arm/cmse/pr99725.c: New test.
gcc/config/arm/arm.c
gcc/testsuite/gcc.target/arm/cmse/pr99725.c [new file with mode: 0644]