diff mbox

[Darwin/Ada] work around PR target/50678

Message ID 5BA8F0A2-E604-400F-94C1-608B83847505@sandoe-acoustics.co.uk
State New
Headers show

Commit Message

Iain Sandoe Nov. 17, 2011, 6:13 p.m. UTC
On 12 Nov 2011, at 07:44, Eric Botcazou wrote:

>> This has been filed as radar #10302855, but we need a work-around
>> until that is resolved (possibly forever on older systems).
>>
>> OK for trunk?
>> (what opinion about 4.6?)
>
> Did you apply it to the 4.6 branch?  I think that this would be  
> appropriate.
>
>> ada:
>>
>> 	PR target/50678
>> 	* init.c (Darwin/__gnat_error_handler): Transpose rbx and rdx in the
>> 	handler.
>
> Sorry, I overlooked something here: there is a specific procedure to  
> make this
> kind of adjustments.  The reason is that the adjustment needs to be  
> made in
> the tasking case as well and __gnat_error_handler isn't used for  
> this case.
>
> So HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE must be defined in the Darwin- 
> specific
> section and __gnat_adjust_context_for_raise implemented (with the  
> standard
> prototype) and __gnat_error_handler changed to call it instead.
>
> Would you mind adjusting the fix that way?  Thanks in advance.

the following is reg-strapping on x86-64-darwin10,
OK for trunk (and 4.6) if it succeeds (with a ChangeLog, of course) ?
Iain

(libunwind or
       libgcc_s depending on the system revision) and the DWARF unwind  
data for
@@ -2294,10 +2295,23 @@ __gnat_is_stack_guard (mach_vm_address_t addr)
       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  
ATTRIBUTE_UNUSED)
+{
+  struct Exception_Data *exception;
+  const char *msg;
+
+#if defined (__x86_64__)
+  /* Work around #10302855/pr50678 on x86-64 Darwin.  */
+  __gnat_adjust_context_for_raise (sig, ucontext);
+#endif
+
    switch (sig)
      {
      case SIGSEGV:

Comments

Eric Botcazou Nov. 17, 2011, 8:22 p.m. UTC | #1
> the following is reg-strapping on x86-64-darwin10,

Thanks a lot!

> OK for trunk (and 4.6) if it succeeds (with a ChangeLog, of course) ?

Yes, modulo:

> +static void
> +__gnat_error_handler (int sig, siginfo_t *si, void *ucontext
> ATTRIBUTE_UNUSED)

Remove ATTRIBUTE_UNUSED and...

> +#if defined (__x86_64__)
> +  /* Work around #10302855/pr50678 on x86-64 Darwin.  */
> +  __gnat_adjust_context_for_raise (sig, ucontext);
> +#endif

...remove everything except for the call to _gnat_adjust_context_for_raise.
diff mbox

Patch

Index: gcc/ada/init.c
===================================================================
--- gcc/ada/init.c	(revision 181448)
+++ gcc/ada/init.c	(working copy)
@@ -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