re PR target/89093 (C++ exception handling clobbers d8 VFP register)
authorRamana Radhakrishnan <ramana.radhakrishnan@arm.com>
Wed, 24 Apr 2019 08:16:07 +0000 (08:16 +0000)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 24 Apr 2019 08:16:07 +0000 (10:16 +0200)
PR target/89093
* raise-gcc.c (TARGET_ATTRIBUTE): Define.
(continue_unwind, personality_body, PERSONALITY_FUNCTION): Add
TARGET_ATTRIBUTE.

Co-Authored-By: Bernd Edlinger <bernd.edlinger@hotmail.de>
Co-Authored-By: Jakub Jelinek <jakub@redhat.com>
From-SVN: r270535

gcc/ada/ChangeLog
gcc/ada/raise-gcc.c

index 7e36b01e9b2ca22089c6f651ffef539c80ff96a6..0888f548ec70f0d495d81edb03714fd56eabcdf0 100644 (file)
@@ -1,3 +1,12 @@
+2019-04-24  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
+           Bernd Edlinger  <bernd.edlinger@hotmail.de>
+           Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/89093
+       * raise-gcc.c (TARGET_ATTRIBUTE): Define.
+       (continue_unwind, personality_body, PERSONALITY_FUNCTION): Add
+       TARGET_ATTRIBUTE.
+
 2019-04-07  Eric Botcazou  <ebotcazou@adacore.com>
 
        * libgnat/i-cexten.ads (CFloat_128): New type.
index 3ed976323636149881c6a663276ad25fb5917ff6..6092a87b881b4b36d5542ad003f41134d6aaad81 100644 (file)
@@ -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)