OSDN Git Service

* config/stormy16/stormy16-lib2.c (__ucmpsi2): Fix thinko.
[pf3gnuchains/gcc-fork.git] / gcc / ada / s-vmexta.adb
index b61955f..b19e274 100644 (file)
@@ -6,39 +6,37 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1997-2002, Free Software Foundation, Inc.         --
+--          Copyright (C) 1997-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 is an Alpha/VMS package.
+--  This is an Alpha/VMS package
 
 with System.HTable;
 pragma Elaborate_All (System.HTable);
 
 package body System.VMS_Exception_Table is
 
-   use System.Standard_Library;
+   use type SSL.Exception_Code;
 
    type HTable_Headers is range 1 .. 37;
 
@@ -49,8 +47,8 @@ package body System.VMS_Exception_Table is
    --  Ada exception.
 
    type Exception_Code_Data is record
-      Code       : Natural;
-      Except     : Exception_Data_Ptr;
+      Code       : SSL.Exception_Code;
+      Except     : SSL.Exception_Data_Ptr;
       HTable_Ptr : Exception_Code_Data_Ptr;
    end record;
 
@@ -61,8 +59,8 @@ package body System.VMS_Exception_Table is
    function Get_HT_Link (T : Exception_Code_Data_Ptr)
      return Exception_Code_Data_Ptr;
 
-   function Hash (F : Natural) return HTable_Headers;
-   function Get_Key (T : Exception_Code_Data_Ptr) return Natural;
+   function Hash (F : SSL.Exception_Code) return HTable_Headers;
+   function Get_Key (T : Exception_Code_Data_Ptr) return SSL.Exception_Code;
 
    package Exception_Code_HTable is new System.HTable.Static_HTable (
      Header_Num => HTable_Headers,
@@ -71,16 +69,29 @@ package body System.VMS_Exception_Table is
      Null_Ptr   => null,
      Set_Next   => Set_HT_Link,
      Next       => Get_HT_Link,
-     Key        => Natural,
+     Key        => SSL.Exception_Code,
      Get_Key    => Get_Key,
      Hash       => Hash,
      Equal      => "=");
 
+   ------------------
+   -- Base_Code_In --
+   ------------------
+
+   function Base_Code_In
+     (Code : SSL.Exception_Code) return SSL.Exception_Code
+   is
+   begin
+      return Code and not 2#0111#;
+   end Base_Code_In;
+
    ---------------------
    -- Coded_Exception --
    ---------------------
 
-   function Coded_Exception (X : Natural) return Exception_Data_Ptr is
+   function Coded_Exception
+     (X : SSL.Exception_Code) return SSL.Exception_Data_Ptr
+   is
       Res : Exception_Code_Data_Ptr;
 
    begin
@@ -98,8 +109,9 @@ package body System.VMS_Exception_Table is
    -- Get_HT_Link --
    -----------------
 
-   function  Get_HT_Link (T : Exception_Code_Data_Ptr)
-     return Exception_Code_Data_Ptr is
+   function Get_HT_Link
+     (T : Exception_Code_Data_Ptr) return Exception_Code_Data_Ptr
+   is
    begin
       return T.HTable_Ptr;
    end Get_HT_Link;
@@ -108,7 +120,9 @@ package body System.VMS_Exception_Table is
    -- Get_Key --
    -------------
 
-   function Get_Key (T : Exception_Code_Data_Ptr) return Natural is
+   function Get_Key (T : Exception_Code_Data_Ptr)
+     return SSL.Exception_Code
+   is
    begin
       return T.Code;
    end Get_Key;
@@ -117,39 +131,44 @@ package body System.VMS_Exception_Table is
    -- Hash --
    ----------
 
-   function Hash (F : Natural) return HTable_Headers is
+   function Hash
+     (F : SSL.Exception_Code) return HTable_Headers
+   is
+      Headers_Magnitude : constant SSL.Exception_Code :=
+        SSL.Exception_Code (HTable_Headers'Last - HTable_Headers'First + 1);
+
    begin
-      return HTable_Headers
-        (F mod Natural (HTable_Headers'Last - HTable_Headers'First + 1) + 1);
+      return HTable_Headers (F mod Headers_Magnitude + 1);
    end Hash;
 
    ----------------------------
    -- Register_VMS_Exception --
    ----------------------------
 
-   procedure Register_VMS_Exception (Code : Integer) is
-      Excode : constant Integer := (Code / 8) * 8;
-      --  Mask off lower 3 bits which are the severity
+   procedure Register_VMS_Exception
+     (Code : SSL.Exception_Code;
+      E    : SSL.Exception_Data_Ptr)
+   is
+      --  We bind the exception data with the base code found in the
+      --  input value, that is with the severity bits masked off.
+
+      Excode : constant SSL.Exception_Code := Base_Code_In (Code);
 
    begin
-      --  This allocates an empty exception that gets filled in by
-      --  __gnat_error_handler when the exception is raised. Allocating
-      --  it here prevents having to allocate it each time the exception
-      --  is raised.
+      --  The exception data registered here is mostly filled prior to this
+      --  call and by __gnat_error_handler when the exception is raised. We
+      --  still need to fill a couple of components for exceptions that will
+      --  be used as propagation filters (exception data pointer registered
+      --  as choices in the unwind tables): in some import/export cases, the
+      --  exception pointers for the choice and the propagated occurrence may
+      --  indeed be different for a single import code, and the personality
+      --  routine attempts to match the import codes in this case.
+
+      E.Lang := 'V';
+      E.Import_Code := Excode;
 
       if Exception_Code_HTable.Get (Excode) = null then
-         Exception_Code_HTable.Set
-           (new Exception_Code_Data'
-             (Excode,
-              new Exception_Data'
-               (Not_Handled_By_Others => False,
-                Lang                  => 'V',
-                Name_Length           => 0,
-                Full_Name             => null,
-                HTable_Ptr            => null,
-                Import_Code           => 0,
-                Raise_Hook            => null),
-              null));
+         Exception_Code_HTable.Set (new Exception_Code_Data'(Excode, E, null));
       end if;
    end Register_VMS_Exception;