From 0f7e4fe2e3df79f854787901c3ab2e899ad1997c Mon Sep 17 00:00:00 2001 From: Ramana Radhakrishnan Date: Wed, 24 Apr 2019 08:16:07 +0000 Subject: [PATCH] re PR target/89093 (C++ exception handling clobbers d8 VFP register) PR target/89093 * raise-gcc.c (TARGET_ATTRIBUTE): Define. (continue_unwind, personality_body, PERSONALITY_FUNCTION): Add TARGET_ATTRIBUTE. Co-Authored-By: Bernd Edlinger Co-Authored-By: Jakub Jelinek From-SVN: r270535 --- gcc/ada/ChangeLog | 9 +++++++++ gcc/ada/raise-gcc.c | 10 ++++++++++ 2 files changed, 19 insertions(+) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 7e36b01e9b2..0888f548ec7 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,12 @@ +2019-04-24 Ramana Radhakrishnan + Bernd Edlinger + Jakub Jelinek + + PR target/89093 + * raise-gcc.c (TARGET_ATTRIBUTE): Define. + (continue_unwind, personality_body, PERSONALITY_FUNCTION): Add + TARGET_ATTRIBUTE. + 2019-04-07 Eric Botcazou * libgnat/i-cexten.ads (CFloat_128): New type. diff --git a/gcc/ada/raise-gcc.c b/gcc/ada/raise-gcc.c index 3ed97632363..6092a87b881 100644 --- a/gcc/ada/raise-gcc.c +++ b/gcc/ada/raise-gcc.c @@ -1154,10 +1154,18 @@ extern void __gnat_notify_unhandled_exception (struct Exception_Occurrence *); #define PERSONALITY_FUNCTION __gnat_personality_v0 #endif +#if defined (__ARM_EABI_UNWINDER__) \ + && (defined (IN_RTS) || GCC_VERSION > 9000) +#define TARGET_ATTRIBUTE __attribute__((target ("general-regs-only"))) +#else +#define TARGET_ATTRIBUTE +#endif + /* Code executed to continue unwinding. With the ARM unwinder, the personality routine must unwind one frame (per EHABI 7.3 4.). */ static _Unwind_Reason_Code +TARGET_ATTRIBUTE continue_unwind (struct _Unwind_Exception* ue_header ATTRIBUTE_UNUSED, struct _Unwind_Context* uw_context ATTRIBUTE_UNUSED) { @@ -1172,6 +1180,7 @@ continue_unwind (struct _Unwind_Exception* ue_header ATTRIBUTE_UNUSED, between all unwinders. */ static _Unwind_Reason_Code +TARGET_ATTRIBUTE personality_body (_Unwind_Action uw_phases, _Unwind_Exception *uw_exception, _Unwind_Context *uw_context) @@ -1342,6 +1351,7 @@ PERSONALITY_FUNCTION (_Unwind_State state, struct _Unwind_Context* uw_context); PERSONALITY_STORAGE _Unwind_Reason_Code +TARGET_ATTRIBUTE PERSONALITY_FUNCTION (_Unwind_State state, struct _Unwind_Exception* uw_exception, struct _Unwind_Context* uw_context) -- 2.30.2