From: Iain Sandoe Date: Fri, 18 Nov 2011 13:19:25 +0000 (+0000) Subject: re PR target/50678 (FAIL: c52104y on x86_64-apple-darwin10) X-Git-Tag: releases/gcc-4.7.0~2120 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=590175d22876c396b55c3c3cb38bd70a7c4b790e;p=thirdparty%2Fgcc.git re PR target/50678 (FAIL: c52104y on x86_64-apple-darwin10) 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 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 8da84db096c8..e196ffe2fa28 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,12 @@ +2011-11-18 Iain Sandoe + + 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 Iain Sandoe diff --git a/gcc/ada/init.c b/gcc/ada/init.c index 8d2f4e1f235d..b6d6e6a57e18 100644 --- a/gcc/ada/init.c +++ b/gcc/ada/init.c @@ -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) {