From 23cae84fbb26f73019cd5330ce960a3661d430ac Mon Sep 17 00:00:00 2001 From: Olivier Hainque Date: Tue, 4 Mar 2003 21:14:59 +0100 Subject: [PATCH] a-except.adb (Unwind_RaiseException): Import a GNAT specific wrapper... 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 | 10 ++++++++++ gcc/ada/a-except.adb | 2 +- gcc/ada/raise.c | 37 ++++++++++++++++++++++++++++++++----- 3 files changed, 43 insertions(+), 6 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index eb76ef61b65..2994fcfcacf 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,13 @@ +2003-03-04 Olivier Hainque + + 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 * gnat_ug_unx.texi, gnat_ug_vms.texi, gnat_ug_vxw.texi, diff --git a/gcc/ada/a-except.adb b/gcc/ada/a-except.adb index e18d0e8fa53..979f11e41c9 100644 --- a/gcc/ada/a-except.adb +++ b/gcc/ada/a-except.adb @@ -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 -- diff --git a/gcc/ada/raise.c b/gcc/ada/raise.c index 087448a4d50..4db4d20a4d0 100644 --- a/gcc/ada/raise.c +++ b/gcc/ada/raise.c @@ -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 (); } -- 2.30.2