annotate gcc/ada/targparm.adb @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 ------------------------------------------------------------------------------
kono
parents:
diff changeset
2 -- --
kono
parents:
diff changeset
3 -- GNAT RUN-TIME COMPONENTS --
kono
parents:
diff changeset
4 -- --
kono
parents:
diff changeset
5 -- T A R G P A R M --
kono
parents:
diff changeset
6 -- --
kono
parents:
diff changeset
7 -- B o d y --
kono
parents:
diff changeset
8 -- --
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
9 -- Copyright (C) 1999-2019, Free Software Foundation, Inc. --
111
kono
parents:
diff changeset
10 -- --
kono
parents:
diff changeset
11 -- GNAT is free software; you can redistribute it and/or modify it under --
kono
parents:
diff changeset
12 -- terms of the GNU General Public License as published by the Free Soft- --
kono
parents:
diff changeset
13 -- ware Foundation; either version 3, or (at your option) any later ver- --
kono
parents:
diff changeset
14 -- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
kono
parents:
diff changeset
15 -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
kono
parents:
diff changeset
16 -- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
kono
parents:
diff changeset
17 -- for more details. You should have received a copy of the GNU General --
kono
parents:
diff changeset
18 -- Public License distributed with GNAT; see file COPYING3. If not, go to --
kono
parents:
diff changeset
19 -- http://www.gnu.org/licenses for a complete copy of the license. --
kono
parents:
diff changeset
20 -- --
kono
parents:
diff changeset
21 -- GNAT was originally developed by the GNAT team at New York University. --
kono
parents:
diff changeset
22 -- Extensive contributions were provided by Ada Core Technologies Inc. --
kono
parents:
diff changeset
23 -- --
kono
parents:
diff changeset
24 ------------------------------------------------------------------------------
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 with Csets; use Csets;
kono
parents:
diff changeset
27 with Opt;
kono
parents:
diff changeset
28 with Osint; use Osint;
kono
parents:
diff changeset
29 with Output; use Output;
kono
parents:
diff changeset
30 with System.OS_Lib; use System.OS_Lib;
kono
parents:
diff changeset
31
kono
parents:
diff changeset
32 package body Targparm is
kono
parents:
diff changeset
33 use ASCII;
kono
parents:
diff changeset
34
kono
parents:
diff changeset
35 Parameters_Obtained : Boolean := False;
kono
parents:
diff changeset
36 -- Set True after first call to Get_Target_Parameters. Used to avoid
kono
parents:
diff changeset
37 -- reading system.ads more than once, since it cannot change.
kono
parents:
diff changeset
38
kono
parents:
diff changeset
39 -- The following array defines a tag name for each entry
kono
parents:
diff changeset
40
kono
parents:
diff changeset
41 type Targparm_Tags is
kono
parents:
diff changeset
42 (AAM, -- AAMP
kono
parents:
diff changeset
43 ACR, -- Always_Compatible_Rep
kono
parents:
diff changeset
44 ASD, -- Atomic_Sync_Default
kono
parents:
diff changeset
45 BDC, -- Backend_Divide_Checks
kono
parents:
diff changeset
46 BOC, -- Backend_Overflow_Checks
kono
parents:
diff changeset
47 CLA, -- Command_Line_Args
kono
parents:
diff changeset
48 CRT, -- Configurable_Run_Times
kono
parents:
diff changeset
49 D32, -- Duration_32_Bits
kono
parents:
diff changeset
50 DEN, -- Denorm
kono
parents:
diff changeset
51 EXS, -- Exit_Status_Supported
kono
parents:
diff changeset
52 FEL, -- Frontend_Layout
kono
parents:
diff changeset
53 FEX, -- Frontend_Exceptions
kono
parents:
diff changeset
54 FFO, -- Fractional_Fixed_Ops
kono
parents:
diff changeset
55 MOV, -- Machine_Overflows
kono
parents:
diff changeset
56 MRN, -- Machine_Rounds
kono
parents:
diff changeset
57 PAS, -- Preallocated_Stacks
kono
parents:
diff changeset
58 SAG, -- Support_Aggregates
kono
parents:
diff changeset
59 SAP, -- Support_Atomic_Primitives
kono
parents:
diff changeset
60 SCA, -- Support_Composite_Assign
kono
parents:
diff changeset
61 SCC, -- Support_Composite_Compare
kono
parents:
diff changeset
62 SCD, -- Stack_Check_Default
kono
parents:
diff changeset
63 SCL, -- Stack_Check_Limits
kono
parents:
diff changeset
64 SCP, -- Stack_Check_Probes
kono
parents:
diff changeset
65 SLS, -- Support_Long_Shifts
kono
parents:
diff changeset
66 SNZ, -- Signed_Zeros
kono
parents:
diff changeset
67 SSL, -- Suppress_Standard_Library
kono
parents:
diff changeset
68 UAM, -- Use_Ada_Main_Program_Name
kono
parents:
diff changeset
69 ZCX); -- ZCX_By_Default
kono
parents:
diff changeset
70
kono
parents:
diff changeset
71 Targparm_Flags : array (Targparm_Tags) of Boolean := (others => False);
kono
parents:
diff changeset
72 -- Flag is set True if corresponding parameter is scanned
kono
parents:
diff changeset
73
kono
parents:
diff changeset
74 -- The following list of string constants gives the parameter names
kono
parents:
diff changeset
75
kono
parents:
diff changeset
76 AAM_Str : aliased constant Source_Buffer := "AAMP";
kono
parents:
diff changeset
77 ACR_Str : aliased constant Source_Buffer := "Always_Compatible_Rep";
kono
parents:
diff changeset
78 ASD_Str : aliased constant Source_Buffer := "Atomic_Sync_Default";
kono
parents:
diff changeset
79 BDC_Str : aliased constant Source_Buffer := "Backend_Divide_Checks";
kono
parents:
diff changeset
80 BOC_Str : aliased constant Source_Buffer := "Backend_Overflow_Checks";
kono
parents:
diff changeset
81 CLA_Str : aliased constant Source_Buffer := "Command_Line_Args";
kono
parents:
diff changeset
82 CRT_Str : aliased constant Source_Buffer := "Configurable_Run_Time";
kono
parents:
diff changeset
83 D32_Str : aliased constant Source_Buffer := "Duration_32_Bits";
kono
parents:
diff changeset
84 DEN_Str : aliased constant Source_Buffer := "Denorm";
kono
parents:
diff changeset
85 EXS_Str : aliased constant Source_Buffer := "Exit_Status_Supported";
kono
parents:
diff changeset
86 FEL_Str : aliased constant Source_Buffer := "Frontend_Layout";
kono
parents:
diff changeset
87 FEX_Str : aliased constant Source_Buffer := "Frontend_Exceptions";
kono
parents:
diff changeset
88 FFO_Str : aliased constant Source_Buffer := "Fractional_Fixed_Ops";
kono
parents:
diff changeset
89 MOV_Str : aliased constant Source_Buffer := "Machine_Overflows";
kono
parents:
diff changeset
90 MRN_Str : aliased constant Source_Buffer := "Machine_Rounds";
kono
parents:
diff changeset
91 PAS_Str : aliased constant Source_Buffer := "Preallocated_Stacks";
kono
parents:
diff changeset
92 SAG_Str : aliased constant Source_Buffer := "Support_Aggregates";
kono
parents:
diff changeset
93 SAP_Str : aliased constant Source_Buffer := "Support_Atomic_Primitives";
kono
parents:
diff changeset
94 SCA_Str : aliased constant Source_Buffer := "Support_Composite_Assign";
kono
parents:
diff changeset
95 SCC_Str : aliased constant Source_Buffer := "Support_Composite_Compare";
kono
parents:
diff changeset
96 SCD_Str : aliased constant Source_Buffer := "Stack_Check_Default";
kono
parents:
diff changeset
97 SCL_Str : aliased constant Source_Buffer := "Stack_Check_Limits";
kono
parents:
diff changeset
98 SCP_Str : aliased constant Source_Buffer := "Stack_Check_Probes";
kono
parents:
diff changeset
99 SLS_Str : aliased constant Source_Buffer := "Support_Long_Shifts";
kono
parents:
diff changeset
100 SNZ_Str : aliased constant Source_Buffer := "Signed_Zeros";
kono
parents:
diff changeset
101 SSL_Str : aliased constant Source_Buffer := "Suppress_Standard_Library";
kono
parents:
diff changeset
102 UAM_Str : aliased constant Source_Buffer := "Use_Ada_Main_Program_Name";
kono
parents:
diff changeset
103 ZCX_Str : aliased constant Source_Buffer := "ZCX_By_Default";
kono
parents:
diff changeset
104
kono
parents:
diff changeset
105 -- The following defines a set of pointers to the above strings,
kono
parents:
diff changeset
106 -- indexed by the tag values.
kono
parents:
diff changeset
107
kono
parents:
diff changeset
108 type Buffer_Ptr is access constant Source_Buffer;
kono
parents:
diff changeset
109 Targparm_Str : constant array (Targparm_Tags) of Buffer_Ptr :=
kono
parents:
diff changeset
110 (AAM => AAM_Str'Access,
kono
parents:
diff changeset
111 ACR => ACR_Str'Access,
kono
parents:
diff changeset
112 ASD => ASD_Str'Access,
kono
parents:
diff changeset
113 BDC => BDC_Str'Access,
kono
parents:
diff changeset
114 BOC => BOC_Str'Access,
kono
parents:
diff changeset
115 CLA => CLA_Str'Access,
kono
parents:
diff changeset
116 CRT => CRT_Str'Access,
kono
parents:
diff changeset
117 D32 => D32_Str'Access,
kono
parents:
diff changeset
118 DEN => DEN_Str'Access,
kono
parents:
diff changeset
119 EXS => EXS_Str'Access,
kono
parents:
diff changeset
120 FEL => FEL_Str'Access,
kono
parents:
diff changeset
121 FEX => FEX_Str'Access,
kono
parents:
diff changeset
122 FFO => FFO_Str'Access,
kono
parents:
diff changeset
123 MOV => MOV_Str'Access,
kono
parents:
diff changeset
124 MRN => MRN_Str'Access,
kono
parents:
diff changeset
125 PAS => PAS_Str'Access,
kono
parents:
diff changeset
126 SAG => SAG_Str'Access,
kono
parents:
diff changeset
127 SAP => SAP_Str'Access,
kono
parents:
diff changeset
128 SCA => SCA_Str'Access,
kono
parents:
diff changeset
129 SCC => SCC_Str'Access,
kono
parents:
diff changeset
130 SCD => SCD_Str'Access,
kono
parents:
diff changeset
131 SCL => SCL_Str'Access,
kono
parents:
diff changeset
132 SCP => SCP_Str'Access,
kono
parents:
diff changeset
133 SLS => SLS_Str'Access,
kono
parents:
diff changeset
134 SNZ => SNZ_Str'Access,
kono
parents:
diff changeset
135 SSL => SSL_Str'Access,
kono
parents:
diff changeset
136 UAM => UAM_Str'Access,
kono
parents:
diff changeset
137 ZCX => ZCX_Str'Access);
kono
parents:
diff changeset
138
kono
parents:
diff changeset
139 -----------------------
kono
parents:
diff changeset
140 -- Local Subprograms --
kono
parents:
diff changeset
141 -----------------------
kono
parents:
diff changeset
142
kono
parents:
diff changeset
143 procedure Set_Profile_Restrictions (P : Profile_Name);
kono
parents:
diff changeset
144 -- Set Restrictions_On_Target for the given profile
kono
parents:
diff changeset
145
kono
parents:
diff changeset
146 ---------------------------
kono
parents:
diff changeset
147 -- Get_Target_Parameters --
kono
parents:
diff changeset
148 ---------------------------
kono
parents:
diff changeset
149
kono
parents:
diff changeset
150 -- Version that reads in system.ads
kono
parents:
diff changeset
151
kono
parents:
diff changeset
152 procedure Get_Target_Parameters
kono
parents:
diff changeset
153 (Make_Id : Make_Id_Type := null;
kono
parents:
diff changeset
154 Make_SC : Make_SC_Type := null;
kono
parents:
diff changeset
155 Set_NOD : Set_NOD_Type := null;
kono
parents:
diff changeset
156 Set_NSA : Set_NSA_Type := null;
kono
parents:
diff changeset
157 Set_NUA : Set_NUA_Type := null;
kono
parents:
diff changeset
158 Set_NUP : Set_NUP_Type := null)
kono
parents:
diff changeset
159 is
kono
parents:
diff changeset
160 FD : File_Descriptor;
kono
parents:
diff changeset
161 Hi : Source_Ptr;
kono
parents:
diff changeset
162 Text : Source_Buffer_Ptr;
kono
parents:
diff changeset
163
kono
parents:
diff changeset
164 begin
kono
parents:
diff changeset
165 if Parameters_Obtained then
kono
parents:
diff changeset
166 return;
kono
parents:
diff changeset
167 end if;
kono
parents:
diff changeset
168
kono
parents:
diff changeset
169 Name_Buffer (1 .. 10) := "system.ads";
kono
parents:
diff changeset
170 Name_Len := 10;
kono
parents:
diff changeset
171
kono
parents:
diff changeset
172 Read_Source_File (Name_Find, 0, Hi, Text, FD);
kono
parents:
diff changeset
173
kono
parents:
diff changeset
174 if Null_Source_Buffer_Ptr (Text) then
kono
parents:
diff changeset
175 Write_Line ("fatal error, run-time library not installed correctly");
kono
parents:
diff changeset
176
kono
parents:
diff changeset
177 if FD = Null_FD then
kono
parents:
diff changeset
178 Write_Line ("cannot locate file system.ads");
kono
parents:
diff changeset
179 else
kono
parents:
diff changeset
180 Write_Line ("no read access for file system.ads");
kono
parents:
diff changeset
181 end if;
kono
parents:
diff changeset
182
kono
parents:
diff changeset
183 raise Unrecoverable_Error;
kono
parents:
diff changeset
184 end if;
kono
parents:
diff changeset
185
kono
parents:
diff changeset
186 Get_Target_Parameters
kono
parents:
diff changeset
187 (System_Text => Text,
kono
parents:
diff changeset
188 Source_First => 0,
kono
parents:
diff changeset
189 Source_Last => Hi,
kono
parents:
diff changeset
190 Make_Id => Make_Id,
kono
parents:
diff changeset
191 Make_SC => Make_SC,
kono
parents:
diff changeset
192 Set_NOD => Set_NOD,
kono
parents:
diff changeset
193 Set_NSA => Set_NSA,
kono
parents:
diff changeset
194 Set_NUA => Set_NUA,
kono
parents:
diff changeset
195 Set_NUP => Set_NUP);
kono
parents:
diff changeset
196 end Get_Target_Parameters;
kono
parents:
diff changeset
197
kono
parents:
diff changeset
198 -- Version where caller supplies system.ads text
kono
parents:
diff changeset
199
kono
parents:
diff changeset
200 procedure Get_Target_Parameters
kono
parents:
diff changeset
201 (System_Text : Source_Buffer_Ptr;
kono
parents:
diff changeset
202 Source_First : Source_Ptr;
kono
parents:
diff changeset
203 Source_Last : Source_Ptr;
kono
parents:
diff changeset
204 Make_Id : Make_Id_Type := null;
kono
parents:
diff changeset
205 Make_SC : Make_SC_Type := null;
kono
parents:
diff changeset
206 Set_NOD : Set_NOD_Type := null;
kono
parents:
diff changeset
207 Set_NSA : Set_NSA_Type := null;
kono
parents:
diff changeset
208 Set_NUA : Set_NUA_Type := null;
kono
parents:
diff changeset
209 Set_NUP : Set_NUP_Type := null)
kono
parents:
diff changeset
210 is
kono
parents:
diff changeset
211 pragma Assert (System_Text'First = Source_First);
kono
parents:
diff changeset
212 pragma Assert (System_Text'Last = Source_Last);
kono
parents:
diff changeset
213
kono
parents:
diff changeset
214 P : Source_Ptr;
kono
parents:
diff changeset
215 -- Scans source buffer containing source of system.ads
kono
parents:
diff changeset
216
kono
parents:
diff changeset
217 Fatal : Boolean := False;
kono
parents:
diff changeset
218 -- Set True if a fatal error is detected
kono
parents:
diff changeset
219
kono
parents:
diff changeset
220 Result : Boolean;
kono
parents:
diff changeset
221 -- Records boolean from system line
kono
parents:
diff changeset
222
kono
parents:
diff changeset
223 OK : Boolean;
kono
parents:
diff changeset
224 -- Status result from Set_NUP/NSA/NUA call
kono
parents:
diff changeset
225
kono
parents:
diff changeset
226 PR_Start : Source_Ptr;
kono
parents:
diff changeset
227 -- Pointer to ( following pragma Restrictions
kono
parents:
diff changeset
228
kono
parents:
diff changeset
229 procedure Collect_Name;
kono
parents:
diff changeset
230 -- Scan a name starting at System_Text (P), and put Name in Name_Buffer,
kono
parents:
diff changeset
231 -- with Name_Len being length, folded to lower case. On return, P points
kono
parents:
diff changeset
232 -- just past the last character (which should be a right paren).
kono
parents:
diff changeset
233
kono
parents:
diff changeset
234 function Looking_At (S : Source_Buffer) return Boolean;
kono
parents:
diff changeset
235 -- True if P points to the same text as S in System_Text
kono
parents:
diff changeset
236
kono
parents:
diff changeset
237 function Looking_At_Skip (S : Source_Buffer) return Boolean;
kono
parents:
diff changeset
238 -- True if P points to the same text as S in System_Text,
kono
parents:
diff changeset
239 -- and if True, moves P forward to skip S as a side effect.
kono
parents:
diff changeset
240
kono
parents:
diff changeset
241 ------------------
kono
parents:
diff changeset
242 -- Collect_Name --
kono
parents:
diff changeset
243 ------------------
kono
parents:
diff changeset
244
kono
parents:
diff changeset
245 procedure Collect_Name is
kono
parents:
diff changeset
246 begin
kono
parents:
diff changeset
247 Name_Len := 0;
kono
parents:
diff changeset
248 loop
kono
parents:
diff changeset
249 if System_Text (P) in 'a' .. 'z'
kono
parents:
diff changeset
250 or else
kono
parents:
diff changeset
251 System_Text (P) = '_'
kono
parents:
diff changeset
252 or else
kono
parents:
diff changeset
253 System_Text (P) in '0' .. '9'
kono
parents:
diff changeset
254 then
kono
parents:
diff changeset
255 Name_Buffer (Name_Len + 1) := System_Text (P);
kono
parents:
diff changeset
256
kono
parents:
diff changeset
257 elsif System_Text (P) in 'A' .. 'Z' then
kono
parents:
diff changeset
258 Name_Buffer (Name_Len + 1) :=
kono
parents:
diff changeset
259 Character'Val (Character'Pos (System_Text (P)) + 32);
kono
parents:
diff changeset
260
kono
parents:
diff changeset
261 else
kono
parents:
diff changeset
262 exit;
kono
parents:
diff changeset
263 end if;
kono
parents:
diff changeset
264
kono
parents:
diff changeset
265 P := P + 1;
kono
parents:
diff changeset
266 Name_Len := Name_Len + 1;
kono
parents:
diff changeset
267 end loop;
kono
parents:
diff changeset
268 end Collect_Name;
kono
parents:
diff changeset
269
kono
parents:
diff changeset
270 ----------------
kono
parents:
diff changeset
271 -- Looking_At --
kono
parents:
diff changeset
272 ----------------
kono
parents:
diff changeset
273
kono
parents:
diff changeset
274 function Looking_At (S : Source_Buffer) return Boolean is
kono
parents:
diff changeset
275 Last : constant Source_Ptr := P + S'Length - 1;
kono
parents:
diff changeset
276 begin
kono
parents:
diff changeset
277 return Last <= System_Text'Last
kono
parents:
diff changeset
278 and then System_Text (P .. Last) = S;
kono
parents:
diff changeset
279 end Looking_At;
kono
parents:
diff changeset
280
kono
parents:
diff changeset
281 ---------------------
kono
parents:
diff changeset
282 -- Looking_At_Skip --
kono
parents:
diff changeset
283 ---------------------
kono
parents:
diff changeset
284
kono
parents:
diff changeset
285 function Looking_At_Skip (S : Source_Buffer) return Boolean is
kono
parents:
diff changeset
286 Result : constant Boolean := Looking_At (S);
kono
parents:
diff changeset
287 begin
kono
parents:
diff changeset
288 if Result then
kono
parents:
diff changeset
289 P := P + S'Length;
kono
parents:
diff changeset
290 end if;
kono
parents:
diff changeset
291
kono
parents:
diff changeset
292 return Result;
kono
parents:
diff changeset
293 end Looking_At_Skip;
kono
parents:
diff changeset
294
kono
parents:
diff changeset
295 -- Start of processing for Get_Target_Parameters
kono
parents:
diff changeset
296
kono
parents:
diff changeset
297 begin
kono
parents:
diff changeset
298 if Parameters_Obtained then
kono
parents:
diff changeset
299 return;
kono
parents:
diff changeset
300 end if;
kono
parents:
diff changeset
301
kono
parents:
diff changeset
302 Parameters_Obtained := True;
kono
parents:
diff changeset
303 Opt.Address_Is_Private := False;
kono
parents:
diff changeset
304
kono
parents:
diff changeset
305 -- Loop through source lines
kono
parents:
diff changeset
306
kono
parents:
diff changeset
307 -- Note: in the case or pragmas, we are only interested in pragmas that
kono
parents:
diff changeset
308 -- appear as configuration pragmas. These are left justified, so they
kono
parents:
diff changeset
309 -- do not have three spaces at the start. Pragmas appearing within the
kono
parents:
diff changeset
310 -- package (like Pure and No_Elaboration_Code_All) will have the three
kono
parents:
diff changeset
311 -- spaces at the start and so will be ignored.
kono
parents:
diff changeset
312
kono
parents:
diff changeset
313 -- For a special exception, see processing for pragma Pure below
kono
parents:
diff changeset
314
kono
parents:
diff changeset
315 P := Source_First;
kono
parents:
diff changeset
316
kono
parents:
diff changeset
317 while not Looking_At ("end System;") loop
kono
parents:
diff changeset
318 -- Skip comments
kono
parents:
diff changeset
319
kono
parents:
diff changeset
320 if Looking_At ("-") then
kono
parents:
diff changeset
321 goto Line_Loop_Continue;
kono
parents:
diff changeset
322
kono
parents:
diff changeset
323 -- Test for type Address is private
kono
parents:
diff changeset
324
kono
parents:
diff changeset
325 elsif Looking_At_Skip (" type Address is private;") then
kono
parents:
diff changeset
326 Opt.Address_Is_Private := True;
kono
parents:
diff changeset
327 goto Line_Loop_Continue;
kono
parents:
diff changeset
328
kono
parents:
diff changeset
329 -- Test for pragma Profile (Ravenscar);
kono
parents:
diff changeset
330
kono
parents:
diff changeset
331 elsif Looking_At_Skip ("pragma Profile (Ravenscar);") then
kono
parents:
diff changeset
332 Set_Profile_Restrictions (Ravenscar);
kono
parents:
diff changeset
333 Opt.Task_Dispatching_Policy := 'F';
kono
parents:
diff changeset
334 Opt.Locking_Policy := 'C';
kono
parents:
diff changeset
335 goto Line_Loop_Continue;
kono
parents:
diff changeset
336
kono
parents:
diff changeset
337 -- Test for pragma Profile (GNAT_Extended_Ravenscar);
kono
parents:
diff changeset
338
kono
parents:
diff changeset
339 elsif Looking_At_Skip
kono
parents:
diff changeset
340 ("pragma Profile (GNAT_Extended_Ravenscar);")
kono
parents:
diff changeset
341 then
kono
parents:
diff changeset
342 Set_Profile_Restrictions (GNAT_Extended_Ravenscar);
kono
parents:
diff changeset
343 Opt.Task_Dispatching_Policy := 'F';
kono
parents:
diff changeset
344 Opt.Locking_Policy := 'C';
kono
parents:
diff changeset
345 goto Line_Loop_Continue;
kono
parents:
diff changeset
346
kono
parents:
diff changeset
347 -- Test for pragma Profile (GNAT_Ravenscar_EDF);
kono
parents:
diff changeset
348
kono
parents:
diff changeset
349 elsif Looking_At_Skip ("pragma Profile (GNAT_Ravenscar_EDF);") then
kono
parents:
diff changeset
350 Set_Profile_Restrictions (GNAT_Ravenscar_EDF);
kono
parents:
diff changeset
351 Opt.Task_Dispatching_Policy := 'E';
kono
parents:
diff changeset
352 Opt.Locking_Policy := 'C';
kono
parents:
diff changeset
353 goto Line_Loop_Continue;
kono
parents:
diff changeset
354
kono
parents:
diff changeset
355 -- Test for pragma Profile (Restricted);
kono
parents:
diff changeset
356
kono
parents:
diff changeset
357 elsif Looking_At_Skip ("pragma Profile (Restricted);") then
kono
parents:
diff changeset
358 Set_Profile_Restrictions (Restricted);
kono
parents:
diff changeset
359 goto Line_Loop_Continue;
kono
parents:
diff changeset
360
kono
parents:
diff changeset
361 -- Test for pragma Restrictions
kono
parents:
diff changeset
362
kono
parents:
diff changeset
363 elsif Looking_At_Skip ("pragma Restrictions (") then
kono
parents:
diff changeset
364 PR_Start := P - 1;
kono
parents:
diff changeset
365
kono
parents:
diff changeset
366 -- Boolean restrictions
kono
parents:
diff changeset
367
kono
parents:
diff changeset
368 for K in All_Boolean_Restrictions loop
kono
parents:
diff changeset
369 declare
kono
parents:
diff changeset
370 Rname : constant String := Restriction_Id'Image (K);
kono
parents:
diff changeset
371
kono
parents:
diff changeset
372 begin
kono
parents:
diff changeset
373 for J in Rname'Range loop
kono
parents:
diff changeset
374 if Fold_Upper (System_Text (P + Source_Ptr (J - 1)))
kono
parents:
diff changeset
375 /= Rname (J)
kono
parents:
diff changeset
376 then
kono
parents:
diff changeset
377 goto Rloop_Continue;
kono
parents:
diff changeset
378 end if;
kono
parents:
diff changeset
379 end loop;
kono
parents:
diff changeset
380
kono
parents:
diff changeset
381 if System_Text (P + Rname'Length) = ')' then
kono
parents:
diff changeset
382 Restrictions_On_Target.Set (K) := True;
kono
parents:
diff changeset
383 goto Line_Loop_Continue;
kono
parents:
diff changeset
384 end if;
kono
parents:
diff changeset
385 end;
kono
parents:
diff changeset
386
kono
parents:
diff changeset
387 <<Rloop_Continue>> null;
kono
parents:
diff changeset
388 end loop;
kono
parents:
diff changeset
389
kono
parents:
diff changeset
390 -- Restrictions taking integer parameter
kono
parents:
diff changeset
391
kono
parents:
diff changeset
392 Ploop : for K in Integer_Parameter_Restrictions loop
kono
parents:
diff changeset
393 declare
kono
parents:
diff changeset
394 Rname : constant String :=
kono
parents:
diff changeset
395 All_Parameter_Restrictions'Image (K);
kono
parents:
diff changeset
396
kono
parents:
diff changeset
397 V : Natural;
kono
parents:
diff changeset
398 -- Accumulates value
kono
parents:
diff changeset
399
kono
parents:
diff changeset
400 begin
kono
parents:
diff changeset
401 for J in Rname'Range loop
kono
parents:
diff changeset
402 if Fold_Upper (System_Text (P + Source_Ptr (J - 1)))
kono
parents:
diff changeset
403 /= Rname (J)
kono
parents:
diff changeset
404 then
kono
parents:
diff changeset
405 goto Ploop_Continue;
kono
parents:
diff changeset
406 end if;
kono
parents:
diff changeset
407 end loop;
kono
parents:
diff changeset
408
kono
parents:
diff changeset
409 if System_Text (P + Rname'Length .. P + Rname'Length + 3) =
kono
parents:
diff changeset
410 " => "
kono
parents:
diff changeset
411 then
kono
parents:
diff changeset
412 P := P + Rname'Length + 4;
kono
parents:
diff changeset
413
kono
parents:
diff changeset
414 V := 0;
kono
parents:
diff changeset
415 loop
kono
parents:
diff changeset
416 if System_Text (P) in '0' .. '9' then
kono
parents:
diff changeset
417 declare
kono
parents:
diff changeset
418 pragma Unsuppress (Overflow_Check);
kono
parents:
diff changeset
419
kono
parents:
diff changeset
420 begin
kono
parents:
diff changeset
421 -- Accumulate next digit
kono
parents:
diff changeset
422
kono
parents:
diff changeset
423 V := 10 * V +
kono
parents:
diff changeset
424 Character'Pos (System_Text (P)) -
kono
parents:
diff changeset
425 Character'Pos ('0');
kono
parents:
diff changeset
426
kono
parents:
diff changeset
427 exception
kono
parents:
diff changeset
428 -- On overflow, we just ignore the pragma since
kono
parents:
diff changeset
429 -- that is the standard handling in this case.
kono
parents:
diff changeset
430
kono
parents:
diff changeset
431 when Constraint_Error =>
kono
parents:
diff changeset
432 goto Line_Loop_Continue;
kono
parents:
diff changeset
433 end;
kono
parents:
diff changeset
434
kono
parents:
diff changeset
435 elsif System_Text (P) = '_' then
kono
parents:
diff changeset
436 null;
kono
parents:
diff changeset
437
kono
parents:
diff changeset
438 elsif System_Text (P) = ')' then
kono
parents:
diff changeset
439 Restrictions_On_Target.Value (K) := V;
kono
parents:
diff changeset
440 Restrictions_On_Target.Set (K) := True;
kono
parents:
diff changeset
441 goto Line_Loop_Continue;
kono
parents:
diff changeset
442
kono
parents:
diff changeset
443 else
kono
parents:
diff changeset
444 exit Ploop;
kono
parents:
diff changeset
445 end if;
kono
parents:
diff changeset
446
kono
parents:
diff changeset
447 P := P + 1;
kono
parents:
diff changeset
448 end loop;
kono
parents:
diff changeset
449
kono
parents:
diff changeset
450 else
kono
parents:
diff changeset
451 exit Ploop;
kono
parents:
diff changeset
452 end if;
kono
parents:
diff changeset
453 end;
kono
parents:
diff changeset
454
kono
parents:
diff changeset
455 <<Ploop_Continue>> null;
kono
parents:
diff changeset
456 end loop Ploop;
kono
parents:
diff changeset
457
kono
parents:
diff changeset
458 -- No_Dependence case
kono
parents:
diff changeset
459
kono
parents:
diff changeset
460 if Looking_At_Skip ("No_Dependence => ") then
kono
parents:
diff changeset
461 -- Skip this processing (and simply ignore No_Dependence lines)
kono
parents:
diff changeset
462 -- if caller did not supply the three subprograms we need to
kono
parents:
diff changeset
463 -- process these lines.
kono
parents:
diff changeset
464
kono
parents:
diff changeset
465 if Make_Id = null then
kono
parents:
diff changeset
466 goto Line_Loop_Continue;
kono
parents:
diff changeset
467 end if;
kono
parents:
diff changeset
468
kono
parents:
diff changeset
469 -- We have scanned out "pragma Restrictions (No_Dependence =>"
kono
parents:
diff changeset
470
kono
parents:
diff changeset
471 declare
kono
parents:
diff changeset
472 Unit : Node_Id;
kono
parents:
diff changeset
473 Id : Node_Id;
kono
parents:
diff changeset
474 Start : Source_Ptr;
kono
parents:
diff changeset
475
kono
parents:
diff changeset
476 begin
kono
parents:
diff changeset
477 Unit := Empty;
kono
parents:
diff changeset
478
kono
parents:
diff changeset
479 -- Loop through components of name, building up Unit
kono
parents:
diff changeset
480
kono
parents:
diff changeset
481 loop
kono
parents:
diff changeset
482 Start := P;
kono
parents:
diff changeset
483 while System_Text (P) /= '.'
kono
parents:
diff changeset
484 and then
kono
parents:
diff changeset
485 System_Text (P) /= ')'
kono
parents:
diff changeset
486 loop
kono
parents:
diff changeset
487 P := P + 1;
kono
parents:
diff changeset
488 end loop;
kono
parents:
diff changeset
489
kono
parents:
diff changeset
490 Id := Make_Id (System_Text (Start .. P - 1));
kono
parents:
diff changeset
491
kono
parents:
diff changeset
492 -- If first name, just capture the identifier
kono
parents:
diff changeset
493
kono
parents:
diff changeset
494 if Unit = Empty then
kono
parents:
diff changeset
495 Unit := Id;
kono
parents:
diff changeset
496 else
kono
parents:
diff changeset
497 Unit := Make_SC (Unit, Id);
kono
parents:
diff changeset
498 end if;
kono
parents:
diff changeset
499
kono
parents:
diff changeset
500 exit when System_Text (P) = ')';
kono
parents:
diff changeset
501 P := P + 1;
kono
parents:
diff changeset
502 end loop;
kono
parents:
diff changeset
503
kono
parents:
diff changeset
504 Set_NOD (Unit);
kono
parents:
diff changeset
505 goto Line_Loop_Continue;
kono
parents:
diff changeset
506 end;
kono
parents:
diff changeset
507
kono
parents:
diff changeset
508 -- No_Specification_Of_Aspect case
kono
parents:
diff changeset
509
kono
parents:
diff changeset
510 elsif Looking_At_Skip ("No_Specification_Of_Aspect => ") then
kono
parents:
diff changeset
511 -- Skip this processing (and simply ignore the pragma), if
kono
parents:
diff changeset
512 -- caller did not supply the subprogram we need to process
kono
parents:
diff changeset
513 -- such lines.
kono
parents:
diff changeset
514
kono
parents:
diff changeset
515 if Set_NSA = null then
kono
parents:
diff changeset
516 goto Line_Loop_Continue;
kono
parents:
diff changeset
517 end if;
kono
parents:
diff changeset
518
kono
parents:
diff changeset
519 -- We have scanned
kono
parents:
diff changeset
520 -- "pragma Restrictions (No_Specification_Of_Aspect =>"
kono
parents:
diff changeset
521
kono
parents:
diff changeset
522 Collect_Name;
kono
parents:
diff changeset
523
kono
parents:
diff changeset
524 if System_Text (P) /= ')' then
kono
parents:
diff changeset
525 goto Bad_Restrictions_Pragma;
kono
parents:
diff changeset
526
kono
parents:
diff changeset
527 else
kono
parents:
diff changeset
528 Set_NSA (Name_Find, OK);
kono
parents:
diff changeset
529
kono
parents:
diff changeset
530 if OK then
kono
parents:
diff changeset
531 goto Line_Loop_Continue;
kono
parents:
diff changeset
532 else
kono
parents:
diff changeset
533 goto Bad_Restrictions_Pragma;
kono
parents:
diff changeset
534 end if;
kono
parents:
diff changeset
535 end if;
kono
parents:
diff changeset
536
kono
parents:
diff changeset
537 -- No_Use_Of_Attribute case
kono
parents:
diff changeset
538
kono
parents:
diff changeset
539 elsif Looking_At_Skip ("No_Use_Of_Attribute => ") then
kono
parents:
diff changeset
540 -- Skip this processing (and simply ignore No_Use_Of_Attribute
kono
parents:
diff changeset
541 -- lines) if caller did not supply the subprogram we need to
kono
parents:
diff changeset
542 -- process such lines.
kono
parents:
diff changeset
543
kono
parents:
diff changeset
544 if Set_NUA = null then
kono
parents:
diff changeset
545 goto Line_Loop_Continue;
kono
parents:
diff changeset
546 end if;
kono
parents:
diff changeset
547
kono
parents:
diff changeset
548 -- We have scanned
kono
parents:
diff changeset
549 -- "pragma Restrictions (No_Use_Of_Attribute =>"
kono
parents:
diff changeset
550
kono
parents:
diff changeset
551 Collect_Name;
kono
parents:
diff changeset
552
kono
parents:
diff changeset
553 if System_Text (P) /= ')' then
kono
parents:
diff changeset
554 goto Bad_Restrictions_Pragma;
kono
parents:
diff changeset
555
kono
parents:
diff changeset
556 else
kono
parents:
diff changeset
557 Set_NUA (Name_Find, OK);
kono
parents:
diff changeset
558
kono
parents:
diff changeset
559 if OK then
kono
parents:
diff changeset
560 goto Line_Loop_Continue;
kono
parents:
diff changeset
561 else
kono
parents:
diff changeset
562 goto Bad_Restrictions_Pragma;
kono
parents:
diff changeset
563 end if;
kono
parents:
diff changeset
564 end if;
kono
parents:
diff changeset
565
kono
parents:
diff changeset
566 -- No_Use_Of_Pragma case
kono
parents:
diff changeset
567
kono
parents:
diff changeset
568 elsif Looking_At_Skip ("No_Use_Of_Pragma => ") then
kono
parents:
diff changeset
569 -- Skip this processing (and simply ignore No_Use_Of_Pragma
kono
parents:
diff changeset
570 -- lines) if caller did not supply the subprogram we need to
kono
parents:
diff changeset
571 -- process such lines.
kono
parents:
diff changeset
572
kono
parents:
diff changeset
573 if Set_NUP = null then
kono
parents:
diff changeset
574 goto Line_Loop_Continue;
kono
parents:
diff changeset
575 end if;
kono
parents:
diff changeset
576
kono
parents:
diff changeset
577 -- We have scanned
kono
parents:
diff changeset
578 -- "pragma Restrictions (No_Use_Of_Pragma =>"
kono
parents:
diff changeset
579
kono
parents:
diff changeset
580 Collect_Name;
kono
parents:
diff changeset
581
kono
parents:
diff changeset
582 if System_Text (P) /= ')' then
kono
parents:
diff changeset
583 goto Bad_Restrictions_Pragma;
kono
parents:
diff changeset
584
kono
parents:
diff changeset
585 else
kono
parents:
diff changeset
586 Set_NUP (Name_Find, OK);
kono
parents:
diff changeset
587
kono
parents:
diff changeset
588 if OK then
kono
parents:
diff changeset
589 goto Line_Loop_Continue;
kono
parents:
diff changeset
590 else
kono
parents:
diff changeset
591 goto Bad_Restrictions_Pragma;
kono
parents:
diff changeset
592 end if;
kono
parents:
diff changeset
593 end if;
kono
parents:
diff changeset
594 end if;
kono
parents:
diff changeset
595
kono
parents:
diff changeset
596 -- Here if unrecognizable restrictions pragma form
kono
parents:
diff changeset
597
kono
parents:
diff changeset
598 <<Bad_Restrictions_Pragma>>
kono
parents:
diff changeset
599
kono
parents:
diff changeset
600 Set_Standard_Error;
kono
parents:
diff changeset
601 Write_Line
kono
parents:
diff changeset
602 ("fatal error: system.ads is incorrectly formatted");
kono
parents:
diff changeset
603 Write_Str ("unrecognized or incorrect restrictions pragma: ");
kono
parents:
diff changeset
604
kono
parents:
diff changeset
605 P := PR_Start;
kono
parents:
diff changeset
606 loop
kono
parents:
diff changeset
607 exit when System_Text (P) = ASCII.LF;
kono
parents:
diff changeset
608 Write_Char (System_Text (P));
kono
parents:
diff changeset
609 exit when System_Text (P) = ')';
kono
parents:
diff changeset
610 P := P + 1;
kono
parents:
diff changeset
611 end loop;
kono
parents:
diff changeset
612
kono
parents:
diff changeset
613 Write_Eol;
kono
parents:
diff changeset
614 Fatal := True;
kono
parents:
diff changeset
615 Set_Standard_Output;
kono
parents:
diff changeset
616
kono
parents:
diff changeset
617 -- Test for pragma Detect_Blocking;
kono
parents:
diff changeset
618
kono
parents:
diff changeset
619 elsif Looking_At_Skip ("pragma Detect_Blocking;") then
kono
parents:
diff changeset
620 Opt.Detect_Blocking := True;
kono
parents:
diff changeset
621 goto Line_Loop_Continue;
kono
parents:
diff changeset
622
kono
parents:
diff changeset
623 -- Discard_Names
kono
parents:
diff changeset
624
kono
parents:
diff changeset
625 elsif Looking_At_Skip ("pragma Discard_Names;") then
kono
parents:
diff changeset
626 Opt.Global_Discard_Names := True;
kono
parents:
diff changeset
627 goto Line_Loop_Continue;
kono
parents:
diff changeset
628
kono
parents:
diff changeset
629 -- Locking Policy
kono
parents:
diff changeset
630
kono
parents:
diff changeset
631 elsif Looking_At_Skip ("pragma Locking_Policy (") then
kono
parents:
diff changeset
632 Opt.Locking_Policy := System_Text (P);
kono
parents:
diff changeset
633 Opt.Locking_Policy_Sloc := System_Location;
kono
parents:
diff changeset
634 goto Line_Loop_Continue;
kono
parents:
diff changeset
635
kono
parents:
diff changeset
636 -- Normalize_Scalars
kono
parents:
diff changeset
637
kono
parents:
diff changeset
638 elsif Looking_At_Skip ("pragma Normalize_Scalars;") then
kono
parents:
diff changeset
639 Opt.Normalize_Scalars := True;
kono
parents:
diff changeset
640 Opt.Init_Or_Norm_Scalars := True;
kono
parents:
diff changeset
641 goto Line_Loop_Continue;
kono
parents:
diff changeset
642
kono
parents:
diff changeset
643 -- Partition_Elaboration_Policy
kono
parents:
diff changeset
644
kono
parents:
diff changeset
645 elsif Looking_At_Skip ("pragma Partition_Elaboration_Policy (") then
kono
parents:
diff changeset
646 Opt.Partition_Elaboration_Policy := System_Text (P);
kono
parents:
diff changeset
647 Opt.Partition_Elaboration_Policy_Sloc := System_Location;
kono
parents:
diff changeset
648 goto Line_Loop_Continue;
kono
parents:
diff changeset
649
kono
parents:
diff changeset
650 -- Polling (On)
kono
parents:
diff changeset
651
kono
parents:
diff changeset
652 elsif Looking_At_Skip ("pragma Polling (On);") then
kono
parents:
diff changeset
653 Opt.Polling_Required := True;
kono
parents:
diff changeset
654 goto Line_Loop_Continue;
kono
parents:
diff changeset
655
kono
parents:
diff changeset
656 -- Queuing Policy
kono
parents:
diff changeset
657
kono
parents:
diff changeset
658 elsif Looking_At_Skip ("pragma Queuing_Policy (") then
kono
parents:
diff changeset
659 Opt.Queuing_Policy := System_Text (P);
kono
parents:
diff changeset
660 Opt.Queuing_Policy_Sloc := System_Location;
kono
parents:
diff changeset
661 goto Line_Loop_Continue;
kono
parents:
diff changeset
662
kono
parents:
diff changeset
663 -- Suppress_Exception_Locations
kono
parents:
diff changeset
664
kono
parents:
diff changeset
665 elsif Looking_At_Skip ("pragma Suppress_Exception_Locations;") then
kono
parents:
diff changeset
666 Opt.Exception_Locations_Suppressed := True;
kono
parents:
diff changeset
667 goto Line_Loop_Continue;
kono
parents:
diff changeset
668
kono
parents:
diff changeset
669 -- Task_Dispatching Policy
kono
parents:
diff changeset
670
kono
parents:
diff changeset
671 elsif Looking_At_Skip ("pragma Task_Dispatching_Policy (") then
kono
parents:
diff changeset
672 Opt.Task_Dispatching_Policy := System_Text (P);
kono
parents:
diff changeset
673 Opt.Task_Dispatching_Policy_Sloc := System_Location;
kono
parents:
diff changeset
674 goto Line_Loop_Continue;
kono
parents:
diff changeset
675
kono
parents:
diff changeset
676 -- No other configuration pragmas are permitted
kono
parents:
diff changeset
677
kono
parents:
diff changeset
678 elsif Looking_At ("pragma ") then
kono
parents:
diff changeset
679 -- Special exception, we allow pragma Pure (System) appearing in
kono
parents:
diff changeset
680 -- column one. This is an obsolete usage which may show up in old
kono
parents:
diff changeset
681 -- tests with an obsolete version of system.ads, so we recognize
kono
parents:
diff changeset
682 -- and ignore it to make life easier in handling such tests.
kono
parents:
diff changeset
683
kono
parents:
diff changeset
684 if Looking_At_Skip ("pragma Pure (System);") then
kono
parents:
diff changeset
685 goto Line_Loop_Continue;
kono
parents:
diff changeset
686 end if;
kono
parents:
diff changeset
687
kono
parents:
diff changeset
688 Set_Standard_Error;
kono
parents:
diff changeset
689 Write_Line ("unrecognized line in system.ads: ");
kono
parents:
diff changeset
690
kono
parents:
diff changeset
691 while System_Text (P) /= ')'
kono
parents:
diff changeset
692 and then System_Text (P) /= ASCII.LF
kono
parents:
diff changeset
693 loop
kono
parents:
diff changeset
694 Write_Char (System_Text (P));
kono
parents:
diff changeset
695 P := P + 1;
kono
parents:
diff changeset
696 end loop;
kono
parents:
diff changeset
697
kono
parents:
diff changeset
698 Write_Eol;
kono
parents:
diff changeset
699 Set_Standard_Output;
kono
parents:
diff changeset
700 Fatal := True;
kono
parents:
diff changeset
701
kono
parents:
diff changeset
702 -- See if we have a Run_Time_Name
kono
parents:
diff changeset
703
kono
parents:
diff changeset
704 elsif Looking_At_Skip
kono
parents:
diff changeset
705 (" Run_Time_Name : constant String := """)
kono
parents:
diff changeset
706 then
kono
parents:
diff changeset
707 Name_Len := 0;
kono
parents:
diff changeset
708 while System_Text (P) in 'A' .. 'Z'
kono
parents:
diff changeset
709 or else
kono
parents:
diff changeset
710 System_Text (P) in 'a' .. 'z'
kono
parents:
diff changeset
711 or else
kono
parents:
diff changeset
712 System_Text (P) in '0' .. '9'
kono
parents:
diff changeset
713 or else
kono
parents:
diff changeset
714 System_Text (P) = ' '
kono
parents:
diff changeset
715 or else
kono
parents:
diff changeset
716 System_Text (P) = '_'
kono
parents:
diff changeset
717 loop
kono
parents:
diff changeset
718 Add_Char_To_Name_Buffer (System_Text (P));
kono
parents:
diff changeset
719 P := P + 1;
kono
parents:
diff changeset
720 end loop;
kono
parents:
diff changeset
721
kono
parents:
diff changeset
722 if System_Text (P) /= '"'
kono
parents:
diff changeset
723 or else System_Text (P + 1) /= ';'
kono
parents:
diff changeset
724 or else (System_Text (P + 2) /= ASCII.LF
kono
parents:
diff changeset
725 and then
kono
parents:
diff changeset
726 System_Text (P + 2) /= ASCII.CR)
kono
parents:
diff changeset
727 then
kono
parents:
diff changeset
728 Set_Standard_Error;
kono
parents:
diff changeset
729 Write_Line
kono
parents:
diff changeset
730 ("incorrectly formatted Run_Time_Name in system.ads");
kono
parents:
diff changeset
731 Set_Standard_Output;
kono
parents:
diff changeset
732 Fatal := True;
kono
parents:
diff changeset
733
kono
parents:
diff changeset
734 else
kono
parents:
diff changeset
735 Run_Time_Name_On_Target := Name_Enter;
kono
parents:
diff changeset
736 end if;
kono
parents:
diff changeset
737
kono
parents:
diff changeset
738 goto Line_Loop_Continue;
kono
parents:
diff changeset
739
kono
parents:
diff changeset
740 -- See if we have an Executable_Extension
kono
parents:
diff changeset
741
kono
parents:
diff changeset
742 elsif Looking_At_Skip
kono
parents:
diff changeset
743 (" Executable_Extension : constant String := """)
kono
parents:
diff changeset
744 then
kono
parents:
diff changeset
745 Name_Len := 0;
kono
parents:
diff changeset
746 while System_Text (P) /= '"'
kono
parents:
diff changeset
747 and then System_Text (P) /= ASCII.LF
kono
parents:
diff changeset
748 loop
kono
parents:
diff changeset
749 Add_Char_To_Name_Buffer (System_Text (P));
kono
parents:
diff changeset
750 P := P + 1;
kono
parents:
diff changeset
751 end loop;
kono
parents:
diff changeset
752
kono
parents:
diff changeset
753 if System_Text (P) /= '"' or else System_Text (P + 1) /= ';' then
kono
parents:
diff changeset
754 Set_Standard_Error;
kono
parents:
diff changeset
755 Write_Line
kono
parents:
diff changeset
756 ("incorrectly formatted Executable_Extension in system.ads");
kono
parents:
diff changeset
757 Set_Standard_Output;
kono
parents:
diff changeset
758 Fatal := True;
kono
parents:
diff changeset
759
kono
parents:
diff changeset
760 else
kono
parents:
diff changeset
761 Executable_Extension_On_Target := Name_Enter;
kono
parents:
diff changeset
762 end if;
kono
parents:
diff changeset
763
kono
parents:
diff changeset
764 goto Line_Loop_Continue;
kono
parents:
diff changeset
765
kono
parents:
diff changeset
766 -- Next see if we have a configuration parameter
kono
parents:
diff changeset
767
kono
parents:
diff changeset
768 else
kono
parents:
diff changeset
769 Config_Param_Loop : for K in Targparm_Tags loop
kono
parents:
diff changeset
770 if Looking_At_Skip (" " & Targparm_Str (K).all) then
kono
parents:
diff changeset
771 if Targparm_Flags (K) then
kono
parents:
diff changeset
772 Set_Standard_Error;
kono
parents:
diff changeset
773 Write_Line
kono
parents:
diff changeset
774 ("fatal error: system.ads is incorrectly formatted");
kono
parents:
diff changeset
775 Write_Str ("duplicate line for parameter: ");
kono
parents:
diff changeset
776
kono
parents:
diff changeset
777 for J in Targparm_Str (K)'Range loop
kono
parents:
diff changeset
778 Write_Char (Targparm_Str (K).all (J));
kono
parents:
diff changeset
779 end loop;
kono
parents:
diff changeset
780
kono
parents:
diff changeset
781 Write_Eol;
kono
parents:
diff changeset
782 Set_Standard_Output;
kono
parents:
diff changeset
783 Fatal := True;
kono
parents:
diff changeset
784
kono
parents:
diff changeset
785 else
kono
parents:
diff changeset
786 Targparm_Flags (K) := True;
kono
parents:
diff changeset
787 end if;
kono
parents:
diff changeset
788
kono
parents:
diff changeset
789 while System_Text (P) /= ':'
kono
parents:
diff changeset
790 or else System_Text (P + 1) /= '='
kono
parents:
diff changeset
791 loop
kono
parents:
diff changeset
792 P := P + 1;
kono
parents:
diff changeset
793 end loop;
kono
parents:
diff changeset
794
kono
parents:
diff changeset
795 P := P + 2;
kono
parents:
diff changeset
796
kono
parents:
diff changeset
797 while System_Text (P) = ' ' loop
kono
parents:
diff changeset
798 P := P + 1;
kono
parents:
diff changeset
799 end loop;
kono
parents:
diff changeset
800
kono
parents:
diff changeset
801 Result := (System_Text (P) = 'T');
kono
parents:
diff changeset
802
kono
parents:
diff changeset
803 case K is
kono
parents:
diff changeset
804 when AAM => null;
kono
parents:
diff changeset
805 when ACR => Always_Compatible_Rep_On_Target := Result;
kono
parents:
diff changeset
806 when ASD => Atomic_Sync_Default_On_Target := Result;
kono
parents:
diff changeset
807 when BDC => Backend_Divide_Checks_On_Target := Result;
kono
parents:
diff changeset
808 when BOC => Backend_Overflow_Checks_On_Target := Result;
kono
parents:
diff changeset
809 when CLA => Command_Line_Args_On_Target := Result;
kono
parents:
diff changeset
810 when CRT => Configurable_Run_Time_On_Target := Result;
kono
parents:
diff changeset
811 when D32 => Duration_32_Bits_On_Target := Result;
kono
parents:
diff changeset
812 when DEN => Denorm_On_Target := Result;
kono
parents:
diff changeset
813 when EXS => Exit_Status_Supported_On_Target := Result;
kono
parents:
diff changeset
814 when FEL => null;
kono
parents:
diff changeset
815 when FEX => Frontend_Exceptions_On_Target := Result;
kono
parents:
diff changeset
816 when FFO => Fractional_Fixed_Ops_On_Target := Result;
kono
parents:
diff changeset
817 when MOV => Machine_Overflows_On_Target := Result;
kono
parents:
diff changeset
818 when MRN => Machine_Rounds_On_Target := Result;
kono
parents:
diff changeset
819 when PAS => Preallocated_Stacks_On_Target := Result;
kono
parents:
diff changeset
820 when SAG => Support_Aggregates_On_Target := Result;
kono
parents:
diff changeset
821 when SAP => Support_Atomic_Primitives_On_Target := Result;
kono
parents:
diff changeset
822 when SCA => Support_Composite_Assign_On_Target := Result;
kono
parents:
diff changeset
823 when SCC => Support_Composite_Compare_On_Target := Result;
kono
parents:
diff changeset
824 when SCD => Stack_Check_Default_On_Target := Result;
kono
parents:
diff changeset
825 when SCL => Stack_Check_Limits_On_Target := Result;
kono
parents:
diff changeset
826 when SCP => Stack_Check_Probes_On_Target := Result;
kono
parents:
diff changeset
827 when SLS => Support_Long_Shifts_On_Target := Result;
kono
parents:
diff changeset
828 when SSL => Suppress_Standard_Library_On_Target := Result;
kono
parents:
diff changeset
829 when SNZ => Signed_Zeros_On_Target := Result;
kono
parents:
diff changeset
830 when UAM => Use_Ada_Main_Program_Name_On_Target := Result;
kono
parents:
diff changeset
831 when ZCX => ZCX_By_Default_On_Target := Result;
kono
parents:
diff changeset
832
kono
parents:
diff changeset
833 goto Line_Loop_Continue;
kono
parents:
diff changeset
834 end case;
kono
parents:
diff changeset
835
kono
parents:
diff changeset
836 -- Here we are seeing a parameter we do not understand. We
kono
parents:
diff changeset
837 -- simply ignore this (will happen when an old compiler is
kono
parents:
diff changeset
838 -- used to compile a newer version of GNAT which does not
kono
parents:
diff changeset
839 -- support the parameter).
kono
parents:
diff changeset
840 end if;
kono
parents:
diff changeset
841 end loop Config_Param_Loop;
kono
parents:
diff changeset
842 end if;
kono
parents:
diff changeset
843
kono
parents:
diff changeset
844 -- Here after processing one line of System spec
kono
parents:
diff changeset
845
kono
parents:
diff changeset
846 <<Line_Loop_Continue>>
kono
parents:
diff changeset
847
kono
parents:
diff changeset
848 while P < Source_Last
kono
parents:
diff changeset
849 and then System_Text (P) /= CR
kono
parents:
diff changeset
850 and then System_Text (P) /= LF
kono
parents:
diff changeset
851 loop
kono
parents:
diff changeset
852 P := P + 1;
kono
parents:
diff changeset
853 end loop;
kono
parents:
diff changeset
854
kono
parents:
diff changeset
855 while P < Source_Last
kono
parents:
diff changeset
856 and then (System_Text (P) = CR
kono
parents:
diff changeset
857 or else System_Text (P) = LF)
kono
parents:
diff changeset
858 loop
kono
parents:
diff changeset
859 P := P + 1;
kono
parents:
diff changeset
860 end loop;
kono
parents:
diff changeset
861
kono
parents:
diff changeset
862 if P >= Source_Last then
kono
parents:
diff changeset
863 Set_Standard_Error;
kono
parents:
diff changeset
864 Write_Line ("fatal error, system.ads not formatted correctly");
kono
parents:
diff changeset
865 Write_Line ("unexpected end of file");
kono
parents:
diff changeset
866 Set_Standard_Output;
kono
parents:
diff changeset
867 raise Unrecoverable_Error;
kono
parents:
diff changeset
868 end if;
kono
parents:
diff changeset
869 end loop;
kono
parents:
diff changeset
870
kono
parents:
diff changeset
871 if Fatal then
kono
parents:
diff changeset
872 raise Unrecoverable_Error;
kono
parents:
diff changeset
873 end if;
kono
parents:
diff changeset
874 end Get_Target_Parameters;
kono
parents:
diff changeset
875
kono
parents:
diff changeset
876 ------------------------------
kono
parents:
diff changeset
877 -- Set_Profile_Restrictions --
kono
parents:
diff changeset
878 ------------------------------
kono
parents:
diff changeset
879
kono
parents:
diff changeset
880 procedure Set_Profile_Restrictions (P : Profile_Name) is
kono
parents:
diff changeset
881 R : Restriction_Flags renames Profile_Info (P).Set;
kono
parents:
diff changeset
882 V : Restriction_Values renames Profile_Info (P).Value;
kono
parents:
diff changeset
883 begin
kono
parents:
diff changeset
884 for J in R'Range loop
kono
parents:
diff changeset
885 if R (J) then
kono
parents:
diff changeset
886 Restrictions_On_Target.Set (J) := True;
kono
parents:
diff changeset
887
kono
parents:
diff changeset
888 if J in All_Parameter_Restrictions then
kono
parents:
diff changeset
889 Restrictions_On_Target.Value (J) := V (J);
kono
parents:
diff changeset
890 end if;
kono
parents:
diff changeset
891 end if;
kono
parents:
diff changeset
892 end loop;
kono
parents:
diff changeset
893 end Set_Profile_Restrictions;
kono
parents:
diff changeset
894
kono
parents:
diff changeset
895 end Targparm;