Comments
Patch
===================================================================
@@ -32,28 +32,14 @@
-- This is the default version, using the __builtin_setjmp/longjmp EH
-- mechanism.
-with System.Storage_Elements; use System.Storage_Elements;
-
with Ada.Unchecked_Conversion;
-pragma Warnings (Off);
-
separate (Ada.Exceptions)
package body Exception_Propagation is
-- Common binding to __builtin_longjmp for sjlj variants.
- -- The builtin expects a pointer type for the jmpbuf address argument, and
- -- System.Address doesn't work because this is really an integer type.
-
- type Jmpbuf_Address is access Character;
-
- function To_Jmpbuf_Address is new
- Ada.Unchecked_Conversion (System.Address, Jmpbuf_Address);
-
- procedure builtin_longjmp (buffer : Jmpbuf_Address; Flag : Integer);
+ procedure builtin_longjmp (buffer : System.Address; Flag : Integer);
pragma No_Return (builtin_longjmp);
pragma Import (Intrinsic, builtin_longjmp, "__builtin_longjmp");
@@ -62,11 +48,7 @@
-------------------------
procedure Propagate_Exception
- (E : Exception_Id;
- From_Signal_Handler : Boolean)
is
- pragma Inspection_Point (E);
-
Jumpbuf_Ptr : constant Address := Get_Jmpbuf_Address.all;
Excep : constant EOA := Get_Current_Excep.all;
begin
@@ -108,7 +90,7 @@
Exception_Traces.Notify_Handled_Exception;
end if;
- builtin_longjmp (To_Jmpbuf_Address (Jumpbuf_Ptr), 1);
+ builtin_longjmp (Jumpbuf_Ptr, 1);
else
Exception_Traces.Notify_Unhandled_Exception;
===================================================================
@@ -445,12 +445,7 @@
-- handling the two phase scheme it implements.
procedure Propagate_Exception
- (E : Exception_Id;
- From_Signal_Handler : Boolean)
is
- pragma Inspection_Point (E);
- pragma Unreferenced (From_Signal_Handler);
-
Excep : constant EOA := Get_Current_Excep.all;
GCC_Exception : GNAT_GCC_Exception_Access;
===================================================================
@@ -239,9 +239,7 @@
-- Exception propagation routines --
------------------------------------
- procedure Propagate_Exception
- (E : Exception_Id;
- From_Signal_Handler : Boolean);
+ procedure Propagate_Exception;
pragma No_Return (Propagate_Exception);
-- This procedure propagates the exception represented by the occurrence
-- referenced by Current_Excep in the TSD for the current task.
@@ -268,8 +266,7 @@
procedure Raise_Current_Excep (E : Exception_Id);
pragma No_Return (Raise_Current_Excep);
pragma Export (C, Raise_Current_Excep, "__gnat_raise_nodefer_with_msg");
- -- This is a simple wrapper to Exception_Propagation.Propagate_Exception
- -- setting the From_Signal_Handler argument to False.
+ -- This is a simple wrapper to Exception_Propagation.Propagate_Exception.
--
-- This external name for Raise_Current_Excep is historical, and probably
-- should be changed but for now we keep it, because gdb and gigi know
@@ -815,8 +812,7 @@
procedure Raise_Current_Excep (E : Exception_Id) is
begin
Debug_Raise_Exception (E => SSL.Exception_Data_Ptr (E));
- Exception_Propagation.Propagate_Exception
- (E => E, From_Signal_Handler => False);
+ Exception_Propagation.Propagate_Exception;
end Raise_Current_Excep;
---------------------
@@ -923,9 +919,7 @@
Abort_Defer.all;
end if;
- Debug_Raise_Exception (E => SSL.Exception_Data_Ptr (E));
- Exception_Propagation.Propagate_Exception
- (E => E, From_Signal_Handler => True);
+ Raise_Current_Excep (E);
end Raise_From_Signal_Handler;
-------------------------