OSDN Git Service

* gcc-interface/misc.c (gnat_expand_expr): Remove.
[pf3gnuchains/gcc-fork.git] / gcc / ada / a-except.adb
index 1ca8190..cf04fd4 100644 (file)
@@ -6,63 +6,61 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+--          Copyright (C) 1992-2009, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
--- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
--- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
--- for  more details.  You should have  received  a copy of the GNU General --
--- Public License  distributed with GNAT;  see file COPYING.  If not, write --
--- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
--- MA 02111-1307, USA.                                                      --
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
 --                                                                          --
--- As a special exception,  if other files  instantiate  generics from this --
--- unit, or you link  this unit with other files  to produce an executable, --
--- this  unit  does not  by itself cause  the resulting  executable  to  be --
--- covered  by the  GNU  General  Public  License.  This exception does not --
--- however invalidate  any other reasons why  the executable file  might be --
--- covered by the  GNU Public License.                                      --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
 --                                                                          --
 -- GNAT was originally developed  by the GNAT team at  New York University. --
 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
 --                                                                          --
 ------------------------------------------------------------------------------
 
+--  This version of Ada.Exceptions is a full Ada 95 version, and Ada 2005
+--  features such as the additional definitions of Exception_Name returning
+--  Wide_[Wide_]String.
+
+--  It is used for building the compiler and the basic tools, since these
+--  builds may be done with bootstrap compilers that cannot handle these
+--  additions. The full version of Ada.Exceptions can be found in the files
+--  a-except-2005.ads/adb, and is used for all other builds where full Ada
+--  2005 functionality is required. In particular, it is used for building
+--  run times on all targets.
+
+pragma Compiler_Unit;
+
+pragma Style_Checks (All_Checks);
+--  No subprogram ordering check, due to logical grouping
+
 pragma Polling (Off);
 --  We must turn polling off for this unit, because otherwise we get
 --  elaboration circularities with System.Exception_Tables.
 
-pragma Warnings (Off);
---  Since several constructs give warnings in 3.14a1, including unreferenced
---  variables and pragma Unreferenced itself.
-
 with System;                  use System;
+with System.Exceptions;       use System.Exceptions;
 with System.Standard_Library; use System.Standard_Library;
 with System.Soft_Links;       use System.Soft_Links;
-with System.Machine_State_Operations; use System.Machine_State_Operations;
 
 package body Ada.Exceptions is
 
-   procedure builtin_longjmp (buffer : Address; Flag : Integer);
-   pragma No_Return (builtin_longjmp);
-   pragma Import (C, builtin_longjmp, "_gnat_builtin_longjmp");
-
    pragma Suppress (All_Checks);
    --  We definitely do not want exceptions occurring within this unit, or
    --  we are in big trouble. If an exceptional situation does occur, better
    --  that it not be raised, since raising it can cause confusing chaos.
 
-   Zero_Cost_Exceptions : Integer;
-   pragma Import (C, Zero_Cost_Exceptions, "__gl_zero_cost_exceptions");
-   --  Boolean indicating if we are handling exceptions using a zero cost
-   --  mechanism.
-   --
-   --  Note that although we currently do not support it, the GCC3 back-end
-   --  tables are also potentially useable for setjmp/longjmp processing.
-
    -----------------------
    -- Local Subprograms --
    -----------------------
@@ -71,54 +69,11 @@ package body Ada.Exceptions is
    --  from C clients using the given external name, even though they are not
    --  technically visible in the Ada sense.
 
-   procedure AAA;
-   procedure ZZZ;
-   --  Mark start and end of procedures in this package
-   --
-   --  The AAA and ZZZ procedures are used to provide exclusion bounds in
-   --  calls to Call_Chain at exception raise points from this unit. The
-   --  purpose is to arrange for the exception tracebacks not to include
-   --  frames from routines involved in the raise process, as these are
-   --  meaningless from the user's standpoint.
-   --
-   --  For these bounds to be meaningful, we need to ensure that the object
-   --  code for the routines involved in processing a raise is located after
-   --  the object code for AAA and before the object code for ZZZ. This will
-   --  indeed be the case as long as the following rules are respected:
-   --
-   --  1) The bodies of the subprograms involved in processing a raise
-   --     are located after the body of AAA and before the body of ZZZ.
-   --
-   --  2) No pragma Inline applies to any of these subprograms, as this
-   --     could delay the corresponding assembly output until the end of
-   --     the unit.
-
-   Code_Address_For_AAA, Code_Address_For_ZZZ : System.Address;
-   --  Used to represent addresses really inside the code range for AAA and
-   --  ZZZ, initialized to the address of a label inside the corresponding
-   --  procedure. This is initialization takes place inside the procedures
-   --  themselves, which are called as part of the elaboration code.
-   --
-   --  We are doing this instead of merely using Proc'Address because on some
-   --  platforms the latter does not yield the address we want, but the
-   --  address of a stub or of a descriptor instead. This is the case at least
-   --  on Alpha-VMS and PA-HPUX.
-
-   procedure Call_Chain (Excep : EOA);
-   --  Store up to Max_Tracebacks in Excep, corresponding to the current
-   --  call chain.
-
-   procedure Process_Raise_Exception
-     (E                   : Exception_Id;
-      From_Signal_Handler : Boolean);
+   procedure Process_Raise_Exception (E : Exception_Id);
    pragma No_Return (Process_Raise_Exception);
    --  This is the lowest level raise routine. It raises the exception
    --  referenced by Current_Excep.all in the TSD, without deferring abort
    --  (the caller must ensure that abort is deferred on entry).
-   --
-   --  This is the common implementation for Raise_Current_Excep and
-   --  Raise_From_Signal_Handler. The origin of the call is indicated by the
-   --  From_Signal_Handler argument.
 
    procedure To_Stderr (S : String);
    pragma Export (Ada, To_Stderr, "__gnat_to_stderr");
@@ -139,9 +94,9 @@ package body Ada.Exceptions is
 
       procedure Set_Exception_C_Msg
         (Id   : Exception_Id;
-         Msg1 : Big_String_Ptr;
+         Msg1 : System.Address;
          Line : Integer        := 0;
-         Msg2 : Big_String_Ptr := null);
+         Msg2 : System.Address := System.Null_Address);
       --  This routine is called to setup the exception referenced by the
       --  Current_Excep field in the TSD to contain the indicated Id value
       --  and message. Msg1 is a null terminated string which is generated
@@ -210,7 +165,7 @@ package body Ada.Exceptions is
       pragma Export
         (Ada, Tailored_Exception_Information,
            "__gnat_tailored_exception_information");
-      --  This is currently used by System.Tasking.Stages.
+      --  This is currently used by System.Tasking.Stages
 
    end Exception_Data;
 
@@ -253,34 +208,11 @@ package body Ada.Exceptions is
 
    package Exception_Propagation is
 
-      use Exception_Traces;
-      --  Imports Notify_Unhandled_Exception and
-      --  Unhandled_Exception_Terminate
-
-      ------------------------------------
-      -- Exception propagation routines --
-      ------------------------------------
-
       procedure Setup_Exception
         (Excep    : EOA;
          Current  : EOA;
          Reraised : Boolean := False);
-      --  Perform the necessary operations to prepare the propagation of Excep
-      --  in a task where Current is the current occurrence. Excep is assumed
-      --  to be a valid (non null) pointer.
-      --
-      --  This should be called before any (re-)setting of the current
-      --  occurrence. Any such (re-)setting shall take care *not* to clobber
-      --  the Private_Data component.
-      --
-      --  Having Current provided as an argument (instead of retrieving it via
-      --  Get_Current_Excep internally) is required to allow one task to setup
-      --  an exception for another task, which is used by Transfer_Occurrence.
-
-      procedure Propagate_Exception (From_Signal_Handler : Boolean);
-      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.
+      --  Dummy routine used to share a-exexda.adb, do nothing
 
    end Exception_Propagation;
 
@@ -304,8 +236,7 @@ package body Ada.Exceptions is
    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 Process_Raise_Exception setting the
-   --  From_Signal_Handler argument to False.
+   --  This is a simple wrapper to Process_Raise_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
@@ -329,9 +260,9 @@ package body Ada.Exceptions is
 
    procedure Raise_With_Location_And_Msg
      (E : Exception_Id;
-      F : Big_String_Ptr;
+      F : System.Address;
       L : Integer;
-      M : Big_String_Ptr := null);
+      M : System.Address := System.Null_Address);
    pragma No_Return (Raise_With_Location_And_Msg);
    --  Raise an exception with given exception id value. A filename and line
    --  number is associated with the raise and is stored in the exception
@@ -339,7 +270,7 @@ package body Ada.Exceptions is
    --  this (if M is not null).
 
    procedure Raise_Constraint_Error
-     (File : Big_String_Ptr;
+     (File : System.Address;
       Line : Integer);
    pragma No_Return (Raise_Constraint_Error);
    pragma Export
@@ -347,16 +278,16 @@ package body Ada.Exceptions is
    --  Raise constraint error with file:line information
 
    procedure Raise_Constraint_Error_Msg
-     (File : Big_String_Ptr;
+     (File : System.Address;
       Line : Integer;
-      Msg  : Big_String_Ptr);
+      Msg  : System.Address);
    pragma No_Return (Raise_Constraint_Error_Msg);
    pragma Export
      (C, Raise_Constraint_Error_Msg, "__gnat_raise_constraint_error_msg");
    --  Raise constraint error with file:line + msg information
 
    procedure Raise_Program_Error
-     (File : Big_String_Ptr;
+     (File : System.Address;
       Line : Integer);
    pragma No_Return (Raise_Program_Error);
    pragma Export
@@ -364,16 +295,16 @@ package body Ada.Exceptions is
    --  Raise program error with file:line information
 
    procedure Raise_Program_Error_Msg
-     (File : Big_String_Ptr;
+     (File : System.Address;
       Line : Integer;
-      Msg  : Big_String_Ptr);
+      Msg  : System.Address);
    pragma No_Return (Raise_Program_Error_Msg);
    pragma Export
      (C, Raise_Program_Error_Msg, "__gnat_raise_program_error_msg");
    --  Raise program error with file:line + msg information
 
    procedure Raise_Storage_Error
-     (File : Big_String_Ptr;
+     (File : System.Address;
       Line : Integer);
    pragma No_Return (Raise_Storage_Error);
    pragma Export
@@ -381,9 +312,9 @@ package body Ada.Exceptions is
    --  Raise storage error with file:line information
 
    procedure Raise_Storage_Error_Msg
-     (File : Big_String_Ptr;
+     (File : System.Address;
       Line : Integer;
-      Msg  : Big_String_Ptr);
+      Msg  : System.Address);
    pragma No_Return (Raise_Storage_Error_Msg);
    pragma Export
      (C, Raise_Storage_Error_Msg, "__gnat_raise_storage_error_msg");
@@ -418,17 +349,11 @@ package body Ada.Exceptions is
    --  is deferred before the reraise operation.
 
    --  Save_Occurrence variations: As the management of the private data
-   --  attached to occurrences is delicate, wether or not pointers to such
+   --  attached to occurrences is delicate, whether or not pointers to such
    --  data has to be copied in various situations is better made explicit.
    --  The following procedures provide an internal interface to help making
    --  this explicit.
 
-   procedure Save_Occurrence_And_Private
-     (Target : out Exception_Occurrence;
-      Source : Exception_Occurrence);
-   --  Copy all the components of Source to Target as well as the
-   --  Private_Data pointer.
-
    procedure Save_Occurrence_No_Private
      (Target : out Exception_Occurrence;
       Source : Exception_Occurrence);
@@ -448,42 +373,46 @@ package body Ada.Exceptions is
    -- Run-Time Check Routines --
    -----------------------------
 
-   --  These routines are called from the runtime to raise a specific
-   --  exception with a reason message attached. The parameters are
-   --  the file name and line number in each case. The names are keyed
-   --  to the codes defined in Types.ads and a-types.h (for example,
-   --  the name Rcheck_05 refers to the Reason whose Pos code is 5).
-
-   procedure Rcheck_00 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_01 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_02 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_03 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_04 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_05 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_06 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_07 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_08 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_09 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_10 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_11 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_12 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_13 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_14 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_15 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_16 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_17 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_18 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_19 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_20 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_21 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_22 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_23 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_24 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_25 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_26 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_27 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_28 (File : Big_String_Ptr; Line : Integer);
-   procedure Rcheck_29 (File : Big_String_Ptr; Line : Integer);
+   --  These routines raise a specific exception with a reason message
+   --  attached. The parameters are the file name and line number in each
+   --  case. The names are keyed to the codes defined in types.ads and
+   --  a-types.h (for example, the name Rcheck_05 refers to the Reason
+   --  RT_Exception_Code'Val (5)).
+
+   procedure Rcheck_00 (File : System.Address; Line : Integer);
+   procedure Rcheck_01 (File : System.Address; Line : Integer);
+   procedure Rcheck_02 (File : System.Address; Line : Integer);
+   procedure Rcheck_03 (File : System.Address; Line : Integer);
+   procedure Rcheck_04 (File : System.Address; Line : Integer);
+   procedure Rcheck_05 (File : System.Address; Line : Integer);
+   procedure Rcheck_06 (File : System.Address; Line : Integer);
+   procedure Rcheck_07 (File : System.Address; Line : Integer);
+   procedure Rcheck_08 (File : System.Address; Line : Integer);
+   procedure Rcheck_09 (File : System.Address; Line : Integer);
+   procedure Rcheck_10 (File : System.Address; Line : Integer);
+   procedure Rcheck_11 (File : System.Address; Line : Integer);
+   procedure Rcheck_12 (File : System.Address; Line : Integer);
+   procedure Rcheck_13 (File : System.Address; Line : Integer);
+   procedure Rcheck_14 (File : System.Address; Line : Integer);
+   procedure Rcheck_15 (File : System.Address; Line : Integer);
+   procedure Rcheck_16 (File : System.Address; Line : Integer);
+   procedure Rcheck_17 (File : System.Address; Line : Integer);
+   procedure Rcheck_18 (File : System.Address; Line : Integer);
+   procedure Rcheck_19 (File : System.Address; Line : Integer);
+   procedure Rcheck_20 (File : System.Address; Line : Integer);
+   procedure Rcheck_21 (File : System.Address; Line : Integer);
+   procedure Rcheck_22 (File : System.Address; Line : Integer);
+   procedure Rcheck_23 (File : System.Address; Line : Integer);
+   procedure Rcheck_24 (File : System.Address; Line : Integer);
+   procedure Rcheck_25 (File : System.Address; Line : Integer);
+   procedure Rcheck_26 (File : System.Address; Line : Integer);
+   procedure Rcheck_27 (File : System.Address; Line : Integer);
+   procedure Rcheck_28 (File : System.Address; Line : Integer);
+   procedure Rcheck_29 (File : System.Address; Line : Integer);
+   procedure Rcheck_30 (File : System.Address; Line : Integer);
+   procedure Rcheck_31 (File : System.Address; Line : Integer);
+   procedure Rcheck_32 (File : System.Address; Line : Integer);
+   procedure Rcheck_33 (File : System.Address; Line : Integer);
 
    pragma Export (C, Rcheck_00, "__gnat_rcheck_00");
    pragma Export (C, Rcheck_01, "__gnat_rcheck_01");
@@ -515,6 +444,10 @@ package body Ada.Exceptions is
    pragma Export (C, Rcheck_27, "__gnat_rcheck_27");
    pragma Export (C, Rcheck_28, "__gnat_rcheck_28");
    pragma Export (C, Rcheck_29, "__gnat_rcheck_29");
+   pragma Export (C, Rcheck_30, "__gnat_rcheck_30");
+   pragma Export (C, Rcheck_31, "__gnat_rcheck_31");
+   pragma Export (C, Rcheck_32, "__gnat_rcheck_32");
+   pragma Export (C, Rcheck_33, "__gnat_rcheck_33");
 
    --  None of these procedures ever returns (they raise an exception!). By
    --  using pragma No_Return, we ensure that any junk code after the call,
@@ -550,6 +483,9 @@ package body Ada.Exceptions is
    pragma No_Return (Rcheck_27);
    pragma No_Return (Rcheck_28);
    pragma No_Return (Rcheck_29);
+   pragma No_Return (Rcheck_30);
+   pragma No_Return (Rcheck_32);
+   pragma No_Return (Rcheck_33);
 
    ---------------------------------------------
    -- Reason Strings for Run-Time Check Calls --
@@ -568,29 +504,35 @@ package body Ada.Exceptions is
    Rmsg_05 : constant String := "index check failed"               & NUL;
    Rmsg_06 : constant String := "invalid data"                     & NUL;
    Rmsg_07 : constant String := "length check failed"              & NUL;
-   Rmsg_08 : constant String := "overflow check failed"            & NUL;
-   Rmsg_09 : constant String := "partition check failed"           & NUL;
-   Rmsg_10 : constant String := "range check failed"               & NUL;
-   Rmsg_11 : constant String := "tag check failed"                 & NUL;
-   Rmsg_12 : constant String := "access before elaboration"        & NUL;
-   Rmsg_13 : constant String := "accessibility check failed"       & NUL;
-   Rmsg_14 : constant String := "all guards closed"                & NUL;
-   Rmsg_15 : constant String := "duplicated entry address"         & NUL;
-   Rmsg_16 : constant String := "explicit raise"                   & NUL;
-   Rmsg_17 : constant String := "finalize/adjust raised exception" & NUL;
-   Rmsg_18 : constant String := "misaligned address value"         & NUL;
-   Rmsg_19 : constant String := "missing return"                   & NUL;
-   Rmsg_20 : constant String := "overlaid controlled object"       & NUL;
-   Rmsg_21 : constant String := "potentially blocking operation"   & NUL;
-   Rmsg_22 : constant String := "stubbed subprogram called"        & NUL;
-   Rmsg_23 : constant String := "unchecked union restriction"      & NUL;
-   Rmsg_24 : constant String := "illegal use of"
-             & " remote access-to-class-wide type, see RM E.4(18)" & NUL;
-   Rmsg_25 : constant String := "empty storage pool"               & NUL;
-   Rmsg_26 : constant String := "explicit raise"                   & NUL;
-   Rmsg_27 : constant String := "infinite recursion"               & NUL;
-   Rmsg_28 : constant String := "object too large"                 & NUL;
-   Rmsg_29 : constant String := "restriction violation"            & NUL;
+   Rmsg_08 : constant String := "null Exception_Id"                & NUL;
+   Rmsg_09 : constant String := "null-exclusion check failed"      & NUL;
+   Rmsg_10 : constant String := "overflow check failed"            & NUL;
+   Rmsg_11 : constant String := "partition check failed"           & NUL;
+   Rmsg_12 : constant String := "range check failed"               & NUL;
+   Rmsg_13 : constant String := "tag check failed"                 & NUL;
+   Rmsg_14 : constant String := "access before elaboration"        & NUL;
+   Rmsg_15 : constant String := "accessibility check failed"       & NUL;
+   Rmsg_16 : constant String := "attempt to take address of"       &
+                                " intrinsic subprogram"            & NUL;
+   Rmsg_17 : constant String := "all guards closed"                & NUL;
+   Rmsg_18 : constant String := "Current_Task referenced in entry" &
+                                " body"                            & NUL;
+   Rmsg_19 : constant String := "duplicated entry address"         & NUL;
+   Rmsg_20 : constant String := "explicit raise"                   & NUL;
+   Rmsg_21 : constant String := "finalize/adjust raised exception" & NUL;
+   Rmsg_22 : constant String := "implicit return with No_Return"   & NUL;
+   Rmsg_23 : constant String := "misaligned address value"         & NUL;
+   Rmsg_24 : constant String := "missing return"                   & NUL;
+   Rmsg_25 : constant String := "overlaid controlled object"       & NUL;
+   Rmsg_26 : constant String := "potentially blocking operation"   & NUL;
+   Rmsg_27 : constant String := "stubbed subprogram called"        & NUL;
+   Rmsg_28 : constant String := "unchecked union restriction"      & NUL;
+   Rmsg_29 : constant String := "actual/returned class-wide"       &
+                                " value not transportable"         & NUL;
+   Rmsg_30 : constant String := "empty storage pool"               & NUL;
+   Rmsg_31 : constant String := "explicit raise"                   & NUL;
+   Rmsg_32 : constant String := "infinite recursion"               & NUL;
+   Rmsg_33 : constant String := "object too large"                 & NUL;
 
    -----------------------
    -- Polling Interface --
@@ -607,28 +549,6 @@ package body Ada.Exceptions is
    --  The actual polling routine is separate, so that it can easily
    --  be replaced with a target dependent version.
 
-   ---------
-   -- AAA --
-   ---------
-
-   --  This dummy procedure gives us the start of the PC range for addresses
-   --  within the exception unit itself. We hope that gigi/gcc keep all the
-   --  procedures in their original order!
-
-   procedure AAA is
-   begin
-      <<Start_Of_AAA>>
-      Code_Address_For_AAA := Start_Of_AAA'Address;
-   end AAA;
-
-   ----------------
-   -- Call_Chain --
-   ----------------
-
-   procedure Call_Chain (Excep : EOA) is separate;
-   --  The actual Call_Chain routine is separate, so that it can easily
-   --  be dummied out when no exception traceback information is needed.
-
    ------------------------------
    -- Current_Target_Exception --
    ------------------------------
@@ -660,15 +580,18 @@ package body Ada.Exceptions is
    ------------------------
 
    function Exception_Identity
-     (X    : Exception_Occurrence)
-      return Exception_Id
+     (X : Exception_Occurrence) return Exception_Id
    is
    begin
-      if X.Id = Null_Id then
-         raise Constraint_Error;
-      else
-         return X.Id;
-      end if;
+      --  Note that the following test used to be here for the original
+      --  Ada 95 semantics, but these were modified by AI-241 to require
+      --  returning Null_Id instead of raising Constraint_Error.
+
+      --  if X.Id = Null_Id then
+      --     raise Constraint_Error;
+      --  end if;
+
+      return X.Id;
    end Exception_Identity;
 
    ---------------------------
@@ -707,7 +630,7 @@ package body Ada.Exceptions is
          raise Constraint_Error;
       end if;
 
-      return Id.Full_Name.all (1 .. Id.Name_Length - 1);
+      return To_Ptr (Id.Full_Name) (1 .. Id.Name_Length - 1);
    end Exception_Name;
 
    function Exception_Name (X : Exception_Occurrence) return String is
@@ -747,14 +670,21 @@ package body Ada.Exceptions is
    --  This package can be easily dummied out if we do not want the
    --  basic support for exception messages (such as in Ada 83).
 
-   ---------------------------
-   -- Exception_Propagation --
-   ---------------------------
+   package body Exception_Propagation is
 
-   package body Exception_Propagation is separate;
-   --  Depending on the actual exception mechanism used (front-end or
-   --  back-end based), the implementation will differ, which is why this
-   --  package is separated.
+      procedure Setup_Exception
+        (Excep    : EOA;
+         Current  : EOA;
+         Reraised : Boolean := False)
+      is
+         pragma Warnings (Off, Excep);
+         pragma Warnings (Off, Current);
+         pragma Warnings (Off, Reraised);
+      begin
+         null;
+      end Setup_Exception;
+
+   end Exception_Propagation;
 
    ----------------------
    -- Exception_Traces --
@@ -778,85 +708,41 @@ package body Ada.Exceptions is
    -- Process_Raise_Exception --
    -----------------------------
 
-   procedure Process_Raise_Exception
-     (E                   : Exception_Id;
-      From_Signal_Handler : Boolean)
-   is
+   procedure Process_Raise_Exception (E : Exception_Id) is
       pragma Inspection_Point (E);
       --  This is so the debugger can reliably inspect the parameter
 
       Jumpbuf_Ptr : constant Address := Get_Jmpbuf_Address.all;
-      Excep       : EOA := Get_Current_Excep.all;
+      Excep       : constant EOA := Get_Current_Excep.all;
+
+      procedure builtin_longjmp (buffer : Address; Flag : Integer);
+      pragma No_Return (builtin_longjmp);
+      pragma Import (C, builtin_longjmp, "_gnat_builtin_longjmp");
 
    begin
-      --  WARNING : There should be no exception handler for this body
+      --  WARNING: There should be no exception handler for this body
       --  because this would cause gigi to prepend a setup for a new
-      --  jmpbuf to the sequence of statements. We would then always get
-      --  this new buf in Jumpbuf_Ptr instead of the one for the exception
-      --  we are handling, which would completely break the whole design
-      --  of this procedure.
-
-      --  Processing varies between zero cost and setjmp/lonjmp processing.
-
-      if Zero_Cost_Exceptions /= 0 then
-
-         --  Use the front-end tables to propagate if we have them, otherwise
-         --  resort to the GCC back-end alternative. Backtrace computation is
-         --  performed, if required, by the underlying routine. Notifications
-         --  for the debugger are also not performed here, because we do not
-         --  yet know if the exception is handled.
+      --  jmpbuf to the sequence of statements in case of built-in sjljl.
+      --  We would then always get this new buf in Jumpbuf_Ptr instead of the
+      --  one for the exception we are handling, which would completely break
+      --  the whole design of this procedure.
+
+      --  If the jump buffer pointer is non-null, transfer control using
+      --  it. Otherwise announce an unhandled exception (note that this
+      --  means that we have no finalizations to do other than at the outer
+      --  level). Perform the necessary notification tasks in both cases.
+
+      if Jumpbuf_Ptr /= Null_Address then
+         if not Excep.Exception_Raised then
+            Excep.Exception_Raised := True;
+            Exception_Traces.Notify_Handled_Exception;
+         end if;
 
-         Exception_Propagation.Propagate_Exception (From_Signal_Handler);
+         builtin_longjmp (Jumpbuf_Ptr, 1);
 
       else
-         --  Compute the backtrace for this occurrence if the corresponding
-         --  binder option has been set. Call_Chain takes care of the reraise
-         --  case.
-
-         Call_Chain (Excep);
-         --  We used to only do this if From_Signal_Handler was not set,
-         --  based on the assumption that backtracing from a signal handler
-         --  would not work due to stack layout oddities. However, since
-         --
-         --   1. The flag is never set in tasking programs (Notify_Exception
-         --      performs regular raise statements), and
-         --
-         --   2. No problem has shown up in tasking programs around here so
-         --      far, this turned out to be too strong an assumption.
-         --
-         --  As, in addition, the test was
-         --
-         --   1. preventing the production of backtraces in non-tasking
-         --      programs, and
-         --
-         --   2. introducing a behavior inconsistency between
-         --      the tasking and non-tasking cases,
-         --
-         --  we have simply removed it.
-
-         --  If the jump buffer pointer is non-null, transfer control using
-         --  it. Otherwise announce an unhandled exception (note that this
-         --  means that we have no finalizations to do other than at the outer
-         --  level). Perform the necessary notification tasks in both cases.
-
-         if Jumpbuf_Ptr /= Null_Address then
-
-            if not Excep.Exception_Raised then
-               Excep.Exception_Raised := True;
-               Exception_Traces.Notify_Handled_Exception;
-            end if;
-
-            builtin_longjmp (Jumpbuf_Ptr, 1);
-
-         else
-            --  The pragma Inspection point here ensures that the debugger
-            --  can inspect the parameter.
-
-            pragma Inspection_Point (E);
-
-            Exception_Traces.Notify_Unhandled_Exception;
-            Exception_Traces.Unhandled_Exception_Terminate;
-         end if;
+         Exception_Traces.Notify_Unhandled_Exception;
+         Exception_Traces.Unhandled_Exception_Terminate;
       end if;
    end Process_Raise_Exception;
 
@@ -865,7 +751,7 @@ package body Ada.Exceptions is
    ----------------------------
 
    procedure Raise_Constraint_Error
-     (File : Big_String_Ptr;
+     (File : System.Address;
       Line : Integer)
    is
    begin
@@ -878,9 +764,9 @@ package body Ada.Exceptions is
    --------------------------------
 
    procedure Raise_Constraint_Error_Msg
-     (File : Big_String_Ptr;
+     (File : System.Address;
       Line : Integer;
-      Msg  : Big_String_Ptr)
+      Msg  : System.Address)
    is
    begin
       Raise_With_Location_And_Msg
@@ -892,10 +778,26 @@ package body Ada.Exceptions is
    -------------------------
 
    procedure Raise_Current_Excep (E : Exception_Id) is
+
       pragma Inspection_Point (E);
-      --  This is so the debugger can reliably inspect the parameter
-   begin
-      Process_Raise_Exception (E => E, From_Signal_Handler => False);
+      --  This is so the debugger can reliably inspect the parameter when
+      --  inserting a breakpoint at the start of this procedure.
+
+      Id : Exception_Id := E;
+      pragma Volatile (Id);
+      pragma Warnings (Off, Id);
+      --  In order to provide support for breakpoints on unhandled exceptions,
+      --  the debugger will also need to be able to inspect the value of E from
+      --  another (inner) frame. So we need to make sure that if E is passed in
+      --  a register, its value is also spilled on stack. For this, we store
+      --  the parameter value in a local variable, and add a pragma Volatile to
+      --  make sure it is spilled. The pragma Warnings (Off) is needed because
+      --  the compiler knows that Id is not referenced and that this use of
+      --  pragma Volatile is peculiar!
+
+   begin
+      Debug_Raise_Exception (E => SSL.Exception_Data_Ptr (E));
+      Process_Raise_Exception (E);
    end Raise_Current_Excep;
 
    ---------------------
@@ -906,12 +808,20 @@ package body Ada.Exceptions is
      (E       : Exception_Id;
       Message : String := "")
    is
+      EF : Exception_Id := E;
+
    begin
-      if E /= null then
-         Exception_Data.Set_Exception_Msg (E, Message);
-         Abort_Defer.all;
-         Raise_Current_Excep (E);
+      --  Raise CE if E = Null_ID (AI-446)
+
+      if E = null then
+         EF := Constraint_Error'Identity;
       end if;
+
+      --  Go ahead and raise appropriate exception
+
+      Exception_Data.Set_Exception_Msg (EF, Message);
+      Abort_Defer.all;
+      Raise_Current_Excep (EF);
    end Raise_Exception;
 
    ----------------------------
@@ -928,18 +838,58 @@ package body Ada.Exceptions is
       Raise_Current_Excep (E);
    end Raise_Exception_Always;
 
+   -------------------------------------
+   -- Raise_From_Controlled_Operation --
+   -------------------------------------
+
+   procedure Raise_From_Controlled_Operation
+     (X : Ada.Exceptions.Exception_Occurrence)
+   is
+      Prefix   : constant String := "adjust/finalize raised ";
+      Orig_Msg : constant String := Exception_Message (X);
+      New_Msg  : constant String := Prefix & Exception_Name (X);
+
+   begin
+      if Orig_Msg'Length >= Prefix'Length
+        and then
+          Orig_Msg (Orig_Msg'First .. Orig_Msg'First + Prefix'Length - 1) =
+                                                                     Prefix
+      then
+         --  Message already has proper prefix, just re-reraise PROGRAM_ERROR
+
+         Raise_Exception_No_Defer
+           (E       => Program_Error'Identity,
+            Message => Orig_Msg);
+
+      elsif Orig_Msg = "" then
+
+         --  No message present: just provide our own
+
+         Raise_Exception_No_Defer
+           (E       => Program_Error'Identity,
+            Message => New_Msg);
+
+      else
+         --  Message present, add informational prefix
+
+         Raise_Exception_No_Defer
+           (E       => Program_Error'Identity,
+            Message => New_Msg & ": " & Orig_Msg);
+      end if;
+   end Raise_From_Controlled_Operation;
+
    -------------------------------
    -- Raise_From_Signal_Handler --
    -------------------------------
 
    procedure Raise_From_Signal_Handler
      (E : Exception_Id;
-      M : Big_String_Ptr)
+      M : System.Address)
    is
    begin
       Exception_Data.Set_Exception_C_Msg (E, M);
       Abort_Defer.all;
-      Process_Raise_Exception (E => E, From_Signal_Handler => True);
+      Process_Raise_Exception (E);
    end Raise_From_Signal_Handler;
 
    -------------------------
@@ -947,7 +897,7 @@ package body Ada.Exceptions is
    -------------------------
 
    procedure Raise_Program_Error
-     (File : Big_String_Ptr;
+     (File : System.Address;
       Line : Integer)
    is
    begin
@@ -960,9 +910,9 @@ package body Ada.Exceptions is
    -----------------------------
 
    procedure Raise_Program_Error_Msg
-     (File : Big_String_Ptr;
+     (File : System.Address;
       Line : Integer;
-      Msg  : Big_String_Ptr)
+      Msg  : System.Address)
    is
    begin
       Raise_With_Location_And_Msg
@@ -974,7 +924,7 @@ package body Ada.Exceptions is
    -------------------------
 
    procedure Raise_Storage_Error
-     (File : Big_String_Ptr;
+     (File : System.Address;
       Line : Integer)
    is
    begin
@@ -987,9 +937,9 @@ package body Ada.Exceptions is
    -----------------------------
 
    procedure Raise_Storage_Error_Msg
-     (File : Big_String_Ptr;
+     (File : System.Address;
       Line : Integer;
-      Msg  : Big_String_Ptr)
+      Msg  : System.Address)
    is
    begin
       Raise_With_Location_And_Msg
@@ -1002,9 +952,9 @@ package body Ada.Exceptions is
 
    procedure Raise_With_Location_And_Msg
      (E : Exception_Id;
-      F : Big_String_Ptr;
+      F : System.Address;
       L : Integer;
-      M : Big_String_Ptr := null)
+      M : System.Address := System.Null_Address)
    is
    begin
       Exception_Data.Set_Exception_C_Msg (E, F, L, M);
@@ -1020,8 +970,6 @@ package body Ada.Exceptions is
       Excep : constant EOA := Get_Current_Excep.all;
 
    begin
-      Exception_Propagation.Setup_Exception (Excep, Excep);
-
       Excep.Exception_Raised := False;
       Excep.Id               := E;
       Excep.Num_Tracebacks   := 0;
@@ -1035,156 +983,176 @@ package body Ada.Exceptions is
    -- Calls to Run-Time Check Routines --
    --------------------------------------
 
-   procedure Rcheck_00 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_00 (File : System.Address; Line : Integer) is
    begin
-      Raise_Constraint_Error_Msg (File, Line, To_Ptr (Rmsg_00'Address));
+      Raise_Constraint_Error_Msg (File, Line, Rmsg_00'Address);
    end Rcheck_00;
 
-   procedure Rcheck_01 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_01 (File : System.Address; Line : Integer) is
    begin
-      Raise_Constraint_Error_Msg (File, Line, To_Ptr (Rmsg_01'Address));
+      Raise_Constraint_Error_Msg (File, Line, Rmsg_01'Address);
    end Rcheck_01;
 
-   procedure Rcheck_02 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_02 (File : System.Address; Line : Integer) is
    begin
-      Raise_Constraint_Error_Msg (File, Line, To_Ptr (Rmsg_02'Address));
+      Raise_Constraint_Error_Msg (File, Line, Rmsg_02'Address);
    end Rcheck_02;
 
-   procedure Rcheck_03 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_03 (File : System.Address; Line : Integer) is
    begin
-      Raise_Constraint_Error_Msg (File, Line, To_Ptr (Rmsg_03'Address));
+      Raise_Constraint_Error_Msg (File, Line, Rmsg_03'Address);
    end Rcheck_03;
 
-   procedure Rcheck_04 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_04 (File : System.Address; Line : Integer) is
    begin
-      Raise_Constraint_Error_Msg (File, Line, To_Ptr (Rmsg_04'Address));
+      Raise_Constraint_Error_Msg (File, Line, Rmsg_04'Address);
    end Rcheck_04;
 
-   procedure Rcheck_05 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_05 (File : System.Address; Line : Integer) is
    begin
-      Raise_Constraint_Error_Msg (File, Line, To_Ptr (Rmsg_05'Address));
+      Raise_Constraint_Error_Msg (File, Line, Rmsg_05'Address);
    end Rcheck_05;
 
-   procedure Rcheck_06 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_06 (File : System.Address; Line : Integer) is
    begin
-      Raise_Constraint_Error_Msg (File, Line, To_Ptr (Rmsg_06'Address));
+      Raise_Constraint_Error_Msg (File, Line, Rmsg_06'Address);
    end Rcheck_06;
 
-   procedure Rcheck_07 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_07 (File : System.Address; Line : Integer) is
    begin
-      Raise_Constraint_Error_Msg (File, Line, To_Ptr (Rmsg_07'Address));
+      Raise_Constraint_Error_Msg (File, Line, Rmsg_07'Address);
    end Rcheck_07;
 
-   procedure Rcheck_08 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_08 (File : System.Address; Line : Integer) is
    begin
-      Raise_Constraint_Error_Msg (File, Line, To_Ptr (Rmsg_08'Address));
+      Raise_Constraint_Error_Msg (File, Line, Rmsg_08'Address);
    end Rcheck_08;
 
-   procedure Rcheck_09 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_09 (File : System.Address; Line : Integer) is
    begin
-      Raise_Constraint_Error_Msg (File, Line, To_Ptr (Rmsg_09'Address));
+      Raise_Constraint_Error_Msg (File, Line, Rmsg_09'Address);
    end Rcheck_09;
 
-   procedure Rcheck_10 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_10 (File : System.Address; Line : Integer) is
    begin
-      Raise_Constraint_Error_Msg (File, Line, To_Ptr (Rmsg_10'Address));
+      Raise_Constraint_Error_Msg (File, Line, Rmsg_10'Address);
    end Rcheck_10;
 
-   procedure Rcheck_11 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_11 (File : System.Address; Line : Integer) is
    begin
-      Raise_Constraint_Error_Msg (File, Line, To_Ptr (Rmsg_11'Address));
+      Raise_Constraint_Error_Msg (File, Line, Rmsg_11'Address);
    end Rcheck_11;
 
-   procedure Rcheck_12 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_12 (File : System.Address; Line : Integer) is
    begin
-      Raise_Program_Error_Msg (File, Line, To_Ptr (Rmsg_12'Address));
+      Raise_Constraint_Error_Msg (File, Line, Rmsg_12'Address);
    end Rcheck_12;
 
-   procedure Rcheck_13 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_13 (File : System.Address; Line : Integer) is
    begin
-      Raise_Program_Error_Msg (File, Line, To_Ptr (Rmsg_13'Address));
+      Raise_Constraint_Error_Msg (File, Line, Rmsg_13'Address);
    end Rcheck_13;
 
-   procedure Rcheck_14 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_14 (File : System.Address; Line : Integer) is
    begin
-      Raise_Program_Error_Msg (File, Line, To_Ptr (Rmsg_14'Address));
+      Raise_Program_Error_Msg (File, Line, Rmsg_14'Address);
    end Rcheck_14;
 
-   procedure Rcheck_15 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_15 (File : System.Address; Line : Integer) is
    begin
-      Raise_Program_Error_Msg (File, Line, To_Ptr (Rmsg_15'Address));
+      Raise_Program_Error_Msg (File, Line, Rmsg_15'Address);
    end Rcheck_15;
 
-   procedure Rcheck_16 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_16 (File : System.Address; Line : Integer) is
    begin
-      Raise_Program_Error_Msg (File, Line, To_Ptr (Rmsg_16'Address));
+      Raise_Program_Error_Msg (File, Line, Rmsg_16'Address);
    end Rcheck_16;
 
-   procedure Rcheck_17 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_17 (File : System.Address; Line : Integer) is
    begin
-      Raise_Program_Error_Msg (File, Line, To_Ptr (Rmsg_17'Address));
+      Raise_Program_Error_Msg (File, Line, Rmsg_17'Address);
    end Rcheck_17;
 
-   procedure Rcheck_18 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_18 (File : System.Address; Line : Integer) is
    begin
-      Raise_Program_Error_Msg (File, Line, To_Ptr (Rmsg_18'Address));
+      Raise_Program_Error_Msg (File, Line, Rmsg_18'Address);
    end Rcheck_18;
 
-   procedure Rcheck_19 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_19 (File : System.Address; Line : Integer) is
    begin
-      Raise_Program_Error_Msg (File, Line, To_Ptr (Rmsg_19'Address));
+      Raise_Program_Error_Msg (File, Line, Rmsg_19'Address);
    end Rcheck_19;
 
-   procedure Rcheck_20 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_20 (File : System.Address; Line : Integer) is
    begin
-      Raise_Program_Error_Msg (File, Line, To_Ptr (Rmsg_20'Address));
+      Raise_Program_Error_Msg (File, Line, Rmsg_20'Address);
    end Rcheck_20;
 
-   procedure Rcheck_21 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_21 (File : System.Address; Line : Integer) is
    begin
-      Raise_Program_Error_Msg (File, Line, To_Ptr (Rmsg_21'Address));
+      Raise_Program_Error_Msg (File, Line, Rmsg_21'Address);
    end Rcheck_21;
 
-   procedure Rcheck_22 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_22 (File : System.Address; Line : Integer) is
    begin
-      Raise_Program_Error_Msg (File, Line, To_Ptr (Rmsg_22'Address));
+      Raise_Program_Error_Msg (File, Line, Rmsg_22'Address);
    end Rcheck_22;
 
-   procedure Rcheck_23 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_23 (File : System.Address; Line : Integer) is
    begin
-      Raise_Program_Error_Msg (File, Line, To_Ptr (Rmsg_23'Address));
+      Raise_Program_Error_Msg (File, Line, Rmsg_23'Address);
    end Rcheck_23;
 
-   procedure Rcheck_24 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_24 (File : System.Address; Line : Integer) is
    begin
-      Raise_Program_Error_Msg (File, Line, To_Ptr (Rmsg_24'Address));
+      Raise_Program_Error_Msg (File, Line, Rmsg_24'Address);
    end Rcheck_24;
 
-   procedure Rcheck_25 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_25 (File : System.Address; Line : Integer) is
    begin
-      Raise_Storage_Error_Msg (File, Line, To_Ptr (Rmsg_25'Address));
+      Raise_Program_Error_Msg (File, Line, Rmsg_25'Address);
    end Rcheck_25;
 
-   procedure Rcheck_26 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_26 (File : System.Address; Line : Integer) is
    begin
-      Raise_Storage_Error_Msg (File, Line, To_Ptr (Rmsg_26'Address));
+      Raise_Program_Error_Msg (File, Line, Rmsg_26'Address);
    end Rcheck_26;
 
-   procedure Rcheck_27 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_27 (File : System.Address; Line : Integer) is
    begin
-      Raise_Storage_Error_Msg (File, Line, To_Ptr (Rmsg_27'Address));
+      Raise_Program_Error_Msg (File, Line, Rmsg_27'Address);
    end Rcheck_27;
 
-   procedure Rcheck_28 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_28 (File : System.Address; Line : Integer) is
    begin
-      Raise_Storage_Error_Msg (File, Line, To_Ptr (Rmsg_28'Address));
+      Raise_Program_Error_Msg (File, Line, Rmsg_28'Address);
    end Rcheck_28;
 
-   procedure Rcheck_29 (File : Big_String_Ptr; Line : Integer) is
+   procedure Rcheck_29 (File : System.Address; Line : Integer) is
    begin
-      Raise_Storage_Error_Msg (File, Line, To_Ptr (Rmsg_29'Address));
+      Raise_Program_Error_Msg (File, Line, Rmsg_29'Address);
    end Rcheck_29;
 
+   procedure Rcheck_30 (File : System.Address; Line : Integer) is
+   begin
+      Raise_Storage_Error_Msg (File, Line, Rmsg_30'Address);
+   end Rcheck_30;
+
+   procedure Rcheck_31 (File : System.Address; Line : Integer) is
+   begin
+      Raise_Storage_Error_Msg (File, Line, Rmsg_31'Address);
+   end Rcheck_31;
+
+   procedure Rcheck_32 (File : System.Address; Line : Integer) is
+   begin
+      Raise_Storage_Error_Msg (File, Line, Rmsg_32'Address);
+   end Rcheck_32;
+
+   procedure Rcheck_33 (File : System.Address; Line : Integer) is
+   begin
+      Raise_Storage_Error_Msg (File, Line, Rmsg_33'Address);
+   end Rcheck_33;
+
    -------------
    -- Reraise --
    -------------
@@ -1194,7 +1162,6 @@ package body Ada.Exceptions is
 
    begin
       Abort_Defer.all;
-      Exception_Propagation.Setup_Exception (Excep, Excep, Reraised => True);
       Raise_Current_Excep (Excep.Id);
    end Reraise;
 
@@ -1206,8 +1173,6 @@ package body Ada.Exceptions is
    begin
       if X.Id /= null then
          Abort_Defer.all;
-         Exception_Propagation.Setup_Exception
-           (X'Unrestricted_Access, Get_Current_Excep.all, Reraised => True);
          Save_Occurrence_No_Private (Get_Current_Excep.all.all, X);
          Raise_Current_Excep (X.Id);
       end if;
@@ -1220,8 +1185,6 @@ package body Ada.Exceptions is
    procedure Reraise_Occurrence_Always (X : Exception_Occurrence) is
    begin
       Abort_Defer.all;
-      Exception_Propagation.Setup_Exception
-        (X'Unrestricted_Access, Get_Current_Excep.all, Reraised => True);
       Save_Occurrence_No_Private (Get_Current_Excep.all.all, X);
       Raise_Current_Excep (X.Id);
    end Reraise_Occurrence_Always;
@@ -1232,8 +1195,6 @@ package body Ada.Exceptions is
 
    procedure Reraise_Occurrence_No_Defer (X : Exception_Occurrence) is
    begin
-      Exception_Propagation.Setup_Exception
-        (X'Unrestricted_Access, Get_Current_Excep.all, Reraised => True);
       Save_Occurrence_No_Private (Get_Current_Excep.all.all, X);
       Raise_Current_Excep (X.Id);
    end Reraise_Occurrence_No_Defer;
@@ -1250,31 +1211,14 @@ package body Ada.Exceptions is
       Save_Occurrence_No_Private (Target, Source);
    end Save_Occurrence;
 
-   function Save_Occurrence
-     (Source : Exception_Occurrence)
-      return   EOA
-   is
-      Target : EOA := new Exception_Occurrence;
-
+   function Save_Occurrence (Source : Exception_Occurrence) return EOA is
+      Target : constant EOA := new Exception_Occurrence;
    begin
       Save_Occurrence (Target.all, Source);
       return Target;
    end Save_Occurrence;
 
    --------------------------------
-   -- Save_Occurrence_And_Private --
-   --------------------------------
-
-   procedure Save_Occurrence_And_Private
-     (Target : out Exception_Occurrence;
-      Source : Exception_Occurrence)
-   is
-   begin
-      Save_Occurrence_No_Private (Target, Source);
-      Target.Private_Data := Source.Private_Data;
-   end Save_Occurrence_And_Private;
-
-   --------------------------------
    -- Save_Occurrence_No_Private --
    --------------------------------
 
@@ -1311,7 +1255,6 @@ package body Ada.Exceptions is
       --  fixed TSD occurrence, which is very different from Get_Current_Excep
       --  here because this subprogram is called from the called task.
 
-      Exception_Propagation.Setup_Exception (Target, Target);
       Save_Occurrence_No_Private (Target.all, Source);
    end Transfer_Occurrence;
 
@@ -1340,8 +1283,7 @@ package body Ada.Exceptions is
    begin
       Exception_Data.Set_Exception_Msg (E, Message);
 
-      --  DO NOT CALL Abort_Defer.all; !!!!
-      --  why not??? would be nice to have more comments here
+      --  Do not call Abort_Defer.all, as specified by the spec
 
       Raise_Current_Excep (E);
    end Raise_Exception_No_Defer;
@@ -1370,28 +1312,4 @@ package body Ada.Exceptions is
       end loop;
    end To_Stderr;
 
-   ---------
-   -- ZZZ --
-   ---------
-
-   --  This dummy procedure gives us the end of the PC range for addresses
-   --  within the exception unit itself. We hope that gigi/gcc keeps all the
-   --  procedures in their original order!
-
-   procedure ZZZ is
-   begin
-      <<Start_Of_ZZZ>>
-      Code_Address_For_ZZZ := Start_Of_ZZZ'Address;
-   end ZZZ;
-
-begin
-   --  Allocate the Non-Tasking Machine_State
-
-   Set_Machine_State_Addr_NT (System.Address (Allocate_Machine_State));
-
-   --  Call the AAA/ZZZ routines to setup the code addresses for the
-   --  bounds of this unit.
-
-   AAA;
-   ZZZ;
 end Ada.Exceptions;