This patch simplifies the handling of EH return.
authorWilco Dijkstra <wdijkstr@arm.com>
Tue, 17 Jan 2017 19:34:26 +0000 (19:34 +0000)
committerWilco Dijkstra <wilco@gcc.gnu.org>
Tue, 17 Jan 2017 19:34:26 +0000 (19:34 +0000)
commit8144a493ddc0083b06d303f51a8e34d16c122c8c
tree7d5f87929af63c4e61ef125668d02add9f1aa5e8
parenta6607774860fae67f0913d98e30f3158aa0e77a5
This patch simplifies the handling of EH return.

This patch simplifies the handling of EH return.  We force the use of the
frame pointer so the return location is always at FP + 8.  This means we
can emit a simple volatile access in EH_RETURN_HANDLER_RTX without needing md
patterns, splitters and frame offset calculations.  The new implementation also
fixes various bugs in aarch64_final_eh_return_addr, which does not work with
-fomit-frame-pointer, alloca or outgoing arguments.

    gcc/
* config/aarch64/aarch64.md (eh_return): Remove pattern and splitter.
* config/aarch64/aarch64.h (AARCH64_EH_STACKADJ_REGNUM): Remove.
(EH_RETURN_HANDLER_RTX): New define.
* config/aarch64/aarch64.c (aarch64_frame_pointer_required):
Force frame pointer in EH return functions.
(aarch64_expand_epilogue): Add barrier for eh_return.
(aarch64_final_eh_return_addr): Remove.
(aarch64_eh_return_handler_rtx): New function.
* config/aarch64/aarch64-protos.h (aarch64_final_eh_return_addr):
Remove.
(aarch64_eh_return_handler_rtx): New prototype.

    testsuite/
* gcc.target/aarch64/eh_return.c: New test.

From-SVN: r244547
gcc/ChangeLog
gcc/config/aarch64/aarch64-protos.h
gcc/config/aarch64/aarch64.c
gcc/config/aarch64/aarch64.h
gcc/config/aarch64/aarch64.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/aarch64/eh_return.c [new file with mode: 0644]