aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.2.1/gcc/ada/targparm.adb
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.2.1/gcc/ada/targparm.adb')
-rw-r--r--gcc-4.2.1/gcc/ada/targparm.adb638
1 files changed, 0 insertions, 638 deletions
diff --git a/gcc-4.2.1/gcc/ada/targparm.adb b/gcc-4.2.1/gcc/ada/targparm.adb
deleted file mode 100644
index 829535d86..000000000
--- a/gcc-4.2.1/gcc/ada/targparm.adb
+++ /dev/null
@@ -1,638 +0,0 @@
-------------------------------------------------------------------------------
--- --
--- GNAT RUN-TIME COMPONENTS --
--- --
--- T A R G P A R M --
--- --
--- B o d y --
--- --
--- Copyright (C) 1999-2005, 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, 51 Franklin Street, Fifth Floor, --
--- Boston, MA 02110-1301, USA. --
--- --
--- GNAT was originally developed by the GNAT team at New York University. --
--- Extensive contributions were provided by Ada Core Technologies Inc. --
--- --
-------------------------------------------------------------------------------
-
-with Csets; use Csets;
-with Namet; use Namet;
-with Opt; use Opt;
-with Osint; use Osint;
-with Output; use Output;
-
-package body Targparm is
- use ASCII;
-
- Parameters_Obtained : Boolean := False;
- -- Set True after first call to Get_Target_Parameters. Used to avoid
- -- reading system.ads more than once, since it cannot change.
-
- -- The following array defines a tag name for each entry
-
- type Targparm_Tags is
- (AAM, -- AAMP
- BDC, -- Backend_Divide_Checks
- BOC, -- Backend_Overflow_Checks
- CLA, -- Command_Line_Args
- CRT, -- Configurable_Run_Times
- CSV, -- Compiler_System_Version
- D32, -- Duration_32_Bits
- DEN, -- Denorm
- DSP, -- Functions_Return_By_DSP
- EXS, -- Exit_Status_Supported
- FEL, -- Frontend_Layout
- FFO, -- Fractional_Fixed_Ops
- MOV, -- Machine_Overflows
- MRN, -- Machine_Rounds
- PAS, -- Preallocated_Stacks
- S64, -- Support_64_Bit_Divides
- SAG, -- Support_Aggregates
- SCA, -- Support_Composite_Assign
- SCC, -- Support_Composite_Compare
- SCD, -- Stack_Check_Default
- SCP, -- Stack_Check_Probes
- SLS, -- Support_Long_Shifts
- SNZ, -- Signed_Zeros
- SSL, -- Suppress_Standard_Library
- UAM, -- Use_Ada_Main_Program_Name
- VMS, -- OpenVMS
- ZCD, -- ZCX_By_Default
- ZCG); -- GCC_ZCX_Support
-
- subtype Targparm_Tags_OK is Targparm_Tags range AAM .. ZCG;
- -- Range excluding obsolete entries
-
- Targparm_Flags : array (Targparm_Tags) of Boolean := (others => False);
- -- Flag is set True if corresponding parameter is scanned
-
- -- The following list of string constants gives the parameter names
-
- AAM_Str : aliased constant Source_Buffer := "AAMP";
- BDC_Str : aliased constant Source_Buffer := "Backend_Divide_Checks";
- BOC_Str : aliased constant Source_Buffer := "Backend_Overflow_Checks";
- CLA_Str : aliased constant Source_Buffer := "Command_Line_Args";
- CRT_Str : aliased constant Source_Buffer := "Configurable_Run_Time";
- CSV_Str : aliased constant Source_Buffer := "Compiler_System_Version";
- D32_Str : aliased constant Source_Buffer := "Duration_32_Bits";
- DEN_Str : aliased constant Source_Buffer := "Denorm";
- DSP_Str : aliased constant Source_Buffer := "Functions_Return_By_DSP";
- EXS_Str : aliased constant Source_Buffer := "Exit_Status_Supported";
- FEL_Str : aliased constant Source_Buffer := "Frontend_Layout";
- FFO_Str : aliased constant Source_Buffer := "Fractional_Fixed_Ops";
- MOV_Str : aliased constant Source_Buffer := "Machine_Overflows";
- MRN_Str : aliased constant Source_Buffer := "Machine_Rounds";
- PAS_Str : aliased constant Source_Buffer := "Preallocated_Stacks";
- S64_Str : aliased constant Source_Buffer := "Support_64_Bit_Divides";
- SAG_Str : aliased constant Source_Buffer := "Support_Aggregates";
- SCA_Str : aliased constant Source_Buffer := "Support_Composite_Assign";
- SCC_Str : aliased constant Source_Buffer := "Support_Composite_Compare";
- SCD_Str : aliased constant Source_Buffer := "Stack_Check_Default";
- SCP_Str : aliased constant Source_Buffer := "Stack_Check_Probes";
- SLS_Str : aliased constant Source_Buffer := "Support_Long_Shifts";
- SNZ_Str : aliased constant Source_Buffer := "Signed_Zeros";
- SSL_Str : aliased constant Source_Buffer := "Suppress_Standard_Library";
- UAM_Str : aliased constant Source_Buffer := "Use_Ada_Main_Program_Name";
- VMS_Str : aliased constant Source_Buffer := "OpenVMS";
- ZCD_Str : aliased constant Source_Buffer := "ZCX_By_Default";
- ZCG_Str : aliased constant Source_Buffer := "GCC_ZCX_Support";
-
- -- The following defines a set of pointers to the above strings,
- -- indexed by the tag values.
-
- type Buffer_Ptr is access constant Source_Buffer;
- Targparm_Str : constant array (Targparm_Tags) of Buffer_Ptr :=
- (AAM_Str'Access,
- BDC_Str'Access,
- BOC_Str'Access,
- CLA_Str'Access,
- CRT_Str'Access,
- CSV_Str'Access,
- D32_Str'Access,
- DEN_Str'Access,
- DSP_Str'Access,
- EXS_Str'Access,
- FEL_Str'Access,
- FFO_Str'Access,
- MOV_Str'Access,
- MRN_Str'Access,
- PAS_Str'Access,
- S64_Str'Access,
- SAG_Str'Access,
- SCA_Str'Access,
- SCC_Str'Access,
- SCD_Str'Access,
- SCP_Str'Access,
- SLS_Str'Access,
- SNZ_Str'Access,
- SSL_Str'Access,
- UAM_Str'Access,
- VMS_Str'Access,
- ZCD_Str'Access,
- ZCG_Str'Access);
-
- -----------------------
- -- Local Subprograms --
- -----------------------
-
- procedure Set_Profile_Restrictions (P : Profile_Name);
- -- Set Restrictions_On_Target for the given profile
-
- ------------------------------
- -- Set_Profile_Restrictions --
- ------------------------------
-
- procedure Set_Profile_Restrictions (P : Profile_Name) is
- R : Restriction_Flags renames Profile_Info (P).Set;
- V : Restriction_Values renames Profile_Info (P).Value;
- begin
- for J in R'Range loop
- if R (J) then
- Restrictions_On_Target.Set (J) := True;
-
- if J in All_Parameter_Restrictions then
- Restrictions_On_Target.Value (J) := V (J);
- end if;
- end if;
- end loop;
- end Set_Profile_Restrictions;
-
- ---------------------------
- -- Get_Target_Parameters --
- ---------------------------
-
- -- Version which reads in system.ads
-
- procedure Get_Target_Parameters is
- Text : Source_Buffer_Ptr;
- Hi : Source_Ptr;
-
- begin
- if Parameters_Obtained then
- return;
- end if;
-
- Name_Buffer (1 .. 10) := "system.ads";
- Name_Len := 10;
-
- Read_Source_File (Name_Find, Lo => 0, Hi => Hi, Src => Text);
-
- if Text = null then
- Write_Line ("fatal error, run-time library not installed correctly");
- Write_Line ("cannot locate file system.ads");
- raise Unrecoverable_Error;
- end if;
-
- Targparm.Get_Target_Parameters
- (System_Text => Text,
- Source_First => 0,
- Source_Last => Hi);
- end Get_Target_Parameters;
-
- -- Version where caller supplies system.ads text
-
- procedure Get_Target_Parameters
- (System_Text : Source_Buffer_Ptr;
- Source_First : Source_Ptr;
- Source_Last : Source_Ptr)
- is
- P : Source_Ptr;
- -- Scans source buffer containing source of system.ads
-
- Fatal : Boolean := False;
- -- Set True if a fatal error is detected
-
- Result : Boolean;
- -- Records boolean from system line
-
- begin
- if Parameters_Obtained then
- return;
- else
- Parameters_Obtained := True;
- end if;
-
- Opt.Address_Is_Private := False;
-
- P := Source_First;
- Line_Loop : while System_Text (P .. P + 10) /= "end System;" loop
-
- -- Skip comments quickly
-
- if System_Text (P) = '-' then
- goto Line_Loop_Continue;
-
- -- Test for type Address is private
-
- elsif System_Text (P .. P + 26) = " type Address is private;" then
- Opt.Address_Is_Private := True;
- P := P + 26;
- goto Line_Loop_Continue;
-
- -- Test for pragma Profile (Ravenscar);
-
- elsif System_Text (P .. P + 26) =
- "pragma Profile (Ravenscar);"
- then
- Set_Profile_Restrictions (Ravenscar);
- Opt.Task_Dispatching_Policy := 'F';
- Opt.Locking_Policy := 'C';
- P := P + 27;
- goto Line_Loop_Continue;
-
- -- Test for pragma Profile (Restricted);
-
- elsif System_Text (P .. P + 27) =
- "pragma Profile (Restricted);"
- then
- Set_Profile_Restrictions (Restricted);
- P := P + 28;
- goto Line_Loop_Continue;
-
- -- Test for pragma Restrictions
-
- elsif System_Text (P .. P + 20) = "pragma Restrictions (" then
- P := P + 21;
-
- Rloop : for K in All_Boolean_Restrictions loop
- declare
- Rname : constant String := Restriction_Id'Image (K);
-
- begin
- for J in Rname'Range loop
- if Fold_Upper (System_Text (P + Source_Ptr (J - 1)))
- /= Rname (J)
- then
- goto Rloop_Continue;
- end if;
- end loop;
-
- if System_Text (P + Rname'Length) = ')' then
- Restrictions_On_Target.Set (K) := True;
- goto Line_Loop_Continue;
- end if;
- end;
-
- <<Rloop_Continue>>
- null;
- end loop Rloop;
-
- Ploop : for K in All_Parameter_Restrictions loop
- declare
- Rname : constant String :=
- All_Parameter_Restrictions'Image (K);
-
- V : Natural;
- -- Accumulates value
-
- begin
- for J in Rname'Range loop
- if Fold_Upper (System_Text (P + Source_Ptr (J - 1)))
- /= Rname (J)
- then
- goto Ploop_Continue;
- end if;
- end loop;
-
- if System_Text (P + Rname'Length .. P + Rname'Length + 3) =
- " => "
- then
- P := P + Rname'Length + 4;
-
- V := 0;
- loop
- if System_Text (P) in '0' .. '9' then
- declare
- pragma Unsuppress (Overflow_Check);
-
- begin
- -- Accumulate next digit
-
- V := 10 * V +
- Character'Pos (System_Text (P)) -
- Character'Pos ('0');
-
- exception
- -- On overflow, we just ignore the pragma since
- -- that is the standard handling in this case.
-
- when Constraint_Error =>
- goto Line_Loop_Continue;
- end;
-
- elsif System_Text (P) = '_' then
- null;
-
- elsif System_Text (P) = ')' then
- Restrictions_On_Target.Value (K) := V;
- Restrictions_On_Target.Set (K) := True;
- goto Line_Loop_Continue;
-
- else
- exit Ploop;
- end if;
-
- P := P + 1;
- end loop;
-
- else
- exit Ploop;
- end if;
- end;
-
- <<Ploop_Continue>>
- null;
- end loop Ploop;
-
- Set_Standard_Error;
- Write_Line
- ("fatal error: system.ads is incorrectly formatted");
- Write_Str ("unrecognized or incorrect restrictions pragma: ");
-
- while System_Text (P) /= ')'
- and then
- System_Text (P) /= ASCII.LF
- loop
- Write_Char (System_Text (P));
- P := P + 1;
- end loop;
-
- Write_Eol;
- Fatal := True;
- Set_Standard_Output;
-
- -- Test for pragma Detect_Blocking;
-
- elsif System_Text (P .. P + 22) = "pragma Detect_Blocking;" then
- P := P + 23;
- Opt.Detect_Blocking := True;
- goto Line_Loop_Continue;
-
- -- Discard_Names
-
- elsif System_Text (P .. P + 20) = "pragma Discard_Names;" then
- P := P + 21;
- Opt.Global_Discard_Names := True;
- goto Line_Loop_Continue;
-
- -- Locking Policy
-
- elsif System_Text (P .. P + 22) = "pragma Locking_Policy (" then
- P := P + 23;
- Opt.Locking_Policy := System_Text (P);
- Opt.Locking_Policy_Sloc := System_Location;
- goto Line_Loop_Continue;
-
- -- Normalize_Scalars
-
- elsif System_Text (P .. P + 24) = "pragma Normalize_Scalars;" then
- P := P + 25;
- Opt.Normalize_Scalars := True;
- Opt.Init_Or_Norm_Scalars := True;
- goto Line_Loop_Continue;
-
- -- Polling (On)
-
- elsif System_Text (P .. P + 19) = "pragma Polling (On);" then
- P := P + 20;
- Opt.Polling_Required := True;
- goto Line_Loop_Continue;
-
- -- Ignore pragma Pure (System)
-
- elsif System_Text (P .. P + 20) = "pragma Pure (System);" then
- P := P + 21;
- goto Line_Loop_Continue;
-
- -- Queuing Policy
-
- elsif System_Text (P .. P + 22) = "pragma Queuing_Policy (" then
- P := P + 23;
- Opt.Queuing_Policy := System_Text (P);
- Opt.Queuing_Policy_Sloc := System_Location;
- goto Line_Loop_Continue;
-
- -- Suppress_Exception_Locations
-
- elsif System_Text (P .. P + 34) =
- "pragma Suppress_Exception_Locations;"
- then
- P := P + 35;
- Opt.Exception_Locations_Suppressed := True;
- goto Line_Loop_Continue;
-
- -- Task_Dispatching Policy
-
- elsif System_Text (P .. P + 31) =
- "pragma Task_Dispatching_Policy ("
- then
- P := P + 32;
- Opt.Task_Dispatching_Policy := System_Text (P);
- Opt.Task_Dispatching_Policy_Sloc := System_Location;
- goto Line_Loop_Continue;
-
- -- No other pragmas are permitted
-
- elsif System_Text (P .. P + 6) = "pragma " then
- Set_Standard_Error;
- Write_Line ("unrecognized line in system.ads: ");
-
- while System_Text (P) /= ')'
- and then System_Text (P) /= ASCII.LF
- loop
- Write_Char (System_Text (P));
- P := P + 1;
- end loop;
-
- Write_Eol;
- Set_Standard_Output;
- Fatal := True;
-
- -- See if we have a Run_Time_Name
-
- elsif System_Text (P .. P + 38) =
- " Run_Time_Name : constant String := """
- then
- P := P + 39;
-
- Name_Len := 0;
- while System_Text (P) in 'A' .. 'Z'
- or else
- System_Text (P) in 'a' .. 'z'
- or else
- System_Text (P) in '0' .. '9'
- or else
- System_Text (P) = ' '
- or else
- System_Text (P) = '_'
- loop
- Add_Char_To_Name_Buffer (System_Text (P));
- P := P + 1;
- end loop;
-
- if System_Text (P) /= '"'
- or else System_Text (P + 1) /= ';'
- or else (System_Text (P + 2) /= ASCII.LF
- and then
- System_Text (P + 2) /= ASCII.CR)
- then
- Set_Standard_Error;
- Write_Line
- ("incorrectly formatted Run_Time_Name in system.ads");
- Set_Standard_Output;
- Fatal := True;
-
- else
- Run_Time_Name_On_Target := Name_Enter;
- end if;
-
- goto Line_Loop_Continue;
-
- -- Next See if we have a configuration parameter
-
- else
- Config_Param_Loop : for K in Targparm_Tags loop
- if System_Text (P + 3 .. P + 2 + Targparm_Str (K)'Length) =
- Targparm_Str (K).all
- then
- P := P + 3 + Targparm_Str (K)'Length;
-
- if Targparm_Flags (K) then
- Set_Standard_Error;
- Write_Line
- ("fatal error: system.ads is incorrectly formatted");
- Write_Str ("duplicate line for parameter: ");
-
- for J in Targparm_Str (K)'Range loop
- Write_Char (Targparm_Str (K).all (J));
- end loop;
-
- Write_Eol;
- Set_Standard_Output;
- Fatal := True;
-
- else
- Targparm_Flags (K) := True;
- end if;
-
- while System_Text (P) /= ':'
- or else System_Text (P + 1) /= '='
- loop
- P := P + 1;
- end loop;
-
- P := P + 2;
-
- while System_Text (P) = ' ' loop
- P := P + 1;
- end loop;
-
- Result := (System_Text (P) = 'T');
-
- case K is
- when AAM => AAMP_On_Target := Result;
- when BDC => Backend_Divide_Checks_On_Target := Result;
- when BOC => Backend_Overflow_Checks_On_Target := Result;
- when CLA => Command_Line_Args_On_Target := Result;
- when CRT => Configurable_Run_Time_On_Target := Result;
- when CSV => Compiler_System_Version := Result;
- when D32 => Duration_32_Bits_On_Target := Result;
- when DEN => Denorm_On_Target := Result;
- when DSP => Functions_Return_By_DSP_On_Target := Result;
- when EXS => Exit_Status_Supported_On_Target := Result;
- when FEL => Frontend_Layout_On_Target := Result;
- when FFO => Fractional_Fixed_Ops_On_Target := Result;
- when MOV => Machine_Overflows_On_Target := Result;
- when MRN => Machine_Rounds_On_Target := Result;
- when PAS => Preallocated_Stacks_On_Target := Result;
- when S64 => Support_64_Bit_Divides_On_Target := Result;
- when SAG => Support_Aggregates_On_Target := Result;
- when SCA => Support_Composite_Assign_On_Target := Result;
- when SCC => Support_Composite_Compare_On_Target := Result;
- when SCD => Stack_Check_Default_On_Target := Result;
- when SCP => Stack_Check_Probes_On_Target := Result;
- when SLS => Support_Long_Shifts_On_Target := Result;
- when SSL => Suppress_Standard_Library_On_Target := Result;
- when SNZ => Signed_Zeros_On_Target := Result;
- when UAM => Use_Ada_Main_Program_Name_On_Target := Result;
- when VMS => OpenVMS_On_Target := Result;
- when ZCD => ZCX_By_Default_On_Target := Result;
- when ZCG => GCC_ZCX_Support_On_Target := Result;
-
- goto Line_Loop_Continue;
- end case;
-
- -- Here we are seeing a parameter we do not understand. We
- -- simply ignore this (will happen when an old compiler is
- -- used to compile a newer version of GNAT which does not
- -- support the
- end if;
- end loop Config_Param_Loop;
- end if;
-
- -- Here after processing one line of System spec
-
- <<Line_Loop_Continue>>
-
- while System_Text (P) /= CR and then System_Text (P) /= LF loop
- P := P + 1;
- exit when P >= Source_Last;
- end loop;
-
- while System_Text (P) = CR or else System_Text (P) = LF loop
- P := P + 1;
- exit when P >= Source_Last;
- end loop;
-
- if P >= Source_Last then
- Set_Standard_Error;
- Write_Line ("fatal error, system.ads not formatted correctly");
- Write_Line ("unexpected end of file");
- Set_Standard_Output;
- raise Unrecoverable_Error;
- end if;
- end loop Line_Loop;
-
- -- Now that OpenVMS_On_Target has been given its definitive value,
- -- change the multi-unit index character from '~' to '$' for OpenVMS.
-
- if OpenVMS_On_Target then
- Multi_Unit_Index_Character := '$';
- end if;
-
- -- Check no missing target parameter settings (skip for compiler vsn)
-
- if not Compiler_System_Version then
- for K in Targparm_Tags_OK loop
- if not Targparm_Flags (K) then
- Set_Standard_Error;
- Write_Line
- ("fatal error: system.ads is incorrectly formatted");
- Write_Str ("missing line for parameter: ");
-
- for J in Targparm_Str (K)'Range loop
- Write_Char (Targparm_Str (K).all (J));
- end loop;
-
- Write_Eol;
- Set_Standard_Output;
- Fatal := True;
- end if;
- end loop;
- end if;
-
- if Fatal then
- raise Unrecoverable_Error;
- end if;
- end Get_Target_Parameters;
-
-end Targparm;