]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
bindgen.adb: Minor reformatting
authorGeert Bosch <bosch@gcc.gnu.org>
Thu, 20 Dec 2001 06:22:43 +0000 (07:22 +0100)
committerGeert Bosch <bosch@gcc.gnu.org>
Thu, 20 Dec 2001 06:22:43 +0000 (07:22 +0100)
* bindgen.adb: Minor reformatting

* cstand.adb: Minor reformatting

* fmap.adb: Minor reformatting
Change name from Add for Add_To_File_Map (Add is much too generic)
Change Path_Name_Of to Mapped_Path_Name
Change File_Name_Of to Mapped_File_Name
Fix copyright dates in header

* fmap.ads:
Change name from Add for Add_To_File_Map (Add is much too generic)
Change Path_Name_Of to Mapped_Path_Name
Change File_Name_Of to Mapped_File_Name
Fix copyright dates in header

* fname-uf.adb: Minor reformatting.  New names of stuff in Fmap.
Add use clause for Fmap.

* make.adb: Minor reformatting

* osint.adb: Minor reformatting.  Change of names in Fmap.
Add use clause for Fmap.

* prj-env.adb: Minor reformatting

* prj-env.ads: Minor reformatting

* switch.adb: Minor reformatting.  Do proper raise of Bad_Switch if
error found (there were odd exceptions to this general rule in
-gnatec/-gnatem processing)

* raise.c (__gnat_eh_personality): Exception handling personality
routine for Ada.  Still in rough state, inspired from the C++ version
and still containing a bunch of debugging artifacts.
(parse_lsda_header, get_ttype_entry): Local (static) helpers, also
inspired from the C++ library.

* raise.c (eh_personality): Add comments. Part of work for the GCC 3
exception handling integration.

* Makefile.in: Remove use of 5smastop.adb which is obsolete.
(HIE_SOURCES): Add s-secsta.ad{s,b}.
(HIE_OBJS): Add s-fat*.o
(RAVEN_SOURCES): Remove files that are no longer required. Add
interrupt handling files.
(RAVEN_MOD): Removed, no longer needed.

* a-ngelfu.adb: Remove ??? comment for inappropriate Inline_Always
Add 2001 to copyright date

* g-regpat.adb: Change pragma Inline_Always to Inline. There is no
need to force universal inlining for these cases.

* s-taprob.adb: Minor clean ups so that this unit can be used in
Ravenscar HI.

* exp_ch7.adb: Allow use of secondary stack in HI mode.
Disallow it when pragma Restrictions (No_Secondary_Stack) is specified.

* prj-tree.ads (Project_Node_Record): Add comments for components
Pkg_Id and Case_Insensitive.

* g-socket.adb: Minor reformatting. Found while reading code.

* prj-tree.ads: Minor reformatting

From-SVN: r48195

19 files changed:
gcc/ada/ChangeLog
gcc/ada/Makefile.in
gcc/ada/a-ngelfu.adb
gcc/ada/bindgen.adb
gcc/ada/cstand.adb
gcc/ada/exp_ch7.adb
gcc/ada/fmap.adb
gcc/ada/fmap.ads
gcc/ada/fname-uf.adb
gcc/ada/g-regpat.adb
gcc/ada/g-socket.adb
gcc/ada/make.adb
gcc/ada/osint.adb
gcc/ada/prj-env.adb
gcc/ada/prj-env.ads
gcc/ada/prj-tree.ads
gcc/ada/raise.c
gcc/ada/s-taprob.adb
gcc/ada/switch.adb

index 3271ffc841e8e3e73ed1257fc43f9d64bed6b758..6b0289bbb3e44789e49b3ba89597df55e18dadd3 100644 (file)
@@ -1,3 +1,86 @@
+2001-12-19  Robert Dewar <dewar@gnat.com>
+
+       * bindgen.adb: Minor reformatting
+       
+       * cstand.adb: Minor reformatting
+       
+       * fmap.adb: Minor reformatting
+       Change name from Add for Add_To_File_Map (Add is much too generic)
+       Change Path_Name_Of to Mapped_Path_Name
+       Change File_Name_Of to Mapped_File_Name
+       Fix copyright dates in header
+       
+       * fmap.ads:
+       Change name from Add for Add_To_File_Map (Add is much too generic)
+       Change Path_Name_Of to Mapped_Path_Name
+       Change File_Name_Of to Mapped_File_Name
+       Fix copyright dates in header
+       
+       * fname-uf.adb: Minor reformatting.  New names of stuff in Fmap.
+       Add use clause for Fmap.
+       
+       * make.adb: Minor reformatting
+       
+       * osint.adb: Minor reformatting.  Change of names in Fmap.
+       Add use clause for Fmap.
+       
+       * prj-env.adb: Minor reformatting
+       
+       * prj-env.ads: Minor reformatting
+       
+       * switch.adb: Minor reformatting.  Do proper raise of Bad_Switch if 
+       error found (there were odd exceptions to this general rule in 
+       -gnatec/-gnatem processing)
+       
+2001-12-19  Olivier Hainque <hainque@gnat.com>
+
+       * raise.c (__gnat_eh_personality): Exception handling personality 
+       routine for Ada.  Still in rough state, inspired from the C++ version 
+       and still containing a bunch of debugging artifacts.
+       (parse_lsda_header, get_ttype_entry): Local (static) helpers, also 
+       inspired from the C++ library.
+       
+       * raise.c (eh_personality): Add comments. Part of work for the GCC 3 
+       exception handling integration.
+       
+2001-12-19  Arnaud Charlet <charlet@gnat.com>
+
+       * Makefile.in: Remove use of 5smastop.adb which is obsolete.
+       (HIE_SOURCES): Add s-secsta.ad{s,b}.
+       (HIE_OBJS): Add s-fat*.o
+       (RAVEN_SOURCES): Remove files that are no longer required. Add 
+       interrupt handling files.
+       (RAVEN_MOD): Removed, no longer needed.
+       
+2001-12-19  Robert Dewar <dewar@gnat.com>
+
+       * a-ngelfu.adb: Remove ??? comment for inappropriate Inline_Always
+       Add 2001 to copyright date
+       
+       * g-regpat.adb: Change pragma Inline_Always to Inline. There is no 
+       need to force universal inlining for these cases.
+       
+2001-12-19  Arnaud Charlet <charlet@gnat.com>
+
+       * s-taprob.adb: Minor clean ups so that this unit can be used in 
+       Ravenscar HI.
+       
+       * exp_ch7.adb: Allow use of secondary stack in HI mode.
+       Disallow it when pragma Restrictions (No_Secondary_Stack) is specified.
+       
+2001-12-19  Vincent Celier <celier@gnat.com>
+
+       * prj-tree.ads (Project_Node_Record): Add comments for components 
+       Pkg_Id and Case_Insensitive.
+       
+2001-12-19  Pascal Obry <obry@gnat.com>
+
+       * g-socket.adb: Minor reformatting. Found while reading code.
+       
+2001-12-19  Robert Dewar <dewar@gnat.com>
+
+       * prj-tree.ads: Minor reformatting
+
 2001-12-20  Joseph S. Myers  <jsm28@cam.ac.uk>
 
        * config-lang.in (diff_excludes): Remove.
index 0bd940bc09888554bfde2e71730adff163a148fb..84f1b0f305e538d0eabf2f70149aef66e8780b0b 100644 (file)
@@ -1060,7 +1060,6 @@ ifeq ($(strip $(filter-out sparc sun solaris2% sunos5%,$(targ))),)
   a-intnam.ads<4sintnam.ads \
   s-inmaop.adb<7sinmaop.adb \
   s-intman.adb<5sintman.adb \
-  s-mastop.adb<5smastop.adb \
   s-osinte.adb<5sosinte.adb \
   s-osinte.ads<5sosinte.ads \
   s-osprim.adb<5posprim.adb \
@@ -1086,7 +1085,6 @@ ifeq ($(strip $(filter-out sparc sun solaris2% sunos5%,$(targ))),)
     a-intnam.ads<4sintnam.ads \
     s-inmaop.adb<7sinmaop.adb \
     s-intman.adb<5sintman.adb \
-    s-mastop.adb<5smastop.adb \
     s-osinte.adb<7sosinte.adb \
     s-osinte.ads<5tosinte.ads \
     s-osprim.adb<5posprim.adb \
@@ -1105,7 +1103,6 @@ ifeq ($(strip $(filter-out sparc sun solaris2% sunos5%,$(targ))),)
     a-intnam.ads<4sintnam.ads \
     s-inmaop.adb<7sinmaop.adb \
     s-intman.adb<7sintman.adb \
-    s-mastop.adb<5smastop.adb \
     s-osinte.adb<5iosinte.adb \
     s-osinte.ads<54osinte.ads \
     s-osprim.adb<5posprim.adb \
@@ -1909,6 +1906,8 @@ HIE_SOURCES = \
  s-fatlfl.ads \
  s-fatllf.ads \
  s-fatsfl.ads \
+ s-secsta.ads \
+ s-secsta.adb \
  a-tags.ads   \
  a-tags.adb $(EXTRA_HIE_SOURCES)
 
@@ -1923,23 +1922,19 @@ HIE_OBJS =  \
  s-stoele.o \
  s-maccod.o \
  s-unstyp.o \
+ s-fatflt.o \
+ s-fatlfl.o \
+ s-fatllf.o \
+ s-secsta.o \
  a-tags.o $(EXTRA_HIE_OBJS)
 
 # Files which are needed in ravenscar mode
 
 RAVEN_SOURCES = \
  $(HIE_SOURCES) \
- s-arit64.ads \
- s-arit64.adb \
  s-parame.ads \
  s-parame.adb \
  g-except.ads \
- s-stalib.ads \
- s-stalib.adb \
- s-soflin.ads \
- s-soflin.adb \
- s-secsta.ads \
- s-secsta.adb \
  s-osinte.ads \
  s-osinte.adb \
  s-tasinf.ads \
@@ -1948,9 +1943,12 @@ RAVEN_SOURCES = \
  s-taprop.ads \
  s-taprop.adb \
  s-taskin.ads \
+ s-taskin.adb \
  s-interr.ads \
  s-interr.adb \
- s-taskin.adb \
+ a-interr.ads \
+ a-interr.adb \
+ a-intnam.ads \
  a-reatim.ads \
  a-reatim.adb \
  a-retide.ads \
@@ -1963,33 +1961,24 @@ RAVEN_SOURCES = \
  s-tarest.ads \
  s-tarest.adb $(EXTRA_RAVEN_SOURCES)
 
-# Files that need to be preprocessed before inclusion in a ravenscar run time
-
-RAVEN_MOD = \
- s-tposen.adb \
- s-tarest.adb
-
 # Objects to generate for the ravenscar run time
 
 RAVEN_OBJS = \
  $(HIE_OBJS) \
- g-except.o  \
- s-stalib.o  \
- s-arit64.o  \
  s-parame.o  \
- s-soflin.o  \
- s-secsta.o  \
- s-tasinf.o  \
+ g-except.o  \
  s-osinte.o  \
+ s-tasinf.o  \
  s-taspri.o  \
  s-taprop.o  \
  s-taskin.o  \
- s-taprob.o  \
- s-tposen.o  \
  s-interr.o  \
  a-interr.o  \
+ a-intnam.o  \
  a-reatim.o  \
  a-retide.o  \
+ s-taprob.o  \
+ s-tposen.o  \
  s-tasres.o  \
  s-tarest.o  $(EXTRA_RAVEN_OBJS)
 
index 2a7201e874f4ad98b500171d98db5b1bcfc419b4..d22951c447e90d3e12949c91da7c7d63302f12a3 100644 (file)
@@ -6,9 +6,9 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---                            $Revision: 1.44 $
+--                            $Revision$
 --                                                                          --
---          Copyright (C) 1992-2000, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2001, 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- --
@@ -52,11 +52,9 @@ package body Ada.Numerics.Generic_Elementary_Functions is
    Log_Two  : constant := 0.69314_71805_59945_30941_72321_21458_17656_80755;
    Half_Log_Two : constant := Log_Two / 2;
 
-
    subtype T is Float_Type'Base;
    subtype Double is Aux.Double;
 
-
    Two_Pi     : constant T := 2.0 * Pi;
    Half_Pi    : constant T := Pi / 2.0;
    Fourth_Pi  : constant T := Pi / 4.0;
@@ -68,7 +66,6 @@ package body Ada.Numerics.Generic_Elementary_Functions is
    Log_Inverse_Epsilon : constant T := T (T'Model_Mantissa - 1) * Log_Two;
    Sqrt_Epsilon        : constant T := Sqrt_Two ** (1 - T'Model_Mantissa);
 
-
    DEpsilon    : constant Double := Double (Epsilon);
    DIEpsilon   : constant Double := Double (IEpsilon);
 
@@ -558,7 +555,6 @@ package body Ada.Numerics.Generic_Elementary_Functions is
       --  Just reuse the code for Sin. The potential small
       --  loss of speed is negligible with proper (front-end) inlining.
 
-      --  ??? Add pragma Inline_Always in spec when this is supported
       return -Sin (abs X - Cycle * 0.25, Cycle);
    end Cos;
 
@@ -716,7 +712,6 @@ package body Ada.Numerics.Generic_Elementary_Functions is
       Q := ((Q3 * Z + Q2) * Z + Q1) * Z + Q0;
       R := 0.5 + P / (Q - P);
 
-
       R := Float_Type'Base'Scaling (R, Integer (XN) + 1);
 
       --  Deal with case of Exp returning IEEE infinity. If Machine_Overflows
@@ -732,7 +727,6 @@ package body Ada.Numerics.Generic_Elementary_Functions is
 
    end Exp_Strict;
 
-
    ----------------
    -- Local_Atan --
    ----------------
index b1f19af6e13ef3440ffc7901deda7cc9fdf2ff2a..55ec4324ab81549b501db5feca7900f5fc641521 100644 (file)
@@ -343,16 +343,16 @@ package body Bindgen is
 
       Write_Statement_Buffer;
 
-      --  Normal case (no pragma No_Run_Time). The global values are
+      --  Normal case (not No_Run_Time mode). The global values are
       --  assigned using the runtime routine Set_Globals (we have to use
       --  the routine call, rather than define the globals in the binder
       --  file to deal with cross-library calls in some systems.
 
       if No_Run_Time_Specified then
-         --  Case of pragma No_Run_Time present. The only global variable
-         --  that might be needed (by the Ravenscar profile) is
-         --  the environment task's priority. Also no exception tables are
-         --  needed.
+
+         --  Case of No_Run_Time mode. The only global variable that might
+         --  be needed (by the Ravenscar profile) is the priority of the
+         --  environment. Also no exception tables are needed.
 
          if Main_Priority /= No_Main_Priority then
             WBI ("      Main_Priority : Integer;");
@@ -513,8 +513,9 @@ package body Bindgen is
       Write_Statement_Buffer;
 
       if No_Run_Time_Specified then
-         --  Case where No_Run_Time pragma is present.
-         --  Set __gl_main_priority if needed for the Ravenscar profile.
+
+         --  Case of No_Run_Time mode. Set __gl_main_priority if needed
+         --  for the Ravenscar profile.
 
          if Main_Priority /= No_Main_Priority then
             Set_String ("   extern int __gl_main_priority = ");
@@ -524,7 +525,7 @@ package body Bindgen is
          end if;
 
       else
-         --  Code for normal case (no pragma No_Run_Time in use)
+         --  Code for normal case (not in No_Run_Time mode)
 
          Gen_Exception_Table_C;
 
index 1527ce10cf82be3241282857bf2d2267cd01b9fe..75378b579f71a2fd07b506d1226379c6c97e1c6a 100644 (file)
@@ -1001,23 +1001,28 @@ package body CStand is
       Set_Size_Known_At_Compile_Time
                            (Universal_Fixed);
 
-      --  Create type declaration for Duration, using a 64-bit size.
-      --  Delta is 1 nanosecond.
-      --  Except on 32 bits machine in No_Run_Time mode, in which case Duration
-      --  is a 32 bits value whose delta is 10E-4 seconds.
+      --  Create type declaration for Duration, using a 64-bit size. The
+      --  delta value depends on the mode we are running in:
+
+      --     Normal mode or No_Run_Time mode when word size is 64 bits:
+      --       10**(-9) seconds, size is 64 bits
+
+      --     No_Run_Time mode when word size is 32 bits:
+      --       10**(-4) seconds, oize is 32 bits
 
       Build_Duration : declare
          Dlo         : Uint;
          Dhi         : Uint;
          Delta_Val   : Ureal;
          Use_32_Bits : constant Boolean :=
-           No_Run_Time and then System_Word_Size = 32;
+                         No_Run_Time and then System_Word_Size = 32;
 
       begin
          if Use_32_Bits then
             Dlo := Intval (Type_Low_Bound (Standard_Integer_32));
             Dhi := Intval (Type_High_Bound (Standard_Integer_32));
             Delta_Val := UR_From_Components (Uint_1, Uint_4, 10);
+
          else
             Dlo := Intval (Type_Low_Bound (Standard_Integer_64));
             Dhi := Intval (Type_High_Bound (Standard_Integer_64));
index 825a44d336ac565eb49b67d2630624ed1a9b1d4f..0e13169789e76c8315e8c72cce03159365879b2a 100644 (file)
@@ -601,7 +601,7 @@ package body Exp_Ch7 is
 
          if Sec_Stk then
             Set_Uses_Sec_Stack (Current_Scope);
-            Disallow_In_No_Run_Time_Mode (N);
+            Check_Restriction (No_Secondary_Stack, N);
          end if;
 
          Set_Etype (Current_Scope, Standard_Void_Type);
@@ -2449,7 +2449,7 @@ package body Exp_Ch7 is
                   if not Requires_Transient_Scope (Etype (S)) then
                      if not Functions_Return_By_DSP_On_Target then
                         Set_Uses_Sec_Stack (S, True);
-                        Disallow_In_No_Run_Time_Mode (Action);
+                        Check_Restriction (No_Secondary_Stack, Action);
                      end if;
                   end if;
 
@@ -2470,7 +2470,7 @@ package body Exp_Ch7 is
                then
                   if not Functions_Return_By_DSP_On_Target then
                      Set_Uses_Sec_Stack (S, True);
-                     Disallow_In_No_Run_Time_Mode (Action);
+                     Check_Restriction (No_Secondary_Stack, Action);
                   end if;
 
                   Set_Uses_Sec_Stack (Current_Scope, False);
@@ -2703,7 +2703,7 @@ package body Exp_Ch7 is
             null;
          else
             Set_Uses_Sec_Stack (S);
-            Disallow_In_No_Run_Time_Mode (N);
+            Check_Restriction (No_Secondary_Stack, N);
          end if;
       end if;
    end Wrap_Transient_Declaration;
index 89b3fd810f7acbb4df5ead2bb336c8acbc25d964..54409cd9e3586125be3476d74c926eb1077c6231 100644 (file)
@@ -6,9 +6,9 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---                            $Revision$
+--                            $Revision: 1.1 $
 --                                                                          --
---          Copyright (C) 1992-2001, Free Software Foundation, Inc.         --
+--            Copyright (C) 2001, 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- --
 --                                                                          --
 ------------------------------------------------------------------------------
 
-with GNAT.HTable;
-with Namet;          use Namet;
-with Osint;          use Osint;
-with Output;         use Output;
+with Namet;  use Namet;
+with Osint;  use Osint;
+with Output; use Output;
 with Table;
 
 with Unchecked_Conversion;
 
+with GNAT.HTable;
+
 package body Fmap is
 
    subtype Big_String is String (Positive);
@@ -63,6 +64,7 @@ package body Fmap is
    type Header_Num is range 0 .. 1_000;
 
    function Hash (F : Unit_Name_Type) return Header_Num;
+   --  Function used to compute hash of unit name
 
    No_Entry : constant Int := -1;
    --  Signals no entry in following table
@@ -87,14 +89,15 @@ package body Fmap is
    --  Hash table to map file names to path names. Used in conjunction with
    --  table Path_Mapping above.
 
-   ---------
-   -- Add --
-   ---------
+   ---------------------
+   -- Add_To_File_Map --
+   ---------------------
 
-   procedure Add
+   procedure Add_To_File_Map
      (Unit_Name : Unit_Name_Type;
       File_Name : File_Name_Type;
-      Path_Name : File_Name_Type) is
+      Path_Name : File_Name_Type)
+   is
    begin
       File_Mapping.Increment_Last;
       Unit_Hash_Table.Set (Unit_Name, File_Mapping.Last);
@@ -102,23 +105,7 @@ package body Fmap is
       Path_Mapping.Increment_Last;
       File_Hash_Table.Set (File_Name, Path_Mapping.Last);
       Path_Mapping.Table (Path_Mapping.Last) := Path_Name;
-   end Add;
-
-   ------------------
-   -- File_Name_Of --
-   ------------------
-
-   function File_Name_Of (Unit : Unit_Name_Type) return File_Name_Type is
-      The_Index : constant Int := Unit_Hash_Table.Get (Unit);
-   begin
-      if The_Index = No_Entry then
-         return No_File;
-
-      else
-         return File_Mapping.Table (The_Index);
-      end if;
-
-   end File_Name_Of;
+   end Add_To_File_Map;
 
    ----------
    -- Hash --
@@ -174,10 +161,12 @@ package body Fmap is
 
       procedure Get_Line is
          use ASCII;
+
       begin
          Deb := Fin + 1;
 
          --  If not at the end of file, skip the end of line
+
          while Deb < SP'Last
            and then (SP (Deb) = CR
                      or else SP (Deb) = LF
@@ -213,7 +202,7 @@ package body Fmap is
          Write_Line (""" is truncated");
       end Report_Truncated;
 
-   --  start of procedure Initialize
+   --  Start of procedure Initialize
 
    begin
       Name_Len := File_Name'Length;
@@ -230,7 +219,6 @@ package body Fmap is
          SP := BS (1 .. Natural (Hi))'Unrestricted_Access;
 
          loop
-
             --  Get the unit name
 
             Get_Line;
@@ -303,30 +291,41 @@ package body Fmap is
 
             --  Add the mappings for this unit name
 
-            Add (Uname, Fname, Pname);
-
+            Add_To_File_Map (Uname, Fname, Pname);
          end loop;
-
       end if;
-
    end Initialize;
 
-   ------------------
-   -- Path_Name_Of --
-   ------------------
+   ----------------------
+   -- Mapped_File_Name --
+   ----------------------
+
+   function Mapped_File_Name (Unit : Unit_Name_Type) return File_Name_Type is
+      The_Index : constant Int := Unit_Hash_Table.Get (Unit);
+
+   begin
+      if The_Index = No_Entry then
+         return No_File;
+      else
+         return File_Mapping.Table (The_Index);
+      end if;
+   end Mapped_File_Name;
+
+   ----------------------
+   -- Mapped_Path_Name --
+   ----------------------
 
-   function Path_Name_Of (File : File_Name_Type) return File_Name_Type is
+   function Mapped_Path_Name (File : File_Name_Type) return File_Name_Type is
       Index : Int := No_Entry;
+
    begin
       Index := File_Hash_Table.Get (File);
 
       if Index = No_Entry then
          return No_File;
-
       else
          return Path_Mapping.Table (Index);
       end if;
-
-   end Path_Name_Of;
+   end Mapped_Path_Name;
 
 end Fmap;
index ac9c0e5103bdb4beedefb481c09cf2e25c2726ef..57ea01651650950f4a5e763308c7d550f6cac806 100644 (file)
@@ -6,9 +6,9 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---                            $Revision$
+--                            $Revision: 1.1 $
 --                                                                          --
---          Copyright (C) 1992-2001, Free Software Foundation, Inc.         --
+--            Copyright (C) 2001, 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- --
@@ -38,15 +38,15 @@ package Fmap is
    --  If the mapping file is incorrect (non existent file, truncated file,
    --  duplicate entries), output a warning and do not initialize the mappings.
 
-   function Path_Name_Of (File : File_Name_Type) return File_Name_Type;
+   function Mapped_Path_Name (File : File_Name_Type) return File_Name_Type;
    --  Return the path name mapped to the file name File.
    --  Return No_File if File is not mapped.
 
-   function File_Name_Of (Unit : Unit_Name_Type) return File_Name_Type;
+   function Mapped_File_Name (Unit : Unit_Name_Type) return File_Name_Type;
    --  Return the file name mapped to the unit name Unit.
    --  Return No_File if Unit is not mapped.
 
-   procedure Add
+   procedure Add_To_File_Map
      (Unit_Name : Unit_Name_Type;
       File_Name : File_Name_Type;
       Path_Name : File_Name_Type);
index 3572d1a6f7a13df2cccdc6db37fa9fdcebe5cded..f2b549c3ac6aa1dc06f00723ba05b8680b53f423 100644 (file)
@@ -28,7 +28,7 @@
 
 with Alloc;
 with Debug;    use Debug;
-with Fmap;
+with Fmap;     use Fmap;
 with Krunch;
 with Namet;    use Namet;
 with Opt;      use Opt;
@@ -140,6 +140,7 @@ package body Fname.UF is
 
       Pname : File_Name_Type := No_File;
       Fname : File_Name_Type := No_File;
+      --  Path name and File name for mapping
 
    begin
       --  Null or error name means that some previous error occurred
@@ -149,12 +150,12 @@ package body Fname.UF is
          raise Unrecoverable_Error;
       end if;
 
-      --  Look into the mapping from unit names to file names
+      --  Look in the map from unit names to file names
 
-      Fname := Fmap.File_Name_Of (Uname);
+      Fname := Mapped_File_Name (Uname);
 
       --  If the unit name is already mapped, return the corresponding
-      --  file name.
+      --  file name from the map.
 
       if Fname /= No_File then
          return Fname;
@@ -394,7 +395,7 @@ package body Fname.UF is
                         --  Add to mapping, so that we don't do another
                         --  path search in Find_File for this file name
 
-                        Fmap.Add (Get_File_Name.Uname, Fnam, Pname);
+                        Add_To_File_Map (Get_File_Name.Uname, Fnam, Pname);
                         return Fnam;
 
                      --  This entry does not match after all, because this is
index ab1b69c79d0391b621f817227335409fe300d512..da4748c30eae76aeb70e30d7704c37e0fc6471e4 100644 (file)
@@ -245,9 +245,9 @@ package body GNAT.Regpat is
    procedure Reset_Class (Bitmap : in out Character_Class);
    --  Clear all the entries in the class Bitmap.
 
-   pragma Inline_Always (Set_In_Class);
-   pragma Inline_Always (Get_From_Class);
-   pragma Inline_Always (Reset_Class);
+   pragma Inline (Set_In_Class);
+   pragma Inline (Get_From_Class);
+   pragma Inline (Reset_Class);
 
    -----------------------
    -- Local Subprograms --
@@ -512,9 +512,9 @@ package body GNAT.Regpat is
       --  Parse a posic character class, like [:alpha:] or [:^alpha:].
       --  The called is suppoed to absorbe the opening [.
 
-      pragma Inline_Always (Is_Mult);
-      pragma Inline_Always (Emit_Natural);
-      pragma Inline_Always (Parse_Character_Class); --  since used only once
+      pragma Inline (Is_Mult);
+      pragma Inline (Emit_Natural);
+      pragma Inline (Parse_Character_Class); --  since used only once
 
       ---------------
       -- Case_Emit --
@@ -2401,12 +2401,13 @@ package body GNAT.Regpat is
          return   Boolean;
       --  Return True it the simple operator (possibly non-greedy) matches
 
-      pragma Inline_Always (Index);
-      pragma Inline_Always (Repeat);
+      pragma Inline (Index);
+      pragma Inline (Repeat);
 
       --  These are two complex functions, but used only once.
-      pragma Inline_Always (Match_Whilem);
-      pragma Inline_Always (Match_Simple_Operator);
+
+      pragma Inline (Match_Whilem);
+      pragma Inline (Match_Simple_Operator);
 
       -----------
       -- Index --
index b58a0dc20c0b598cd11fd7072aee74b02dcead4c..3b794b729302f113bbc921ad5d4e1b7f4767f582 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---                            $Revision: 1.21 $
+--                            $Revision$
 --                                                                          --
 --              Copyright (C) 2001 Ada Core Technologies, Inc.              --
 --                                                                          --
@@ -166,12 +166,11 @@ package body GNAT.Sockets is
 
    --  Types needed for Datagram_Socket_Stream_Type
 
-   type Datagram_Socket_Stream_Type is new Root_Stream_Type with
-      record
-         Socket : Socket_Type;
-         To     : Sock_Addr_Type;
-         From   : Sock_Addr_Type;
-      end record;
+   type Datagram_Socket_Stream_Type is new Root_Stream_Type with record
+      Socket : Socket_Type;
+      To     : Sock_Addr_Type;
+      From   : Sock_Addr_Type;
+   end record;
 
    type Datagram_Socket_Stream_Access is
      access all Datagram_Socket_Stream_Type;
@@ -187,10 +186,9 @@ package body GNAT.Sockets is
 
    --  Types needed for Stream_Socket_Stream_Type
 
-   type Stream_Socket_Stream_Type is new Root_Stream_Type with
-      record
-         Socket : Socket_Type;
-      end record;
+   type Stream_Socket_Stream_Type is new Root_Stream_Type with record
+      Socket : Socket_Type;
+   end record;
 
    type Stream_Socket_Stream_Access is
      access all Stream_Socket_Stream_Type;
index 7e0fd58cfb5058d55ba4d4b1e30e440cf63a74d0..6b61456aa3334bb2aae8b6f1074271d2736e3847 100644 (file)
@@ -3501,7 +3501,6 @@ package body Make is
          begin
             Delete_File (Name => Mapping_File_Name, Success => Success);
          end;
-
       end if;
 
       Exit_Program (E_Success);
index 1856f16d6c9d1385d3932ea58cd81fb1a266379e..27857d02f06c5ae08ca554aa6b6f03607685e6f0 100644 (file)
@@ -26,7 +26,7 @@
 --                                                                          --
 ------------------------------------------------------------------------------
 
-with Fmap;
+with Fmap;     use Fmap;
 with Hostparm;
 with Namet;    use Namet;
 with Opt;      use Opt;
@@ -996,16 +996,16 @@ package body Osint is
          --  directory where the user said it was.
 
          elsif Look_In_Primary_Directory_For_Current_Main
-           and then Current_Main = N then
+           and then Current_Main = N
+         then
             return Locate_File (N, T, Primary_Directory, File_Name);
 
          --  Otherwise do standard search for source file
 
          else
-
             --  Check the mapping of this file name
 
-            File := Fmap.Path_Name_Of (N);
+            File := Mapped_Path_Name (N);
 
             --  If the file name is mapped to a path name, return the
             --  corresponding path name
index e52165d167a09980a468c0ba71739767bbbc0a9b..fd5109bb05ccad5ab8b9de0a708204e80cd48ab5 100644 (file)
@@ -804,6 +804,10 @@ package body Prj.Env is
       --  Put the mapping of the spec or body contained in Data in the file
       --  (3 lines).
 
+      ---------
+      -- Put --
+      ---------
+
       procedure Put (S : String) is
          Last : Natural;
 
@@ -813,9 +817,12 @@ package body Prj.Env is
          if Last /= S'Length then
             Osint.Fail ("Disk full");
          end if;
-
       end Put;
 
+      --------------
+      -- Put_Data --
+      --------------
+
       procedure Put_Data (Spec : Boolean) is
       begin
          Put (Get_Name_String (The_Unit_Data.Name));
@@ -833,6 +840,8 @@ package body Prj.Env is
          Put (S => (1 => ASCII.LF));
       end Put_Data;
 
+   --  Start of processing for Create_Mapping_File
+
    begin
       GNAT.OS_Lib.Create_Temp_File (File, Name => Name);
 
@@ -938,7 +947,7 @@ package body Prj.Env is
       for Current in reverse Units.First .. Units.Last loop
          Unit := Units.Table (Current);
 
-         --  If it is a unit of the same project
+         --  Case of unit of the same project
 
          if Unit.File_Names (Body_Part).Project = Project then
             declare
@@ -946,7 +955,7 @@ package body Prj.Env is
                                 Unit.File_Names (Body_Part).Name;
 
             begin
-               --  If there is a body
+               --  Case of a body present
 
                if Current_Name /= No_Name then
                   if Current_Verbosity = High then
@@ -987,7 +996,7 @@ package body Prj.Env is
             end;
          end if;
 
-         --  If it is a unit of the same project
+         --  Case of a unit of the same project
 
          if Units.Table (Current).File_Names (Specification).Project =
                                                                  Project
@@ -997,7 +1006,7 @@ package body Prj.Env is
                                 Unit.File_Names (Specification).Name;
 
             begin
-               --  If there is a spec
+               --  Case of spec present
 
                if Current_Name /= No_Name then
                   if Current_Verbosity = High then
@@ -1007,8 +1016,7 @@ package body Prj.Env is
                      Write_Eol;
                   end if;
 
-                  --  If it has the same name as the original name,
-                  --  return the original name
+                  --  If name same as the original name, return original name
 
                   if Unit.Name = The_Original_Name
                     or else Current_Name = The_Original_Name
@@ -1020,7 +1028,7 @@ package body Prj.Env is
                      return Get_Name_String (Current_Name);
 
                   --  If it has the same name as the extended spec name,
-                  --  return the extended spec name
+                  --  return the extended spec name.
 
                   elsif Current_Name = The_Spec_Name then
                      if Current_Verbosity = High then
index f418dc34cec3a846c1873c23611bc180701add5b..36687b46b1ea645b96eba2f3c265e9cf8ce3aa4d 100644 (file)
@@ -40,9 +40,8 @@ package Prj.Env is
    --  Output the list of sources, after Project files have been scanned
 
    procedure Create_Mapping_File (Name : in out Temp_File_Name);
-   --  Create a temporary mapping file.
-   --  For each unit, put the mapping of its spec and or body to its
-   --  file name and path name in this file.
+   --  Create a temporary mapping file. For each unit, put the mapping of
+   --  its spec and or body to its file name and path name in this file.
 
    procedure Create_Config_Pragmas_File
      (For_Project  : Project_Id;
index c5526b8527e05177aff04b11d8e6733c4d1587b2..6a7ae30304d4d0b45d9939950f78e3bcbc520a43 100644 (file)
@@ -38,27 +38,30 @@ with Table;
 package Prj.Tree is
 
    Project_Nodes_Initial   : constant := 1_000;
-   --  Initial number of nodes in table Tree_Private_Part.Project_Nodes
    Project_Nodes_Increment : constant := 100;
+   --  Allocation parameters for initializing and extending number
+   --  of nodes in table Tree_Private_Part.Project_Nodes
 
    Project_Node_Low_Bound  : constant := 0;
-   Project_Node_High_Bound : constant := 099_999_999; -- In practice, infinite
+   Project_Node_High_Bound : constant := 099_999_999;
+   --  Range of values for project node id's (in practice infinite)
 
    type Project_Node_Id is range
      Project_Node_Low_Bound .. Project_Node_High_Bound;
    --  The index of table Tree_Private_Part.Project_Nodes
 
-   Empty_Node    : constant Project_Node_Id := Project_Node_Low_Bound;
+   Empty_Node : constant Project_Node_Id := Project_Node_Low_Bound;
    --  Designates no node in table Project_Nodes
+
    First_Node_Id : constant Project_Node_Id := Project_Node_Low_Bound;
 
-   subtype Variable_Node_Id       is Project_Node_Id;
-   --  Used to designate a node whose expected kind is
+   subtype Variable_Node_Id is Project_Node_Id;
+   --  Used to designate a node whose expected kind is one of
    --  N_Typed_Variable_Declaration, N_Variable_Declaration or
    --  N_Variable_Reference.
+
    subtype Package_Declaration_Id is Project_Node_Id;
-   --  Used to designate a node whose expected kind is
-   --  N_Project_Declaration.
+   --  Used to designate a node whose expected kind is N_Proect_Declaration
 
    type Project_Node_Kind is
      (N_Project,
@@ -90,7 +93,7 @@ package Prj.Tree is
    function Default_Project_Node
      (Of_Kind       : Project_Node_Kind;
       And_Expr_Kind : Variable_Kind := Undefined)
-     return Project_Node_Id;
+      return          Project_Node_Id;
    --  Returns a Project_Node_Record with the specified Kind and
    --  Expr_Kind; all the other components have default nil values.
 
@@ -121,7 +124,7 @@ package Prj.Tree is
 
    function First_Variable_Of
      (Node  : Project_Node_Id)
-      return Variable_Node_Id;
+      return  Variable_Node_Id;
    --  Only valid for N_Project or N_Package_Declaration nodes
 
    function First_Package_Of
@@ -499,44 +502,52 @@ package Prj.Tree is
 
       type Project_Node_Record is record
 
-         Kind             : Project_Node_Kind;
+         Kind : Project_Node_Kind;
 
-         Location         : Source_Ptr    := No_Location;
+         Location : Source_Ptr := No_Location;
 
-         Directory        : Name_Id       := No_Name;
+         Directory : Name_Id       := No_Name;
          --  Only for N_Project
 
-         Expr_Kind        : Variable_Kind := Undefined;
+         Expr_Kind : Variable_Kind := Undefined;
          --  See below for what Project_Node_Kind it is used
 
-         Variables        : Variable_Node_Id := Empty_Node;
+         Variables : Variable_Node_Id := Empty_Node;
          --  First variable in a project or a package
 
-         Packages         : Package_Declaration_Id := Empty_Node;
+         Packages : Package_Declaration_Id := Empty_Node;
          --  First package declaration in a project
 
-         Pkg_Id           : Package_Node_Id := Empty_Package;
-         --  Only use in Package_Declaration
-
-         Name             : Name_Id         := No_Name;
+         Pkg_Id : Package_Node_Id := Empty_Package;
+         --  Only used for N_Package_Declaration
+         --  The component Pkg_Id is an entry into the table Package_Attributes
+         --  (in Prj.Attr). It is used to indicate all the attributes of the
+         --  package with their characteristics.
+         --
+         --  The tables Prj.Attr.Attributes and Prj.Attr.Package_Attributes
+         --  are built once and for all through a call (from Prj.Initialize)
+         --  to procedure Prj.Attr.Initialize. It is never modified after that.
+
+         Name : Name_Id := No_Name;
          --  See below for what Project_Node_Kind it is used
 
-         Path_Name        : Name_Id         := No_Name;
+         Path_Name : Name_Id := No_Name;
          --  See below for what Project_Node_Kind it is used
 
-         Value            : String_Id       := No_String;
+         Value : String_Id := No_String;
          --  See below for what Project_Node_Kind it is used
 
-         Field1           : Project_Node_Id := Empty_Node;
+         Field1 : Project_Node_Id := Empty_Node;
          --  See below the meaning for each Project_Node_Kind
 
-         Field2           : Project_Node_Id := Empty_Node;
+         Field2 : Project_Node_Id := Empty_Node;
          --  See below the meaning for each Project_Node_Kind
 
-         Field3           : Project_Node_Id := Empty_Node;
+         Field3 : Project_Node_Id := Empty_Node;
          --  See below the meaning for each Project_Node_Kind
 
-         Case_Insensitive : Boolean         := False;
+         Case_Insensitive : Boolean := False;
+         --  Significant only for N_Attribute_Declaration
          --  Indicates, for an associative array attribute, that the
          --  index is case insensitive.
 
@@ -726,10 +737,12 @@ package Prj.Tree is
       --  from project files.
 
       type Project_Name_And_Node is record
-         Name     : Name_Id;
+         Name : Name_Id;
          --  Name of the project
-         Node     : Project_Node_Id;
+
+         Node : Project_Node_Id;
          --  Node of the project in table Project_Nodes
+
          Modified : Boolean;
          --  True when the project is being modified by another project
       end record;
index 43d630795a8fe5beb7956df8afb2313bcff2cafd..2d48db806936667095f216b3a63229d02a5b8833 100644 (file)
@@ -6,7 +6,7 @@
  *                                                                          *
  *                          C Implementation File                           *
  *                                                                          *
- *                            $Revision: 1.1 $
+ *                            $Revision$
  *                                                                          *
  *             Copyright (C) 1992-2001, Free Software Foundation, Inc.      *
  *                                                                          *
@@ -84,3 +84,527 @@ __gnat_unhandled_terminate ()
     __gnat_os_exit (1);
 #endif
 }
+
+/* Below is the eh personality routine for Ada to be called when the GCC
+   mechanism is used.
+
+   ??? It is currently inspired from the one for C++, needs cleanups and
+   additional comments. It also contains a big bunch of debugging code that
+   we shall get rid of at some point.  */
+
+#ifdef IN_RTS   /* For eh personality routine */
+
+/* ??? Does it make any sense to leave this for the compiler ?   */
+
+#include "dwarf2.h"
+#include "unwind.h"
+#include "unwind-dw2-fde.h"
+#include "unwind-pe.h"
+
+/* First define a set of useful structures and helper routines.  */
+
+typedef struct _Unwind_Context _Unwind_Context;
+
+struct lsda_header_info
+{
+  _Unwind_Ptr Start;
+  _Unwind_Ptr LPStart;
+  _Unwind_Ptr ttype_base;
+  const unsigned char *TType;
+  const unsigned char *action_table;
+  unsigned char ttype_encoding;
+  unsigned char call_site_encoding;
+};
+
+typedef struct lsda_header_info lsda_header_info;
+
+typedef enum {false = 0, true = 1} bool;
+
+static const unsigned char *
+parse_lsda_header (_Unwind_Context *context, const unsigned char *p,
+                  lsda_header_info *info)
+{
+  _Unwind_Ptr tmp;
+  unsigned char lpstart_encoding;
+
+  info->Start = (context ? _Unwind_GetRegionStart (context) : 0);
+
+  /* Find @LPStart, the base to which landing pad offsets are relative.  */
+  lpstart_encoding = *p++;
+  if (lpstart_encoding != DW_EH_PE_omit)
+    p = read_encoded_value (context, lpstart_encoding, p, &info->LPStart);
+  else
+    info->LPStart = info->Start;
+  
+  /* Find @TType, the base of the handler and exception spec type data.  */
+  info->ttype_encoding = *p++;
+  if (info->ttype_encoding != DW_EH_PE_omit)
+    {
+      p = read_uleb128 (p, &tmp);
+      info->TType = p + tmp;
+    }
+  else
+    info->TType = 0;
+
+  /* The encoding and length of the call-site table; the action table
+     immediately follows.  */
+  info->call_site_encoding = *p++;
+  p = read_uleb128 (p, &tmp);
+  info->action_table = p + tmp;
+
+  return p;
+}
+
+
+static const _Unwind_Ptr
+get_ttype_entry (_Unwind_Context *context, lsda_header_info *info, long i)
+{
+  _Unwind_Ptr ptr;
+
+  i *= size_of_encoded_value (info->ttype_encoding);
+  read_encoded_value (context, info->ttype_encoding, info->TType - i, &ptr);
+
+  return ptr;
+}
+
+/* This is the structure of exception objects as built by the GNAT runtime
+   library (a-except.adb). The layouts should exactly match, and the "common"
+   header is mandated by the exception handling ABI.  */
+
+struct _GNAT_Exception {
+  struct _Unwind_Exception common;
+
+  _Unwind_Ptr id;
+
+  char handled_by_others;
+  char has_cleanup;
+  char select_cleanups;
+};
+
+
+/* The two constants below are specific ttype identifiers for special
+   exception ids. Their value is currently hardcoded at the gigi level
+   (see N_Exception_Handler).  */
+
+#define GNAT_OTHERS_ID      ((_Unwind_Ptr) 0x0)
+#define GNAT_ALL_OTHERS_ID  ((_Unwind_Ptr) 0x1)
+
+
+/* The DB stuff below is there for debugging purposes only.  */
+
+#define DB_PHASES     0x1
+#define DB_SEARCH     0x2
+#define DB_ECLASS     0x4
+#define DB_MATCH      0x8
+#define DB_SAW        0x10
+#define DB_FOUND      0x20
+#define DB_INSTALL    0x40
+#define DB_CALLS      0x80
+
+#define AEHP_DB_SPECS \
+(DB_PHASES | DB_SEARCH | DB_SAW | DB_FOUND | DB_INSTALL | DB_CALLS | DB_MATCH)
+
+#undef AEHP_DB_SPECS
+
+#ifdef AEHP_DB_SPECS
+static int db_specs = AEHP_DB_SPECS;
+#else
+static int db_specs = 0;
+#endif
+
+#define START_DB(what) do { if (what & db_specs) {
+#define END_DB(what)        } \
+                           } while (0);
+
+/* The "action" stuff below if also there for debugging purposes only.  */
+
+typedef struct {
+  _Unwind_Action action;
+  char * description;
+}  action_description_t;
+
+action_description_t action_descriptions [] = {
+  { _UA_SEARCH_PHASE,  "SEARCH_PHASE" },
+  { _UA_CLEANUP_PHASE, "CLEANUP_PHASE" },
+  { _UA_HANDLER_FRAME, "HANDLER_FRAME" },
+  { _UA_FORCE_UNWIND,  "FORCE_UNWIND" },
+  { -1, (char *)0 }
+};
+
+static void
+decode_actions (actions)
+     _Unwind_Action actions;
+{
+  int i;
+
+  action_description_t * a = action_descriptions;
+
+  printf ("\n");
+  while (a->description != (char *)0)
+    {
+      if (actions & a->action)
+       {
+         printf ("%s ", a->description);
+       }
+
+      a ++;
+    }
+
+  printf (" : ");
+}
+
+/* The following is defined from a-except.adb. It's purpose is to enable
+   automatic backtraces upon exception raise, as provided through the 
+   GNAT.Traceback facilities.  */
+extern void
+__gnat_notify_handled_exception (void * handler, bool others, bool db_notify);
+
+/* Below is the eh personality routine per se.  */
+
+_Unwind_Reason_Code
+__gnat_eh_personality (int version,
+                      _Unwind_Action actions,
+                      _Unwind_Exception_Class exception_class,
+                      struct _Unwind_Exception *ue_header,
+                      struct _Unwind_Context *context)
+{
+  enum found_handler_type
+  {
+    found_nothing,
+    found_terminate,
+    found_cleanup,
+    found_handler
+  } found_type;
+
+  lsda_header_info info;
+  const unsigned char *language_specific_data;
+  const unsigned char *action_record;
+  const unsigned char *p;
+  _Unwind_Ptr landing_pad, ip;
+  int handler_switch_value;
+
+  bool hit_others_handler;
+
+  struct _GNAT_Exception * gnat_exception;
+
+  if (version != 1)
+    return _URC_FATAL_PHASE1_ERROR;
+
+  START_DB (DB_PHASES);
+  decode_actions (actions);
+  END_DB (DB_PHASES);
+  if (strcmp ( ((char *)&exception_class), "GNU") != 0
+      || strcmp ( ((char *)&exception_class)+4, "Ada") != 0)
+    {
+      START_DB (DB_SEARCH);
+      printf ("              Exception Class doesn't match for ip = %p\n", ip);
+      END_DB (DB_SEARCH);
+      START_DB (DB_FOUND);
+      printf ("              => FOUND nothing\n");
+      END_DB (DB_FOUND);
+      return _URC_CONTINUE_UNWIND;
+    }
+
+  gnat_exception = (struct _GNAT_Exception *) ue_header;
+
+  START_DB (DB_PHASES);
+  if (gnat_exception->select_cleanups)
+    {
+      printf ("(select_cleanups) :\n");
+    }
+  else
+    {
+      printf (" :\n");
+    }
+  END_DB (DB_PHASES);
+
+  language_specific_data = (const unsigned char *)
+    _Unwind_GetLanguageSpecificData (context);
+
+  /* If no LSDA, then there are no handlers or cleanups.  */
+  if (! language_specific_data)
+    {
+      ip = _Unwind_GetIP (context) - 1;
+
+      START_DB (DB_SEARCH);
+      printf ("              No Language Specific Data for ip = %p\n", ip);
+      END_DB (DB_SEARCH);
+      START_DB (DB_FOUND);
+      printf ("              => FOUND nothing\n");
+      END_DB (DB_FOUND);
+      return _URC_CONTINUE_UNWIND;
+    }
+  
+  /* Parse the LSDA header.  */
+  p = parse_lsda_header (context, language_specific_data, &info);
+  info.ttype_base = base_of_encoded_value (info.ttype_encoding, context);
+  ip = _Unwind_GetIP (context) - 1;
+  landing_pad = 0;
+  action_record = 0;
+  handler_switch_value = 0;
+
+  /* Search the call-site table for the action associated with this IP.  */
+  while (p < info.action_table)
+    {
+      _Unwind_Ptr cs_start, cs_len, cs_lp, cs_action;
+
+      /* Note that all call-site encodings are "absolute" displacements.  */
+      p = read_encoded_value (0, info.call_site_encoding, p, &cs_start);
+      p = read_encoded_value (0, info.call_site_encoding, p, &cs_len);
+      p = read_encoded_value (0, info.call_site_encoding, p, &cs_lp);
+      p = read_uleb128 (p, &cs_action);
+
+      /* The table is sorted, so if we've passed the ip, stop.  */
+      if (ip < info.Start + cs_start)
+       p = info.action_table;
+      else if (ip < info.Start + cs_start + cs_len)
+       {
+         if (cs_lp)
+           landing_pad = info.LPStart + cs_lp;
+         if (cs_action)
+           action_record = info.action_table + cs_action - 1;
+         goto found_something;
+       }
+    }
+
+  START_DB (DB_SEARCH);
+  printf ("              No Action entry for ip = %p\n", ip);
+  END_DB (DB_SEARCH);
+
+  /* If ip is not present in the table, call terminate.  This is for
+     a destructor inside a cleanup, or a library routine the compiler
+     was not expecting to throw.
+     
+     found_type = 
+     (actions & _UA_FORCE_UNWIND ? found_nothing : found_terminate);
+  
+     ??? Does this have a mapping in Ada semantics ?  */
+
+  found_type = found_nothing;
+
+  goto do_something;
+
+ found_something:
+
+  found_type = found_nothing;
+  
+  if (landing_pad == 0)
+    {
+      /* If ip is present, and has a null landing pad, there are
+        no cleanups or handlers to be run.  */
+      START_DB (DB_SEARCH);
+      printf ("              No Landing Pad for ip = %p\n", ip);
+      END_DB (DB_SEARCH);
+    }
+  else if (action_record == 0)
+    {
+      START_DB (DB_SEARCH);
+      printf ("              Null Action Record for ip = %p <===\n", ip);
+      END_DB (DB_SEARCH);
+    }
+  else
+    {
+      signed long ar_filter, ar_disp;
+
+      signed long cleanup_filter = 0;
+      signed long handler_filter = 0;
+
+      START_DB (DB_SEARCH);
+      printf ("              Landing Pad + Action Record for ip = %p\n", ip);
+      END_DB (DB_SEARCH);
+
+      START_DB (DB_MATCH);
+      printf ("              => Search for exception matching id %p\n", 
+             gnat_exception->id);
+      END_DB (DB_MATCH);
+
+      /* Otherwise we have a catch handler or exception specification.  */
+
+      while (1)
+       {
+         _Unwind_Ptr tmp;
+
+         p = action_record;
+         p = read_sleb128 (p, &tmp); ar_filter = tmp;
+         read_sleb128 (p, &tmp); ar_disp = tmp;
+
+         START_DB (DB_MATCH);
+         printf ("ar_filter  %d\n", ar_filter);
+         END_DB (DB_MATCH);
+
+         if (ar_filter == 0)
+           {
+             /* Zero filter values are cleanups. We should not be seeing
+                this for GNU-Ada though
+                saw_cleanup = true;  */
+             START_DB (DB_SEARCH);
+             printf ("              Null Filter for ip = %p <===\n", ip);
+             END_DB (DB_SEARCH);
+           }
+         else if (ar_filter > 0)
+           {
+             _Unwind_Ptr lp_id = get_ttype_entry (context, &info, ar_filter);
+             
+             START_DB (DB_MATCH);
+             printf ("catch_type ");
+             
+             switch (lp_id)
+               {
+               case GNAT_ALL_OTHERS_ID:
+                 printf ("GNAT_ALL_OTHERS_ID\n");              
+                 break;
+                 
+               case GNAT_OTHERS_ID:
+                 printf ("GNAT_OTHERS_ID\n");
+                 break;
+                 
+               default:
+                 printf ("%p\n", lp_id);
+                 break;
+               }
+
+             END_DB (DB_MATCH);
+
+             if (lp_id == GNAT_ALL_OTHERS_ID)
+               {
+                 START_DB (DB_SAW);
+                 printf ("              => SAW cleanup\n");
+                 END_DB (DB_SAW);
+
+                 cleanup_filter = ar_filter;
+                 gnat_exception->has_cleanup = true;
+               }
+
+             hit_others_handler = 
+               (lp_id == GNAT_OTHERS_ID && gnat_exception->handled_by_others);
+
+             if (hit_others_handler || lp_id == gnat_exception->id)
+               {
+                 START_DB (DB_SAW);
+                 printf ("              => SAW handler\n");
+                 END_DB (DB_SAW);
+
+                 handler_filter = ar_filter;     
+               }
+           }
+         else
+           {
+             /* Negative filter values are for C++ exception specifications.
+                Should not be there for Ada :/  */
+           }
+
+         if (actions & _UA_SEARCH_PHASE)
+           {
+             if (handler_filter)
+               {
+                 found_type = found_handler;
+                 handler_switch_value = handler_filter;
+                 break;
+               }
+
+             if (cleanup_filter)
+               {
+                 found_type = found_cleanup;
+               }
+           }
+
+         if (actions & _UA_CLEANUP_PHASE)
+           {
+             if (handler_filter)
+               {
+                 found_type = found_handler;
+                 handler_switch_value = handler_filter;
+                 break;
+               }
+               
+             if (cleanup_filter)
+               {
+                 found_type = found_cleanup;
+                 handler_switch_value = cleanup_filter;
+                 break;
+               }
+           }
+
+         if (ar_disp == 0)
+           break;
+         action_record = p + ar_disp;
+       }
+    }
+
+ do_something:
+  if (found_type == found_nothing) {
+    START_DB (DB_FOUND);
+    printf ("              => FOUND nothing\n");
+    END_DB (DB_FOUND);
+
+    return _URC_CONTINUE_UNWIND;
+  }
+
+   if (actions & _UA_SEARCH_PHASE)
+    {
+      START_DB (DB_FOUND);
+      printf ("              => Computing return for SEARCH\n");
+      END_DB (DB_FOUND);
+
+      if (found_type == found_cleanup
+         && !gnat_exception->select_cleanups)
+       {
+         START_DB (DB_FOUND);
+         printf ("              => FOUND cleanup\n");
+         END_DB (DB_FOUND);
+
+         return _URC_CONTINUE_UNWIND;
+       }
+
+      START_DB (DB_FOUND);
+      printf ("              => FOUND handler\n");
+      END_DB (DB_FOUND);
+
+      return _URC_HANDLER_FOUND;
+    }
+
+ install_context:
+   
+   START_DB (DB_INSTALL);
+   printf ("              => INSTALLING context for filter %d\n",
+          handler_switch_value);
+   END_DB (DB_INSTALL);
+
+   if (found_type == found_terminate)
+     {
+       /* Should not have this for Ada ?  */
+       START_DB (DB_INSTALL);
+       printf ("              => FOUND terminate <===\n");
+       END_DB (DB_INSTALL);
+     }
+
+   
+   /* Signal that we are going to enter a handler, which will typically
+      enable the debugger to take control and possibly output an automatic
+      backtrace. Note that we are supposed to provide the handler's entry
+      point here but we don't have it.
+    */
+   __gnat_notify_handled_exception
+     ((void *)landing_pad, hit_others_handler, true);
+      
+
+   /* The GNU-Ada exception handlers know how to find the exception
+      occurrence without having to pass it as an argument so there
+      is no need to feed any specific register with this information.
+        
+      This is why the two following lines are commented out.  */
+
+   /* _Unwind_SetGR (context, __builtin_eh_return_data_regno (0),
+      (_Unwind_Ptr) &xh->unwindHeader);  */
+
+  _Unwind_SetGR (context, __builtin_eh_return_data_regno (1),
+                handler_switch_value);
+
+  _Unwind_SetIP (context, landing_pad);
+
+  return _URC_INSTALL_CONTEXT;
+}
+
+
+#endif   /* IN_RTS - For eh personality routine   */
index 131490044160698e01037f0712361e1e7226f3dd..816d851e4806ac0186fc3a54312dbddc5d869453 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                  B o d y                                 --
 --                                                                          --
---                             $Revision: 1.79 $
+--                             $Revision$
 --                                                                          --
 --             Copyright (C) 1991-2001 Florida State University             --
 --                                                                          --
@@ -42,12 +42,8 @@ with System.Task_Primitives.Operations;
 --  used for Write_Lock
 --           Unlock
 
-with Ada.Exceptions;
---  used for Raise_Exception
-
 package body System.Tasking.Protected_Objects is
 
-   use Ada.Exceptions;
    use System.Task_Primitives.Operations;
 
    -------------------------
@@ -97,7 +93,7 @@ package body System.Tasking.Protected_Objects is
       Write_Lock (Object.L'Access, Ceiling_Violation);
 
       if Ceiling_Violation then
-         Raise_Exception (Program_Error'Identity, "Ceiling Violation");
+         raise Program_Error;
       end if;
    end Lock;
 
@@ -111,7 +107,7 @@ package body System.Tasking.Protected_Objects is
       Read_Lock (Object.L'Access, Ceiling_Violation);
 
       if Ceiling_Violation then
-         Raise_Exception (Program_Error'Identity, "Ceiling Violation");
+         raise Program_Error;
       end if;
    end Lock_Read_Only;
 
index 36ada8c4c6fb7ecae589794a16d6a7bacc9fe2ae..53ed7ae1b89ea4a90c2cbc1a5c3114705476bae9 100644 (file)
@@ -610,8 +610,9 @@ package body Switch is
 
                   when 'c' =>
                      Ptr := Ptr + 1;
+
                      if Ptr > Max then
-                        Osint.Fail ("Invalid switch: ", "ec");
+                        raise Bad_Switch;
                      end if;
 
                      Config_File_Name :=
@@ -623,18 +624,17 @@ package body Switch is
 
                   when 'm' =>
                      Ptr := Ptr + 1;
+
                      if Ptr > Max then
-                        Osint.Fail ("Invalid switch: ", "em");
+                        raise Bad_Switch;
                      end if;
 
                      Mapping_File_Name :=
                        new String'(Switch_Chars (Ptr .. Max));
-
                      return;
 
                   when others =>
-                     Osint.Fail ("Invalid switch: ",
-                                   (1 => 'e', 2 => Switch_Chars (Ptr)));
+                     raise Bad_Switch;
                end case;
 
             --  Processing for E switch