tree checksum vpatch file split hunks
all signers: ave1
antecedents: zfp_1_examples zfp_3_platform zfp_genesis
press order:
zfp_genesis | ave1 |
zfp_1_examples | ave1 |
patch:
(0 . 0)(1 . 13)
5 PROJECT_FILE=gnat_runtime.gpr
6
7 all: adalib/libgnat.a adalib/start.o
8
9 adalib/start.o:adainclude/start.S
10 as -c $< -o $@
11
12 adalib/libgnat.a:adainclude/*.ads
13 gnatmake -P $(PROJECT_FILE)
14
15 clean:
16 gprclean -P $(PROJECT_FILE)
17 -rm -Rf adalib/start.o
- 64ADE4F4343CEAD30B2019D7BBCFFC66B461DE9ABDEF5AA744F674B2DA2C433D54A5678C11EF2D48522727C57AC407119109972B0C6AFBF915A748B2B9D9E23C(13 . 8)(13 . 12)- C8E02554AEE5416547ABB98155180F184AA11184825A76E1D119D291ACCBA55E33565DC3868BF42198C880A0CCA3CF6B8B329AD9703EB01C0781D5049AC06A44
22 ------------------------------------------------------------------------------
23
24 -- Version for use with C run time
25 with System.Syscall; use System.Syscall;
26
27 package body Ada.Text_IO is
28 -- STDIN : constant := 0;
29 STDOUT : constant := 1;
30 -- STDERR : constant := 2;
31
32 --------------
33 -- New_Line --
(30 . 20)(34 . 16)
35 ---------
36
37 procedure Put (Item : Character) is
38 function Putchar (C : Integer) return Integer;
39 pragma Import (C, Putchar);
40
41 Ignore : Integer;
42
43 begin
44 Ignore := Putchar (Character'Pos (Item));
45 Put ("" & Item);
46 end Put;
47
48 procedure Put (Item : String) is
49 Ignore : Int;
50 E : ErrorCode;
51 begin
52 for J in Item'Range loop
53 Put (Item (J));
54 end loop;
55 Ignore := Write (STDOUT, Item, E);
56 pragma Unused (E);
57 end Put;
58
59 --------------
(12 . 34)(12 . 27)
64 ------------------------------------------------------------------------------
65 ------------------------------------------------------------------------------
66
67 with Ada.Text_IO; use Ada.Text_IO;
68 with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
69 with Ada.Text_IO; use Ada.Text_IO;
70 with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
71 with System.Storage_Elements; use System.Storage_Elements;
72 with System.Syscall; use System.Syscall;
73
74 procedure Last_Chance_Handler
75 (Msg : System.Address; Line : Integer)
76 is
77 procedure Exit_Now(status: Integer);
78 pragma Import
79 (Convention => C,
80 Entity => Exit_Now,
81 External_Name => "exit");
82
83 function Peek (Addr : System.Address) return Character
84 is
85 C : Character with Address => Addr;
86 procedure Last_Chance_Handler (Msg : System.Address; Line : Integer) is
87 function Peek (Addr : System.Address) return Character is
88 C : Character with
89 Address => Addr;
90 begin
91 return C;
92 end Peek;
93 end Peek;
94 A : System.Address := Msg;
95 begin
96 Put ("GNAT Exception!:");
97 Put (Line);
98 Put (Line);
99 Put (":");
100 while Peek(A) /= ASCII.NUL loop
101 Put (Peek(A));
102 while Peek (A) /= ASCII.NUL loop
103 Put (Peek (A));
104 A := A + 1;
105 end loop;
106 New_Line;
107 Exit_Now(-1);
108 Sys_Exit (1);
109 end Last_Chance_Handler;
- 3D95822D87E16F7A8B8997642E35B7BC8B1F4A2B7CF82C39F27B507D62BD243FF50F9C24D6CE01873254B76A6AD93A26258B96FB1BE471E13EB9A7E5322A31AF(14 . 6)(14 . 5)
114
115 with System;
116
117 procedure Last_Chance_Handler
118 (Msg : System.Address; Line : Integer);
119 procedure Last_Chance_Handler (Msg : System.Address; Line : Integer);
120 pragma Export (C, Last_Chance_Handler, "__gnat_last_chance_handler");
- D72AA05A37C27031CD0E6E91F2F2D7070EF55916103B1168348BEF7D7227A975C2C981D549317A691BB9E42EAE9435204C83EFBEF3DAE547963028A7CE43CB0A(28 . 9)(28 . 9)
125 procedure Check_Standard_Allocator is
126 begin
127 if not Elaboration_In_Progress then
128 raise Program_Error with
129 "standard allocator after elaboration is complete is not allowed "
130 & "(No_Standard_Allocators_After_Elaboration restriction active)";
131 raise Program_Error;-- with
132 --"standard allocator after elaboration is complete is not allowed "
133 --& "(No_Standard_Allocators_After_Elaboration restriction active)";
134 end if;
135 end Check_Standard_Allocator;
136
-(0 . 0)(1 . 130)
141 ------------------------------------------------------------------------------
142 -- --
143 -- GNAT COMPILER COMPONENTS --
144 -- --
145 -- S Y S T E M . M A C H I N E _ C O D E --
146 -- --
147 -- S p e c --
148 -- --
149 -- Copyright (C) 1992-2011, Free Software Foundation, Inc. --
150 -- --
151 -- GNAT is free software; you can redistribute it and/or modify it under --
152 -- terms of the GNU General Public License as published by the Free Soft- --
153 -- ware Foundation; either version 3, or (at your option) any later ver- --
154 -- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
155 -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
156 -- or FITNESS FOR A PARTICULAR PURPOSE. --
157 -- --
158 -- --
159 -- --
160 -- --
161 -- --
162 -- You should have received a copy of the GNU General Public License and --
163 -- a copy of the GCC Runtime Library Exception along with this program; --
164 -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
165 -- <http://www.gnu.org/licenses/>. --
166 -- --
167 -- GNAT was originally developed by the GNAT team at New York University. --
168 -- Extensive contributions were provided by Ada Core Technologies Inc. --
169 -- --
170 ------------------------------------------------------------------------------
171
172 -- This package provides machine code support, both for intrinsic machine
173 -- operations, and also for machine code statements. See GNAT documentation
174 -- for full details.
175
176 package System.Machine_Code is
177 pragma Pure;
178
179 -- All identifiers in this unit are implementation defined
180
181 pragma Implementation_Defined;
182
183 type Asm_Input_Operand is private;
184 type Asm_Output_Operand is private;
185 -- These types are never used directly, they are declared only so that
186 -- the calls to Asm are type correct according to Ada semantic rules.
187
188 No_Input_Operands : constant Asm_Input_Operand;
189 No_Output_Operands : constant Asm_Output_Operand;
190
191 type Asm_Input_Operand_List is
192 array (Integer range <>) of Asm_Input_Operand;
193
194 type Asm_Output_Operand_List is
195 array (Integer range <>) of Asm_Output_Operand;
196
197 type Asm_Insn is private;
198 -- This type is not used directly. It is declared only so that the
199 -- aggregates used in code statements are type correct by Ada rules.
200
201 procedure Asm
202 (Template : String;
203 Outputs : Asm_Output_Operand_List;
204 Inputs : Asm_Input_Operand_List;
205 Clobber : String := "";
206 Volatile : Boolean := False);
207
208 procedure Asm
209 (Template : String;
210 Outputs : Asm_Output_Operand := No_Output_Operands;
211 Inputs : Asm_Input_Operand_List;
212 Clobber : String := "";
213 Volatile : Boolean := False);
214
215 procedure Asm
216 (Template : String;
217 Outputs : Asm_Output_Operand_List;
218 Inputs : Asm_Input_Operand := No_Input_Operands;
219 Clobber : String := "";
220 Volatile : Boolean := False);
221
222 procedure Asm
223 (Template : String;
224 Outputs : Asm_Output_Operand := No_Output_Operands;
225 Inputs : Asm_Input_Operand := No_Input_Operands;
226 Clobber : String := "";
227 Volatile : Boolean := False);
228
229 function Asm
230 (Template : String;
231 Outputs : Asm_Output_Operand_List;
232 Inputs : Asm_Input_Operand_List;
233 Clobber : String := "";
234 Volatile : Boolean := False) return Asm_Insn;
235
236 function Asm
237 (Template : String;
238 Outputs : Asm_Output_Operand := No_Output_Operands;
239 Inputs : Asm_Input_Operand_List;
240 Clobber : String := "";
241 Volatile : Boolean := False) return Asm_Insn;
242
243 function Asm
244 (Template : String;
245 Outputs : Asm_Output_Operand_List;
246 Inputs : Asm_Input_Operand := No_Input_Operands;
247 Clobber : String := "";
248 Volatile : Boolean := False) return Asm_Insn;
249
250 function Asm
251 (Template : String;
252 Outputs : Asm_Output_Operand := No_Output_Operands;
253 Inputs : Asm_Input_Operand := No_Input_Operands;
254 Clobber : String := "";
255 Volatile : Boolean := False) return Asm_Insn;
256
257 pragma Import (Intrinsic, Asm);
258
259 private
260
261 type Asm_Input_Operand is new Integer;
262 type Asm_Output_Operand is new Integer;
263 type Asm_Insn is new Integer;
264 -- All three of these types are dummy types, to meet the requirements of
265 -- type consistency. No values of these types are ever referenced.
266
267 No_Input_Operands : constant Asm_Input_Operand := 0;
268 No_Output_Operands : constant Asm_Output_Operand := 0;
269
270 end System.Machine_Code;
-(0 . 0)(1 . 74)
275 with System.Machine_Code; use System.Machine_Code;
276
277 package body System.Syscall is
278 SYSCALL_WRITE : constant := 1;
279 SYSCALL_READ : constant := 0;
280 -- SYSCALL_EXIT : constant := 60;
281
282 function Write (fd : in Int; S : in String; E : out ErrorCode) return Int is
283 type byte is mod 2**8;
284 B : array (S'Range) of byte;
285 R : Int := 0;
286 begin
287 for I in S'Range loop
288 B (I) := Character'Pos (S (I));
289 end loop;
290 Asm
291 ("syscall",
292 Outputs => (Int'Asm_Output ("=a", R)),
293 Inputs =>
294 (Int'Asm_Input ("a", SYSCALL_WRITE),
295 Int'Asm_Input ("D", fd),
296 System.Address'Asm_Input ("S", B'Address),
297 Int'Asm_Input ("d", B'Length)),
298 Volatile => True);
299 if R < 0 and R >= -(2**12) then
300 E := ErrorCode'Val (-R);
301 R := -1;
302 else
303 E := OK;
304 end if;
305 return R;
306 end Write;
307
308 function Read (fd : in Int; s : out String; E : out ErrorCode) return Int is
309 type byte is mod 2**8;
310 B : array (S'Range) of byte;
311 R : Int := 0;
312 begin
313 Asm
314 ("syscall",
315 Outputs => (Int'Asm_Output ("=a", R)),
316 Inputs =>
317 (Int'Asm_Input ("a", SYSCALL_READ),
318 Int'Asm_Input ("D", fd),
319 System.Address'Asm_Input ("S", B'Address),
320 Int'Asm_Input ("d", B'Length)));
321 for I in S'Range loop
322 S (I) := Character'Val (B (I));
323 end loop;
324 if R < 0 and R >= -(2**12) then
325 E := ErrorCode'Val (-R);
326 R := -1;
327 else
328 E := OK;
329 end if;
330 return R;
331 end Read;
332
333 procedure Sys_Exit (C : in Integer) is
334 begin
335 Asm
336 ("mov $60, %%rax" &
337 ASCII.LF &
338 ASCII.HT & -- EXIT
339 "mov %0, %%rdi" &
340 ASCII.LF &
341 ASCII.HT & -- CODE
342 "syscall",
343 Inputs => (Int'Asm_Input ("g", Int (C))),
344 Clobber => "rax, rdi",
345 Volatile => True);
346 raise Program_Error;
347 end Sys_Exit;
348 end System.Syscall;
-(0 . 0)(1 . 17)
353 package System.Syscall is
354 -- All interaction with system calls use 4 64bit registers
355 -- These registers are interpreted as integers or pointers
356 type Int is range -2**63 .. (2**63 - 1);
357 -- The return code will be an integer
358 -- On error, an errocode is returned, values are between 0 and 4096
359 type ErrorCode is range 0 .. 2**12;
360
361 OK : constant ErrorCode := 0;
362
363 function Write (fd : in Int; S : in String; E : out ErrorCode) return Int;
364 function Read (fd : in Int; S : out String; E : out ErrorCode) return Int;
365
366 procedure Sys_Exit (C : in Integer) with
367 No_Return;
368
369 end System.Syscall;
-(0 . 0)(1 . 34)
374 /* _start is the default entry point */
375 .global _start
376 .global __argc
377 .global __argv
378
379 /* two 64 bit / 8 bytes globals to store the argc number and argv pointer */
380 .bss
381 .align 8
382 .type __argc, @object
383 .size __argc, 8
384 __argc:
385 .zero 8
386 .type __argv, @object
387 .size __argv, 8
388 __argv:
389 .zero 8
390
391 .text
392
393 _start:
394 /* store the arguments */
395 mov (%rsp), %rdi
396 mov %rdi, __argc
397 mov 8(%rsp), %rdi
398 mov %rdi, __argv
399
400 /* call the main generated by gnatbind */
401 call main
402
403 /* exit syscall, returncode is 0. */
404 _exit:
405 mov $60, %rax
406 mov $0, %rdi
407 syscall
-(0 . 0)(1 . 10)
412 PROJECT_FILE=gnat_runtime.gpr
413
414 all: bin/hello
415
416 bin/hello:helloworld/hello.adb ../adalib/libgnat.a ../adalib/start.o
417 gprbuild --RTS=..
418
419 clean:
420 gprclean -P $(PROJECT_FILE)
421 -rm -Rf adalib/start.o
- 6FEF4EF76D4582051CE0717BD229C1E0BD09DC0A624786D3B73089592499B733EEB9C75B9C57E0669FD3C14F4FAB0F44D6ECF436635BD2433527CEBA5528F7D4(28 . 6)(28 . 7)
426 Put(I);
427 New_Line;
428 Put(A(I));
429 New_Line;
430 I := I + 1;
431 if I > 10 then
432 exit;
- 534D9E5E0760D171256E721E59C6D0EB9EE0ED88518B60E661E048E45F3168AAAB9A06D6BEDB6EA332FF84686F0F9A47078F7ADBB9F32F5F392E2959484F4D4D(15 . 7)(15 . 7)
437
438 for Object_Dir use "obj";
439
440 for Languages use ("Ada", "C");
441 for Languages use ("Ada");
442 for Source_Dirs use ("helloworld", "constraint");
443 for Exec_Dir use "bin";
444 for Main use ("helloworld/hello.adb", "constraint/constraint.adb");
- 5225E9986FC2B427C285FBB867CE8DC881F0015F82506CA31E94686C31090F8913DD83321F9839143128873A2DCDA7DD8E7D19D676A42AF1C0CE979C8195C22C(83 . 3)(83 . 4)
449 pragma Discard_Names;
450 pragma Restrictions (No_Enumeration_Maps);
451 pragma Restrictions (No_Exception_Propagation);
452 pragma Restrictions (No_Exception_Handlers);
- 0A4FAB6B53946CB27CD57AE30DF5F67B96BF6AB5AD7572824D8B4C6B5430F2808863DF330E1B10D41F509172841BBFD6711C7EE0B7DDC8CE5AD7B2BCE423C383(34 . 5)(34 . 13)
457 "-ffunction-sections",
458 "-fdata-sections");
459 end Compiler;
460
461 package Install is
462 for Sources_Subdir use "adainclude";
463 for Ali_Subdir use "adalib";
464 for Lib_Subdir use "adalib";
465 for Required_Artifacts (".") use ("runtime.xml");
466 for Install_Project use "false";
467 end Install;
468
469 end Gnat_Runtime;
- EC0DCB82D3E2D3C58C7CAD6F920DD0EA8BD6BAABF69DFCEA2A4B95ECCB005E51998C48639C5CB1589E99E0582AAA5613837F00E75563E1B6CD67E9FD92C7026D(1 . 2)(1 . 3)
474 535595 zfp_genesis ave1 a minimal gnat runtime library
475 535611 zfp_1_examples ave1 two examples for the minimal runtime
476 535612 zfp_2_noc ave1 zfp no dependency on the C library
-(0 . 0)(1 . 21)
481 <?xml version="1.0" ?>
482
483 <gprconfig>
484 <configuration>
485 <config>
486 package Linker is
487 for Required_Switches use Linker'Required_Switches &
488 ("${RUNTIME_DIR(ada)}/adalib/libgnat.a") &
489 ("-nostdlib", "-nodefaultlibs", "-lgcc");
490
491 for Required_Switches use Linker'Required_Switches &
492 ("${RUNTIME_DIR(ada)}/adalib/start.o");
493 end Linker;
494
495 package Binder is
496 for Required_Switches ("Ada") use Binder'Required_Switches ("Ada") &
497 ("-nostdlib") ;
498 end Binder;
499 </config>
500 </configuration>
501 </gprconfig>