------------------------------------------------------------------------------
--                                                                          --
--                         GNAT RUN-TIME COMPONENTS                         --
--                                                                          --
--                    S Y S T E M . E X C E P T I O N S                     --
--                                                                          --
--                                 S p e c                                  --
--                                                                          --
--          Copyright (C) 1992-2000 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- --
-- 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.                                                      --
--                                                                          --
-- 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.                                      --
--                                                                          --
-- GNAT was originally developed  by the GNAT team at  New York University. --
-- Extensive contributions were provided by Ada Core Technologies Inc.      --
--                                                                          --
------------------------------------------------------------------------------

--  This package contains definitions used for zero cost exception handling.
--  See unit Ada.Exceptions for further details. Note that the reason that
--  we separate out these definitions is to avoid problems with recursion
--  in rtsfind. They must be in a unit which does not require any exception
--  table generation of any kind.

with Ada.Exceptions;

with System;
with System.Standard_Library;

with Unchecked_Conversion;

package System.Exceptions is

   package SSL renames System.Standard_Library;
   package AEX renames Ada.Exceptions;

   --  The following section defines data structures used for zero cost
   --  exception handling if System.Parameters.Zero_Cost_Exceptions is
   --  set true (i.e. zero cost exceptions are implemented on this target).

   --  The approach is to build tables that describe the PC ranges that
   --  are covered by various exception frames. When an exception occurs,
   --  these tables are searched to determine the address of the applicable
   --  handler for the current exception.

   subtype Handler_Loc is System.Address;
   --  Code location representing entry address of a handler. Values of
   --  this type are created using the N_Handler_Loc node, and then
   --  passed to the Enter_Handler procedure to enter a handler.

   subtype Code_Loc is System.Address;
   --  Code location used in building exception tables and for call
   --  addresses when propagating an exception (also traceback table)
   --  Values of this type are created by using Label'Address or
   --  extracted from machine states using Get_Code_Loc.

   --------------------
   -- Handler_Record --
   --------------------

   --  A Handler record is built for each choice for each exception handler
   --  in a frame.

   function To_Exception_Id is
     new Unchecked_Conversion (SSL.Exception_Data_Ptr, AEX.Exception_Id);

   Others_Dummy_Exception : aliased SSL.Exception_Data;
   Others_Id : constant AEX.Exception_Id :=
                 To_Exception_Id (Others_Dummy_Exception'Access);
   --  Dummy exception used to signal others exception

   All_Others_Dummy_Exception : aliased SSL.Exception_Data;
   All_Others_Id : constant AEX.Exception_Id :=
                     To_Exception_Id (All_Others_Dummy_Exception'Access);
   --  Dummy exception used to signal all others exception (including
   --  exceptions not normally handled by others, e.g. Abort_Signal)

   type Handler_Record is record
      Lo : Code_Loc;
      Hi : Code_Loc;
      --  Range of PC values of code covered by this handler record. The
      --  handler covers all code addresses that are greater than the Lo
      --  value, and less than or equal to the Hi value.

      Id : AEX.Exception_Id;
      --  Id of exception being handled, or one of the above special values

      Handler : Handler_Loc;
      --  Address of label at start of handler
   end record;

   type Handler_Record_Ptr is access all Handler_Record;
   type Handler_Record_List is array (Natural range <>) of Handler_Record_Ptr;

   ---------------------------
   -- Subprogram_Descriptor --
   ---------------------------

   --  A Subprogram_Descriptor is built for each subprogram through which
   --  exceptions may propagate, this includes all Ada subprograms,
   --  and also all foreign language imported subprograms.

   subtype Subprogram_Info_Type is System.Address;
   --  This type is used to represent a value that is used to unwind stack
   --  frames. It references target dependent data that provides sufficient
   --  information (e.g. about the location of the return point, use of a
   --  frame pointer, save-over-call registers etc) to unwind the machine
   --  state to the caller. For some targets, this is simply a pointer to
   --  the entry point of the procedure (and the routine to pop the machine
   --  state disassembles the code at the entry point to obtain the required
   --  information). On other targets, it is a pointer to data created by the
   --  backend or assembler to represent the required information.

   No_Info : constant Subprogram_Info_Type := System.Null_Address;
   --  This is a special value used to indicate that it is not possible
   --  to pop past this frame. This is used at the outer level (e.g. for
   --  package elaboration procedures or the main procedure), and for any
   --  other foreign language procedure for which propagation is known
   --  to be impossible. An exception is considered unhandled if an
   --  attempt is made to pop a frame whose Subprogram_Info_Type value
   --  is set to No_Info.

   type Subprogram_Descriptor (Num_Handlers : Natural) is record
      Code : Code_Loc;
      --  This is a code location used to determine which procedure we are
      --  in. Most usually it is simply the entry address for the procedure.
      --  hA given address is considered to be within the procedure referenced
      --  by a Subprogram_Descriptor record if this is the descriptor for
      --  which the Code value is as large as possible without exceeding
      --  the given value.

      Subprogram_Info : Subprogram_Info_Type;
      --  This is a pointer to a target dependent data item that provides
      --  sufficient information for unwinding the stack frame of this
      --  procedure. A value of No_Info (zero) means that we are the
      --  outer level procedure.

      Handler_Records : Handler_Record_List (1 .. Num_Handlers);
      --  List of pointers to Handler_Records for this procedure. The array
      --  is sorted inside out, i.e. entries for inner frames appear before
      --  entries for outer handlers. This ensures that a serial search
      --  finds the innermost applicable handler
   end record;

   subtype Subprogram_Descriptor_0 is Subprogram_Descriptor (0);
   subtype Subprogram_Descriptor_1 is Subprogram_Descriptor (1);
   subtype Subprogram_Descriptor_2 is Subprogram_Descriptor (2);
   subtype Subprogram_Descriptor_3 is Subprogram_Descriptor (3);
   --  Predeclare commonly used subtypes for buildingt he tables

   type Subprogram_Descriptor_Ptr is access all Subprogram_Descriptor;

   type Subprogram_Descriptor_List
     is array (Natural range <>) of Subprogram_Descriptor_Ptr;

   type Subprogram_Descriptors_Record (Count : Natural) is record
      SDesc : Subprogram_Descriptor_List (1 .. Count);
   end record;

   type Subprogram_Descriptors_Ptr is
     access all Subprogram_Descriptors_Record;

   --------------------------
   -- Unit Exception_Table --
   --------------------------

   --  If a unit contains at least one subprogram, then a library level
   --  declaration of the form:

   --    Tnn : aliased constant Subprogram_Descriptors :=
   --            (Count => n,
   --             SDesc =>
   --              (SD1'Unrestricted_Access,
   --               SD2'Unrestricted_Access,
   --               ...
   --               SDn'Unrestricted_Access));
   --    pragma Export (Ada, Tnn, "__gnat_unit_name__SDP");

   --  is generated where the initializing expression is an array aggregate
   --  whose elements are pointers to the generated subprogram descriptors
   --  for the units.

   --  Note: the ALI file contains the designation UX in each unit entry
   --  if a unit exception table is generated.

   --  The binder generates a list of addresses of pointers to these tables.

end System.Exceptions;
