diff options
author | Marcus Shawcroft <marcus.shawcroft@arm.com> | 2014-03-27 10:13:50 +0000 |
---|---|---|
committer | Marcus Shawcroft <mshawcroft@gcc.gnu.org> | 2014-03-27 10:13:50 +0000 |
commit | 0b7f81668edcd07722fa4637cb61e17afd0c5d58 (patch) | |
tree | b37b071828298af9a484d41c16d102e23e430568 /libgcc | |
parent | 2f2a7d154350c5bbe2da1ff5b926595860268577 (diff) | |
download | gcc-0b7f81668edcd07722fa4637cb61e17afd0c5d58.zip gcc-0b7f81668edcd07722fa4637cb61e17afd0c5d58.tar.gz gcc-0b7f81668edcd07722fa4637cb61e17afd0c5d58.tar.bz2 |
[PR 60580, AArch64] Fix __attribute__ ((optimize("no-omit-frame-pointer")))
The implementation of -m[no-]omit-leaf-frame-pointer and
-f[no-]omit-frame-pointer in the AArch64 target does not behave
correctly in the presence of __attribute__ optimize.
This patch adjusts the implementation to work in a similar fashion to
the same functionality in the i386 target.
The problem occurs because the current implementation uses a global
'faked_omit_frame_pointer' to retain the original value of
flag_omit_frame_pointer. The global does not form part of the
optimization save state.
This solution removes the global and instead tracks required behaviour
using only flag_omit_frame_pointer and flag_omit_leaf_frame_pointer.
These two form part of the optimziation save state and target save
state respectively.
The additional complication for AArch64 is that the PCS requires that
given -fno-omit-frame-pointer -momit-leave-frame-pointer, a leaf
function that kills LR must create a frame record. This is readily
handled in aarch64_frame_pointer_required(). I've dropped logic in
aarch64_can_eliminate() that attempts to detect this scenario since it
From-SVN: r208862
Diffstat (limited to 'libgcc')
0 files changed, 0 insertions, 0 deletions