re PR target/50678 (FAIL: c52104y on x86_64-apple-darwin10)
authorIain Sandoe <iains@gcc.gnu.org>
Fri, 18 Nov 2011 13:19:25 +0000 (13:19 +0000)
committerIain Sandoe <iains@gcc.gnu.org>
Fri, 18 Nov 2011 13:19:25 +0000 (13:19 +0000)
gcc/ada:

PR target/50678
* init.c (__gnat_error_handler) [Darwin]: Move work-around to the
bug filed as radar #10302855 from __gnat_error_handler ...
... to (__gnat_adjust_context_for_raise) [Darwin]: New.
(HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE) [Darwin]: Define.
(__gnat_error_handler) [Darwin]: Use __gnat_adjust_context_for_raise.

From-SVN: r181474

gcc/ada/ChangeLog
gcc/ada/init.c

index 8da84db096c84f5766680860536b7f924b59eacc..e196ffe2fa28833b2b153b5ef1d043bdcc529910 100644 (file)
@@ -1,3 +1,12 @@
+2011-11-18  Iain Sandoe  <iains@gcc.gnu.org>
+
+       PR target/50678
+       * init.c (__gnat_error_handler) [Darwin]: Move work-around to the
+       bug filed as radar #10302855 from __gnat_error_handler ...
+       ... to (__gnat_adjust_context_for_raise) [Darwin]: New.
+       (HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE) [Darwin]: Define.
+       (__gnat_error_handler) [Darwin]: Use __gnat_adjust_context_for_raise.
+
 2011-11-18  Tristan Gingold  <gingold@adacore.com>
            Iain Sandoe  <iains@gcc.gnu.org>
 
index 8d2f4e1f235d548b2279489e32f4eddb5937a58e..b6d6e6a57e1831dbc3d3e23511dcbeb30a076786 100644 (file)
@@ -2282,11 +2282,12 @@ __gnat_is_stack_guard (mach_vm_address_t addr)
   return 0;
 }
 
-static void
-__gnat_error_handler (int sig, siginfo_t *si, void *ucontext ATTRIBUTE_UNUSED)
+#define HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE
+
+void
+__gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED,
+                                void *ucontext ATTRIBUTE_UNUSED)
 {
-  struct Exception_Data *exception;
-  const char *msg;
 #if defined (__x86_64__)
   /* Work around radar #10302855/pr50678, where the unwinders (libunwind or
      libgcc_s depending on the system revision) and the DWARF unwind data for
@@ -2294,9 +2295,19 @@ __gnat_error_handler (int sig, siginfo_t *si, void *ucontext ATTRIBUTE_UNUSED)
      and rdx to be transposed)..  */
   ucontext_t *uc = (ucontext_t *)ucontext ;
   unsigned long t = uc->uc_mcontext->__ss.__rbx;
+
   uc->uc_mcontext->__ss.__rbx = uc->uc_mcontext->__ss.__rdx;
   uc->uc_mcontext->__ss.__rdx = t;
 #endif
+}
+
+static void
+__gnat_error_handler (int sig, siginfo_t *si, void *ucontext)
+{
+  struct Exception_Data *exception;
+  const char *msg;
+
+  __gnat_adjust_context_for_raise (sig, ucontext);
 
   switch (sig)
     {