http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50678



--- Comment #68 from simon at pushface dot org 2013-02-02 17:27:12 UTC ---

(In reply to comment #66)

> (In reply to comment #65)

> 

> Something amazing has happened with Xcode 4.6.

> 

> I'm running Darwin 12.2.1, Georg is running 11.4.2.

> 

> When I built r195611 with Xcode 4.5.2, the test case failed.

> 

> When I built with Xcode 4.6, the test case succeeded.

> 

> I have also built (regrettably, with Xcode 4.6) a version with the

> register-swap disabled; *and that succeeded too*. So it no longer matters

> whether we swap rbx, rdx.



Apologies to all; I don't know what I did wrong, but now I've rebuilt the

unpatched tree and a version with register-swap disabled in separate build

trees, and the register-swap is no longer needed in Darwin 12.2.1 and, if

applied, results in the same error that it was designed to cure.



I'm still using Xcode 4.6, but I no longer believe that affects this issue.



The compiler was:



Configured with: ../gcc-trunk-svn/configure --prefix=/opt/gcc-4.8-195682

--disable-multilib --enable-languages=c,ada --target=x86_64-apple-darwin12

--build=x86_64-apple-darwin12

Thread model: posix

gcc version 4.8.0 20130202 (experimental) [trunk revision 195682] (GCC) 



Unpatched:



        === acats Summary ===

# of expected passes        2319

# of unexpected failures    1

*** FAILURES: c52104y 



        === gnat Summary ===



# of expected passes        1158

# of expected failures        17

# of unsupported tests        5



The patch applied was to remove the register swap implemented at r181474:



Index: gcc/ada/init.c

===================================================================

--- gcc/ada/init.c    (revision 195682)

+++ gcc/ada/init.c    (working copy)

@@ -2093,25 +2093,6 @@

   return 0;

 }



-#define HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE

-

-void

-__gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED,

-                 void *ucontext ATTRIBUTE_UNUSED)

-{

-#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

-}

-

 static void

 __gnat_error_handler (int sig, siginfo_t *si, void *ucontext)

 {



Patched:



                === acats Summary ===

# of expected passes            2320

# of unexpected failures        0



        === gnat Summary ===



# of expected passes        1158

# of expected failures        17

# of unsupported tests        5





I also ran Iain Sandoe's demo using c++/vendor tools (attachment 25540), which

reported:



$ ./fail

caught and OK.. 

dummy cleanup, OK



The vendor G++ is

gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)



so I also ran with the G++ in a darwin11 build of GCC 4.7.0; again,



$ ./fail

caught and OK.. 

dummy cleanup, OK

Reply via email to