re PR target/50678 (FAIL: c52104y on x86_64-apple-darwin10)
authorIain Sandoe <iains@gcc.gnu.org>
Fri, 28 Oct 2011 11:59:07 +0000 (11:59 +0000)
committerIain Sandoe <iains@gcc.gnu.org>
Fri, 28 Oct 2011 11:59:07 +0000 (11:59 +0000)
ada:

PR target/50678
* init.c (Darwin/__gnat_error_handler): Apply a work-around to the
bug [filed as radar #10302855], which is inconsistent unwind data
for sigtramp.

Co-Authored-By: Eric Botcazou <ebotcazou@adacore.com>
From-SVN: r180613

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

index bacb37129b61f983e4586620bf4ea7c76dd0c034..11d0209738bf3ae4faa5facc4f033d02b032016f 100644 (file)
@@ -1,3 +1,11 @@
+2011-10-28  Iain Sandoe  <iains@gcc.gnu.org>
+           Eric Botcazou  <ebotcazou@adacore.com>
+
+       PR target/50678
+       * init.c (Darwin/__gnat_error_handler): Apply a work-around to the
+       bug [filed as radar #10302855], which is inconsistent unwind data
+       for sigtramp.
+
 2011-10-28  Eric Botcazou  <ebotcazou@adacore.com>
 
        PR ada/50842
index 9ac475da3c53e604b5d9c5f03dc3cfe197a7312a..8d2f4e1f235d548b2279489e32f4eddb5937a58e 100644 (file)
@@ -2287,6 +2287,16 @@ __gnat_error_handler (int sig, siginfo_t *si, 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
+     the sigtramp have different ideas about register numbering (causing rbx
+     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
 
   switch (sig)
     {