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
Showing
- gcc/ChangeLog 14 additions, 0 deletionsgcc/ChangeLog
- gcc/config/aarch64/aarch64-protos.h 1 addition, 1 deletiongcc/config/aarch64/aarch64-protos.h
- gcc/config/aarch64/aarch64.c 35 additions, 42 deletionsgcc/config/aarch64/aarch64.c
- gcc/config/aarch64/aarch64.h 3 additions, 3 deletionsgcc/config/aarch64/aarch64.h
- gcc/config/aarch64/aarch64.md 0 additions, 19 deletionsgcc/config/aarch64/aarch64.md
- gcc/testsuite/ChangeLog 4 additions, 0 deletionsgcc/testsuite/ChangeLog
- gcc/testsuite/gcc.target/aarch64/eh_return.c 82 additions, 0 deletionsgcc/testsuite/gcc.target/aarch64/eh_return.c
Loading
Please register or sign in to comment