For v2003.06.01 $Revision: 1.22 $ ------------------------------------------------------------------------------- This is the Target Deployment Port for UNIX/Linux native GNAT. - For Instructions on configuring this TDP, please refer to the 'README.GNAT' node. ------------------------------------------------------------------------------- Support: ------- Language : Ada - Ada83 Features : Component Testing - Code Coverage Tested Against: ------------ Host Machine : Sun Solaris 2.8 - Linux RedHat 7.2 Compiler : GNAT Compiler 3.11p - GNAT Compiler 3.13p Linker : GNAT Make Program 3.11p - GNAT Make Program 3.13p Debugger : GDB gnat.3.11p - GDB gnat.3.13p OS : Native Target : Native ada o x ada o x -gnat83 Does not in fact compile the source file. Runs attolchop to generate appropriately named unit(s) in target INTDIR. Saves '$cflags' (compilation flags) and '$Includes' (library search list) for later use in effective compilations (by gnatmake) in atl_link. sub atl_cc($$$$\@\@) { my ( $lang,$src,$out,$cflags,$Defines,$Includes) = @_; #my $defines = ""; foreach (@$Defines) {$defines .= "-D$_ " ;} # unused #my $includes = ""; foreach (@$Includes) {$includes .= "-I$_ " ;} # unused here (see atl_link) print "--- Chopping $src\n"; my $attolchop = "$BINDIR/attolchop"; if ( ! -e $attolchop ) { $attolchop .= ".exe" ; if ( ! -e $attolchop ) { print "*** Cannot find attolchop executable\n"; return 1; } } my $status=SystemP("$attolchop -w -n GNAT \"$src\" \"$INTDIR\""); return $status; } 1; Uses gnatmake to link main unit - this will trigger any needed (re-)compilations. Uses compilation flags and Ada library search list previously saved by atl_cc, if any. sub atl_link($\@$\@$) { my ($exe,$Objects,$ldflags,$LibPath,$libs) = @_; #my $objects = ""; foreach (@$Objects) {$objects .= "$_ " ;} # unused my $curdir = GetCurrentDir(); my $libpath = ""; foreach (@$LibPath) { if (! ($_=~/^\//)) { $_=$curdir."/".$_; } #Root relative paths $libpath .= "-L$_ " ; } # Get 'compilation' parameters from global environment: my $cflags = $CFLAGS; my $includes = ""; foreach (@INCLUDE_DIR_LIST) { if (! ($_=~/^\//)) { $_=$curdir."/".$_; } #Root relative paths $includes .= "-I\"$_\" " ; } my $main = $ATL_MAIN_PROCEDURE; print "--- Compiling/Linking $main into $exe\n"; print "--- [cflags: $cflags] [Includes: $includes]\n" if ($ENV{'ATTOLSTUDIO_VERBOSE'}); print "--- [ldflags: $ldflags] [LibPath: $libpath] [libs: $libs]\n" if ($ENV{'ATTOLSTUDIO_VERBOSE'}); my $makeflags = ""; if ($ldflags ne "") { # we consider '$ldflags' as gnatmake switches $makeflags = "$ldflags"; } my $linkflags = ""; if ( ($libpath ne "") || ($libs ne "") ) { # we consider '$LibPath' and '$libs' as linker switches (passed by gnatmake to gcc) $linkflags = "-largs $libpath $libs"; } my $compflags = ""; if ($cflags ne "") { # we consider '$cflags' as compiler switches (passed by gnatmake to gcc) $compflags = "-cargs $cflags"; } # we consider '$includes' as Ada library search list for gnatmake # Note: search list is assumed to be consistent for all source files my $searchpath = ""; if ($includes ne "") { $searchpath="$includes"; } chdir( $INTDIR ); unlink( $exe ); my $status = SystemP("gnatmake $makeflags \"$main\" -o \"$exe\" $searchpath $compflags $linkflags"); chdir( $curdir ); return $status ; } 1; sub atl_exec($$$) { my ($exe,$out,$parameters) = @_; print "--- Running $exe $parameters\n"; print "--- [out: $out]\n" if ($ENV{'ATTOLSTUDIO_VERBOSE'}); unlink( $out ); unlink("attolcov.spt"); my $status = SystemP( $exe, "$parameters" ); if ( (! -e "$out") && (-e "attolcov.spt") ) { rename ("attolcov.spt", "$out"); } return $status; } sub atl_execdbg($$$) { my ($exe,$out,$parameters) = @_; print "--- Debugging $exe\n"; print "--- [out: $out]\n" if ($ENV{'ATTOLSTUDIO_VERBOSE'}); unlink( $out ); unlink("attolcov.spt"); my $Debugger = "gdb"; SystemP( "xterm -e $Debugger \"$exe\"" ); if ( (! -e "$out") && (-e "attolcov.spt") ) { rename ("attolcov.spt", "$out"); } return 0; } 1; For v2003.06.01 ------------------------------------------------------------------------------- TDP build functions and Studio configuration settings As in most Ada TDPs the compilation function (atl_cc) for this GNAT TDP does not do any Ada compilations: it merely 'chops' the provided source, to generate single unit sources in the build (INTDIR) directory. All Ada compilations are in fact done in the link function (atl_link), using the gnatmake utility. In order to handle in a sensible way the Build settings set in Studio (Compiler settings, which are passed as parameters to the atl_cc function, and Linker settings, which are passed as parameters to the atl_link function), the TDP implements the following behaviour: - In atl_cc function: The 'cflags' parameter (set from Studio 'Build/Compiler/Compiler Flags' setting) and the 'Includes' parameter (set from Studio 'Build/Compiler/Directories for Include Files' setting) parameter cannot be used. But the values of these settings for the test node are implicitely saved by Studio in the environment (CFLAGS and INCLUDE_DIR_LIST globals). - In atl_link function: The global 'CFLAGS' are interpreted as compiler switches (which will be passed by gnatmake to gcc). The gobal 'INCLUDE_DIR_LIST' is interpreted as an Ada library ('-I') search list for gnatmake. The parameters to atl_link are interpreted as follows: The 'ldflags' parameter (set from Studio 'Build/Linker/Link Flags' setting) is interpreted as gnatmake switches. The 'LibPath' parameter (set from Studio 'Build/Linker/Directories for Libraries' setting), interpreted as an object library ('-L') search list, and the 'libs' parameter (set from Studio 'Build/Linker/Additional Objects or Libraries' setting) are both interpreted as linker switches (which will be passed by gnatmake to gcc). ------------------------------------------------------------------------------- -- Add with clauses with text_io; integer long_long_integer long_float text_io.file_type 100 32 Could be -(2**(access_size-1)) 0 Could be (2**(access_size-1))-1 (2**(access_size))-1 31 0 1 1 "D0 " "attolcov.spt" -- Give functions specifications -- Add with clauses with text_io; with system;use system; function priv_clock return priv_int is subtype c_long_int is priv_int; type tms is record tms_utime : c_long_int; tms_stime : c_long_int; tms_cutime : c_long_int; tms_cstime : c_long_int; end record; tms_rec:tms; result:priv_int; procedure times (X:ADDRESS) ; pragma interface(C,times); begin -- must return -1 if clock is not implemented result:=-1; times(tms_rec'address); result := priv_int(tms_rec.tms_utime); return(result); end priv_clock; procedure priv_init(I : in integer) is begin null; end priv_init; procedure priv_open(file : in out priv_file; name : in string ) is begin text_io.create(file,text_io.out_file,name); end priv_open; procedure priv_writeln(file : in out priv_file; line: in string) is begin text_io.put(file,line); text_io.new_line(file); end priv_writeln; procedure priv_close(file : in out priv_file) is begin text_io.close(file); end priv_close; -- Insert additional function bodies here package STANDARD is type BOOLEAN is _internal(BOOLEAN); type INTEGER is range -2_147_483_648 .. 2_147_483_647; type FLOAT is digits 6 range -3.40282346638528859811704165E39 .. 3.40282346638528859811704165E39; type _INTERNAL_INTEGER is _internal(INTERNAL_INTEGER); type _INTERNAL_FLOAT is _internal(INTERNAL_FLOAT83); type LONG_INTEGER is range -2_147_483_648 .. 2_147_483_647; type LONG_LONG_integer is range -2_147_483_648 .. 2_147_483_647; type SHORT_SHORT_INTEGER is range -128 .. 127; type SHORT_INTEGER is range -32_768 .. 32_767; type LONG_FLOAT is digits 15 range -0.179769313486231570814527372E309 .. 0.179769313486231570814527372E309; type LONG_LONG_FLOAT is digits 15 range -0.179769313486231570814527372E309 .. 0.179769313486231570814527372E309; type SHORT_FLOAT is digits 15 range -0.179769313486231570814527372E309 .. 0.179769313486231570814527372E309; type DURATION is delta 2.0**(-14) range -86_400.0 .. 86_400.0; for DURATION'SIZE use 32; -- Predefined subtypes: subtype NATURAL is INTEGER range 0 .. INTEGER'LAST; subtype POSITIVE is INTEGER range 1 .. INTEGER'LAST; type CHARACTER is _INTERNAL(CHARACTER_7); for CHARACTER'SIZE use 7; -- no Wide character support in AdA83 package ASCII is -- Control characters: NUL : constant CHARACTER := character'val(0); SOH : constant CHARACTER := character'val(1); STX : constant CHARACTER := character'val(2); ETX : constant CHARACTER := character'val(3); EOT : constant CHARACTER := character'val(4); ENQ : constant CHARACTER := character'val(5); ACK : constant CHARACTER := character'val(6); BEL : constant CHARACTER := character'val(7); BS : constant CHARACTER := character'val(8); HT : constant CHARACTER := character'val(9); LF : constant CHARACTER := character'val(10); VT : constant CHARACTER := character'val(11); FF : constant CHARACTER := character'val(12); CR : constant CHARACTER := character'val(13); SO : constant CHARACTER := character'val(14); SI : constant CHARACTER := character'val(15); DLE : constant CHARACTER := character'val(16); DC1 : constant CHARACTER := character'val(17); DC2 : constant CHARACTER := character'val(18); DC3 : constant CHARACTER := character'val(19); DC4 : constant CHARACTER := character'val(20); NAK : constant CHARACTER := character'val(21); SYN : constant CHARACTER := character'val(22); ETB : constant CHARACTER := character'val(23); CAN : constant CHARACTER := character'val(24); EM : constant CHARACTER := character'val(25); SUB : constant CHARACTER := character'val(26); ESC : constant CHARACTER := character'val(27); FS : constant CHARACTER := character'val(28); GS : constant CHARACTER := character'val(29); RS : constant CHARACTER := character'val(30); US : constant CHARACTER := character'val(31); DEL : constant CHARACTER := character'val(127); -- Other characters: EXCLAM : constant CHARACTER := '!'; QUOTATION : constant CHARACTER := '"'; SHARP : constant CHARACTER := '#'; DOLLAR : constant CHARACTER := '$'; PERCENT : constant CHARACTER := '%'; AMPERSAND : constant CHARACTER := '&'; COLON : constant CHARACTER := ':'; SEMICOLON : constant CHARACTER := ';'; QUERY : constant CHARACTER := '?'; AT_SIGN : constant CHARACTER := '@'; L_BRACKET : constant CHARACTER := '['; BACK_SLASH : constant CHARACTER := '\'; R_BRACKET : constant CHARACTER := ']'; CIRCUMFLEX : constant CHARACTER := '^'; UNDERLINE : constant CHARACTER := '_'; GRAVE : constant CHARACTER := '`'; L_BRACE : constant CHARACTER := '{'; BAR : constant CHARACTER := '|'; R_BRACE : constant CHARACTER := '}'; TILDE : constant CHARACTER := '~'; -- Lower case letters: LC_A : constant CHARACTER := 'a'; LC_B : constant CHARACTER := 'b'; LC_C : constant CHARACTER := 'c'; LC_D : constant CHARACTER := 'd'; LC_E : constant CHARACTER := 'e'; LC_F : constant CHARACTER := 'f'; LC_G : constant CHARACTER := 'g'; LC_H : constant CHARACTER := 'h'; LC_I : constant CHARACTER := 'i'; LC_J : constant CHARACTER := 'j'; LC_K : constant CHARACTER := 'k'; LC_L : constant CHARACTER := 'l'; LC_M : constant CHARACTER := 'm'; LC_N : constant CHARACTER := 'n'; LC_O : constant CHARACTER := 'o'; LC_P : constant CHARACTER := 'p'; LC_Q : constant CHARACTER := 'q'; LC_R : constant CHARACTER := 'r'; LC_S : constant CHARACTER := 's'; LC_T : constant CHARACTER := 't'; LC_U : constant CHARACTER := 'u'; LC_V : constant CHARACTER := 'v'; LC_W : constant CHARACTER := 'w'; LC_X : constant CHARACTER := 'x'; LC_Y : constant CHARACTER := 'y'; LC_Z : constant CHARACTER := 'z'; end ASCII; -- Predefined string type: type STRING is array(POSITIVE range <>) of CHARACTER; pragma PACK (STRING); -- no Wide_String Support in Ada83. -- The predefined exceptions: CONSTRAINT_ERROR : exception; NUMERIC_ERROR : exception; PROGRAM_ERROR : exception; STORAGE_ERROR : exception; TASKING_ERROR : exception; end STANDARD; -- If any packages require to be analysed each time, -- you can add them using a with clause like : -- with Ada.Text_IO.Decimal_IO ; -- In this case uncomment 'package attol_autoload' line. --package attol_autoload is end; -- -------------------------------------------------------------------------- package STANDARD is type BOOLEAN is _internal(BOOLEAN); type INTEGER is range -2_147_483_648 .. 2_147_483_647; type LONG_INTEGER is range -2_147_483_648 .. 2_147_483_647; type LONG_LONG_integer is range -2_147_483_648 .. 2_147_483_647; type SHORT_SHORT_INTEGER is range -128 .. 127; type SHORT_INTEGER is range -32_768 .. 32_767; type FLOAT is digits 6 range -3.40282346638528859811704165E39 .. 3.40282346638528859811704165E39; type LONG_FLOAT is digits 15 range -0.179769313486231570814527372E309 .. 0.179769313486231570814527372E309; type LONG_LONG_FLOAT is digits 15 range -0.179769313486231570814527372E309 .. 0.179769313486231570814527372E309; type SHORT_FLOAT is digits 15 range -0.179769313486231570814527372E309 .. 0.179769313486231570814527372E309; type DURATION is delta 2.0**(-14) range -86_400.0 .. 86_400.0; for DURATION'SIZE use 32; -- Predefined subtypes: subtype NATURAL is INTEGER range 0 .. INTEGER'LAST; subtype POSITIVE is INTEGER range 1 .. INTEGER'LAST; type CHARACTER is _INTERNAL(CHARACTER_8); for CHARACTER'SIZE use 8; type WIDE_CHARACTER is _INTERNAL(WIDE_CHARACTER); package ASCII is -- Control characters: NUL : constant CHARACTER := character'val(0); SOH : constant CHARACTER := character'val(1); STX : constant CHARACTER := character'val(2); ETX : constant CHARACTER := character'val(3); EOT : constant CHARACTER := character'val(4); ENQ : constant CHARACTER := character'val(5); ACK : constant CHARACTER := character'val(6); BEL : constant CHARACTER := character'val(7); BS : constant CHARACTER := character'val(8); HT : constant CHARACTER := character'val(9); LF : constant CHARACTER := character'val(10); VT : constant CHARACTER := character'val(11); FF : constant CHARACTER := character'val(12); CR : constant CHARACTER := character'val(13); SO : constant CHARACTER := character'val(14); SI : constant CHARACTER := character'val(15); DLE : constant CHARACTER := character'val(16); DC1 : constant CHARACTER := character'val(17); DC2 : constant CHARACTER := character'val(18); DC3 : constant CHARACTER := character'val(19); DC4 : constant CHARACTER := character'val(20); NAK : constant CHARACTER := character'val(21); SYN : constant CHARACTER := character'val(22); ETB : constant CHARACTER := character'val(23); CAN : constant CHARACTER := character'val(24); EM : constant CHARACTER := character'val(25); SUB : constant CHARACTER := character'val(26); ESC : constant CHARACTER := character'val(27); FS : constant CHARACTER := character'val(28); GS : constant CHARACTER := character'val(29); RS : constant CHARACTER := character'val(30); US : constant CHARACTER := character'val(31); DEL : constant CHARACTER := character'val(127); -- Other characters: EXCLAM : constant CHARACTER := '!'; QUOTATION : constant CHARACTER := '"'; SHARP : constant CHARACTER := '#'; DOLLAR : constant CHARACTER := '$'; PERCENT : constant CHARACTER := '%'; AMPERSAND : constant CHARACTER := '&'; COLON : constant CHARACTER := ':'; SEMICOLON : constant CHARACTER := ';'; QUERY : constant CHARACTER := '?'; AT_SIGN : constant CHARACTER := '@'; L_BRACKET : constant CHARACTER := '['; BACK_SLASH : constant CHARACTER := '\'; R_BRACKET : constant CHARACTER := ']'; CIRCUMFLEX : constant CHARACTER := '^'; UNDERLINE : constant CHARACTER := '_'; GRAVE : constant CHARACTER := '`'; L_BRACE : constant CHARACTER := '{'; BAR : constant CHARACTER := '|'; R_BRACE : constant CHARACTER := '}'; TILDE : constant CHARACTER := '~'; -- Lower case letters: LC_A : constant CHARACTER := 'a'; LC_B : constant CHARACTER := 'b'; LC_C : constant CHARACTER := 'c'; LC_D : constant CHARACTER := 'd'; LC_E : constant CHARACTER := 'e'; LC_F : constant CHARACTER := 'f'; LC_G : constant CHARACTER := 'g'; LC_H : constant CHARACTER := 'h'; LC_I : constant CHARACTER := 'i'; LC_J : constant CHARACTER := 'j'; LC_K : constant CHARACTER := 'k'; LC_L : constant CHARACTER := 'l'; LC_M : constant CHARACTER := 'm'; LC_N : constant CHARACTER := 'n'; LC_O : constant CHARACTER := 'o'; LC_P : constant CHARACTER := 'p'; LC_Q : constant CHARACTER := 'q'; LC_R : constant CHARACTER := 'r'; LC_S : constant CHARACTER := 's'; LC_T : constant CHARACTER := 't'; LC_U : constant CHARACTER := 'u'; LC_V : constant CHARACTER := 'v'; LC_W : constant CHARACTER := 'w'; LC_X : constant CHARACTER := 'x'; LC_Y : constant CHARACTER := 'y'; LC_Z : constant CHARACTER := 'z'; end ASCII; -- Predefined string type: type STRING is array(POSITIVE range <>) of CHARACTER; pragma PACK (STRING); type WIDE_STRING is array(POSITIVE range <>) of WIDE_CHARACTER; -- The predefined exceptions: CONSTRAINT_ERROR : exception; NUMERIC_ERROR : exception; PROGRAM_ERROR : exception; STORAGE_ERROR : exception; TASKING_ERROR : exception; end STANDARD; -- If any packages require to be analysed each time, -- you can add them using a with clause like : -- with Ada.Text_IO.Decimal_IO ; -- In this case uncomment 'package attol_autoload' line. -- -- In case of Gnat Ada95 sources analysis (rather than provided souces), -- We need to load automatically these packages, because Gnat defines -- them as child package rather than inner-package. --with Ada.Text_IO.Decimal_IO ; --with Ada.Text_IO.Enumeration_IO ; --with Ada.Text_IO.Fixed_IO ; --with Ada.Text_IO.Float_IO ; --with Ada.Text_IO.Integer_IO ; --with Ada.Text_IO.Modular_IO ; --with Ada.Wide_Text_IO.Decimal_IO ; --with Ada.Wide_Text_IO.Enumeration_IO ; --with Ada.Wide_Text_IO.Fixed_IO ; --with Ada.Wide_Text_IO.Float_IO ; --with Ada.Wide_Text_IO.Integer_IO ; --with Ada.Wide_Text_IO.Modular_IO ; --package attol_autoload is end; -- -------------------------------------------------------------------------- with Unchecked_Conversion; package System is pragma Suppress( Elaboration_Check ); pragma Pure (System); pragma Preelaborate (System); type Name is (S370, I80X86, I80386, MC680X0, Vax, Transputer, RS_6000, MIPS, HP9000_PA_RISC, HP9000_300, SPARC); System_Name : constant Name := SPARC; -- System-Dependent Named Numbers: Min_Int : constant :=-2**31; Max_Int : constant := 2**31 - 1; Max_Binary_Modulus : constant := 2**32; Max_Nonbinary_Modulus : constant := 2**31 - 1; Max_Base_Digits : constant := 15; Max_Digits : constant := 15; Max_Mantissa : constant := 31; Fine_Delta : constant := 2.0 ** (-31); Tick : constant := 0.01; -- Storage-related Declarations: type Address is access Integer; Null_Address : constant Address := null; Storage_Unit : constant := 8; Word_Size : constant := 4 * Storage_Unit; Memory_Size : constant := 2**32; Address_Error : exception; -- Address Comparison: function "<"( Left : Address; Right : Address ) return Boolean; function ">"( Left : Address; Right : Address ) return Boolean; function "<="( Left : Address; Right : Address ) return Boolean; function ">="( Left : Address; Right : Address ) return Boolean; -- Declarations needed for Address as an access type: function "-"( Left,Right : System.Address ) return Integer; function "-"( Left : System.Address; Right : Integer ) return System.Address; function "+"( Left : System.Address; Right : Integer ) return System.Address; function "+"( Left : Integer; Right : System.Address ) return System.Address; -- Declarations for compatibility with Alsys system spec: subtype Offset is Integer; subtype ADDRESS_STRING is STRING (1..8); function IMAGE ( LEFT : in ADDRESS ) return ADDRESS_STRING; function VALUE ( LEFT : in STRING ) return ADDRESS; type OBJECT_LENGTH is mod 2**32; -- These routines are provided to perform READ/WRITE operation -- in memory. -- Warning: These routines will give unexpected results if used with -- unconstrained types. generic type TARGET is private; function FETCH_FROM_ADDRESS (A : in ADDRESS) return TARGET; generic type TARGET is private; procedure ASSIGN_TO_ADDRESS (A : in ADDRESS; T : in TARGET); procedure MOVE (TO : in ADDRESS; FROM : in ADDRESS; LENGTH : in OBJECT_LENGTH); function "mod" (LEFT : in ADDRESS; RIGHT : in POSITIVE) return NATURAL; -- Returns the given address rounded to a specific value. type ROUND_DIRECTION is (DOWN, UP); function ROUND (VALUE : in ADDRESS; DIRECTION : in ROUND_DIRECTION; MODULUS : in POSITIVE) return ADDRESS; function AtoI is new Unchecked_Conversion( Address, Integer); function ItoA is new Unchecked_Conversion( Integer, Address); -- Other System-Dependent Declarations: type Bit_Order is ( High_Order_First, Low_Order_First ); Default_Bit_Order : constant Bit_Order := High_Order_First; -- Priority-related Declarations : subtype ANY_PRIORITY is INTEGER range 1 .. 126; subtype PRIORITY is ANY_PRIORITY range ANY_PRIORITY'FIRST .. ANY_PRIORITY'LAST - 1; subtype INTERRUPT_PRIORITY is ANY_PRIORITY range PRIORITY'LAST + 1 .. ANY_PRIORITY'LAST; Default_Priority : constant PRIORITY := (PRIORITY'FIRST + PRIORITY'LAST)/2; private end System; -- -------------------------------------------------------------------------- package System is pragma Pure (System); type Name is (SYSTEM_NAME_GNAT); System_Name : constant Name := SYSTEM_NAME_GNAT; -- System-Dependent Named Numbers Min_Int : constant := Long_Long_Integer'First; Max_Int : constant := Long_Long_Integer'Last; Max_Binary_Modulus : constant := 2 ** Long_Long_Integer'Size; Max_Nonbinary_Modulus : constant := Integer'Last; Max_Base_Digits : constant := Long_Long_Float'Digits; Max_Digits : constant := Long_Long_Float'Digits; Max_Mantissa : constant := 63; Fine_Delta : constant := 2.0 ** (-Max_Mantissa); Tick : constant := Standard'Tick; -- Storage-related Declarations type Address is private; Null_Address : constant Address; Storage_Unit : constant := Standard'Storage_Unit; Word_Size : constant := Standard'Word_Size; Memory_Size : constant := 2 ** Standard'Address_Size; -- Address comparison function "<" (Left, Right : Address) return Boolean; function "<=" (Left, Right : Address) return Boolean; function ">" (Left, Right : Address) return Boolean; function ">=" (Left, Right : Address) return Boolean; function "=" (Left, Right : Address) return Boolean; pragma Import (Intrinsic, "<"); pragma Import (Intrinsic, "<="); pragma Import (Intrinsic, ">"); pragma Import (Intrinsic, ">="); pragma Import (Intrinsic, "="); -- Other System-Dependent Declarations type Bit_Order is (High_Order_First, Low_Order_First); Default_Bit_Order : constant Bit_Order; -- Priority-related Declarations (RM D.1) subtype Any_Priority is Integer range 0 .. Standard'Max_Interrupt_Priority; subtype Priority is Any_Priority range 0 .. Standard'Max_Priority; subtype Interrupt_Priority is Any_Priority range Standard'Max_Priority + 1 .. Standard'Max_Interrupt_Priority; Default_Priority : constant Priority := (Priority'First + Priority'Last) / 2; private type Address is mod Memory_Size; Null_Address : constant Address := 0; Default_Bit_Order : constant Bit_Order := Bit_Order'Val (Standard'Default_Bit_Order); end System; -- ----------------------------------------------------------------------------