a-except.adb (Unwind_RaiseException): Import a GNAT specific wrapper...
authorOlivier Hainque <hainque@act-europe.fr>
Tue, 4 Mar 2003 20:14:59 +0000 (21:14 +0100)
committerGeert Bosch <bosch@gcc.gnu.org>
Tue, 4 Mar 2003 20:14:59 +0000 (21:14 +0100)
ada/9911
* a-except.adb (Unwind_RaiseException): Import a GNAT specific
wrapper, which name remains constant whatever underlying GCC
scheme.

* raise.c (__gnat_Unwind_RaiseException): New wrappers, providing
the stable interface needed for a-except.

From-SVN: r63795

gcc/ada/ChangeLog
gcc/ada/a-except.adb
gcc/ada/raise.c

index eb76ef61b65b8129920bb14ba23e664f086d01c3..2994fcfcacffebefd6ecf2027eb8078dad14e265 100644 (file)
@@ -1,3 +1,13 @@
+2003-03-04  Olivier Hainque <hainque@act-europe.fr>
+
+       ada/9911
+       * a-except.adb (Unwind_RaiseException): Import a GNAT specific
+       wrapper, which name remains constant whatever underlying GCC
+       scheme.
+
+       * raise.c (__gnat_Unwind_RaiseException): New wrappers, providing
+       the stable interface needed for a-except.
+
 2003-03-02  Andreas Jaeger  <aj@suse.de>
 
        * gnat_ug_unx.texi, gnat_ug_vms.texi, gnat_ug_vxw.texi,
index e18d0e8fa5334587f4c8e14dbbe55cbe455d2d4e..979f11e41c916e9c339e17d0d06ab42ef0c09179 100644 (file)
@@ -199,7 +199,7 @@ package body Ada.Exceptions is
    function Unwind_RaiseException
      (E    : access GNAT_GCC_Exception)
       return Unwind_Reason_Code;
-   pragma Import (C, Unwind_RaiseException, "_Unwind_RaiseException");
+   pragma Import (C, Unwind_RaiseException, "__gnat_Unwind_RaiseException");
 
    -----------------------
    -- Local Subprograms --
index 087448a4d5043dddd8dc45d71637f7f70007979c..4db4d20a4d03ddfccec49bbd734506a88cd9719f 100644 (file)
@@ -597,21 +597,48 @@ __gnat_eh_personality (version, actions, exception_class, ue_header, context)
 }
 
 
-#else   /* IN_RTS - For eh personality routine   */
+/* If the underlying GCC scheme for exception handling is SJLJ, the standard
+   propagation routine (_Unwind_RaiseException) is actually renamed using a
+   #define directive (see unwing-sjlj.c). We need a consistently named
+   interface to import from a-except, so stubs are defined here.  */
+
+#ifdef __USING_SJLJ_EXCEPTIONS__
+
+_Unwind_Reason_Code
+__gnat_Unwind_RaiseException (e)
+     struct _Unwind_Exception *e;
+{
+  return _Unwind_SjLj_RaiseException (e);
+}
+
+#else
+/* __USING_SJLJ_EXCEPTIONS__ not defined */
+
+void
+__gnat_Unwind_RaiseException (e)
+     struct _Unwind_Exception *e;
+{
+  return _Unwind_RaiseException (e);
+}
+#endif
+
+#else
+/* IN_RTS not defined */
 
 /* The calls to the GCC runtime interface for exception raising are currently
    issued from a-except.adb, which is used by both the runtime library and
    the compiler. As the compiler binary is not linked against the GCC runtime
    library, we need a stub for this interface in the compiler case.  */
 
+/* Since we don't link the compiler with a host libgcc, we should not be
+   using the GCC eh mechanism for the compiler and so expect this function
+   never to be called.  */
 
 _Unwind_Reason_Code
-_Unwind_RaiseException (e)
+__gnat_Unwind_RaiseException (e)
      struct _Unwind_Exception *e ATTRIBUTE_UNUSED;
 {
-  /* Since we don't link the compiler with a host libgcc, we should not be
-     using the GCC eh mechanism for the compiler and so expect this function
-     never to be called.  */
   abort ();
 }