init.c: adjust EH support code on Alpha/Tru64 as well.
authorEric Botcazou <ebotcazou@adacore.com>
Fri, 22 Aug 2008 12:41:18 +0000 (14:41 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Fri, 22 Aug 2008 12:41:18 +0000 (14:41 +0200)
2008-08-22  Eric Botcazou  <ebotcazou@adacore.com>

* init.c: adjust EH support code on Alpha/Tru64 as well.

* raise-gcc.c: Add back a couple of comments.

From-SVN: r139446

gcc/ada/init.c
gcc/ada/raise-gcc.c

index fcf3af7dc4f635a649da0fa7f3e5887b28b79cf7..79655931b37f746a22cbffa3c841de117fbc6916 100644 (file)
@@ -291,30 +291,6 @@ extern char *__gnat_get_code_loc (struct sigcontext *);
 extern void __gnat_set_code_loc (struct sigcontext *, char *);
 extern size_t __gnat_machine_state_length (void);
 
-/* __gnat_adjust_context_for_raise - see comments along with the default
-   version later in this file.  */
-
-#define HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE
-
-void
-__gnat_adjust_context_for_raise (int signo, void *context)
-{
-  struct sigcontext * sigcontext = (struct sigcontext *) context;
-
-  /* The fallback code fetches the faulting insn address from sc_pc, so
-     adjust that when need be.  For SIGFPE, the required adjustment depends
-     on the trap shadow situation (see man ieee).  */
-  if (signo == SIGFPE)
-    {
-      /* ??? We never adjust here, considering that sc_pc always
-        designates the instruction following the one which trapped.
-        This is not necessarily true but corresponds to what we have
-        always observed.  */
-    }
-  else
-    sigcontext->sc_pc ++;
-}
-
 static void
 __gnat_error_handler
   (int sig, siginfo_t *sip, struct sigcontext *context)
@@ -323,10 +299,6 @@ __gnat_error_handler
   static int recurse = 0;
   const char *msg;
 
-  /* Adjusting is required for every fault context, so adjust for this one
-     now, before we possibly trigger a recursive fault below.  */
-  __gnat_adjust_context_for_raise (sig, context);
-
   /* If this was an explicit signal from a "kill", just resignal it.  */
   if (SI_FROMUSER (sip))
     {
@@ -2104,7 +2076,7 @@ __gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED,
 {
   /* We used to compensate here for the raised from call vs raised from signal
      exception discrepancy with the GCC ZCX scheme, but this is now dealt with
-     generically (except for Alpha and IA-64), see PR other/26208.
+     generically (except for the IA-64), see GCC PR other/26208.
 
      *** Call vs signal exception discrepancy with GCC ZCX scheme ***
 
index 8b3433b3a89fe991d0e953a4e8d30c4d700d7057..434213b7d899ccb180767f02e0420fe7b8bf562a 100644 (file)
@@ -694,6 +694,8 @@ get_call_site_action_for (_Unwind_Context *uw_context,
 #else
   _Unwind_Ptr call_site = _Unwind_GetIP (uw_context);
 #endif
+  /* Subtract 1 if necessary because GetIPInfo returns the actual call site
+     value + 1 in this case.  */
   if (!ip_before_insn)
     call_site--;
 
@@ -758,6 +760,10 @@ get_call_site_action_for (_Unwind_Context *uw_context,
 #else
   _Unwind_Ptr ip = _Unwind_GetIP (uw_context);
 #endif
+  /* Subtract 1 if necessary because GetIPInfo yields a call return address
+     in this case, while we are interested in information for the call point.
+     This does not always yield the exact call instruction address but always
+     brings the IP back within the corresponding region.  */
   if (!ip_before_insn)
     ip--;