File : system.ads

-------------------------------------------------------------------------------- ---- GNAT RUN-TIME COMPONENTS ---- ---- S Y S T E M ---- ---- S p e c ---- (NT Version) ---- ---- $Revision: 1.8 $-- ---- Copyright (C) 1992-1999 Free Software Foundation, Inc. ---- ---- This specification is derived from the Ada Reference Manual for use with ---- GNAT. The copyright notice above, and the license provisions that follow ---- apply solely to the contents of the part following the private keyword. ---- ---- 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, 59 Temple Place - Suite 330, Boston, ---- MA 02111-1307, USA. ---- ---- As a special exception, if other files instantiate generics from this ---- unit, or you link this unit with other files to produce an executable, ---- this unit does not by itself cause the resulting executable to be ---- covered by the GNU General Public License. This exception does not ---- however invalidate any other reasons why the executable file might be ---- covered by the GNU Public License. ---- ---- GNAT was originally developed by the GNAT team at New York University. ---- It is now maintained by Ada Core Technologies Inc (http://www.gnat.com). ---- --------------------------------------------------------------------------------packageSystemispragma Pure (System);
-- Note that we take advantage of the implementation permission to-- make this unit Pure instead of Preelaborable, see RM 13.7(36)typeNameis (SYSTEM_NAME_GNAT);
System_Name : constantName := SYSTEM_NAME_GNAT;
-- System-Dependent Named NumbersMin_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 DeclarationstypeAddressisprivate;
Null_Address : constantAddress;
Storage_Unit : constant := Standard'Storage_Unit;
Word_Size : constant := Standard'Word_Size;
Memory_Size : constant := 2 ** Standard'Address_Size;
-- Address comparisonfunction"<" (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 DeclarationstypeBit_Orderis (High_Order_First, Low_Order_First);
Default_Bit_Order : constantBit_Order;
-- Priority-related Declarations (RM D.1)subtypeAny_Priorityis Integer
range 0 .. Standard'Max_Interrupt_Priority;
subtypePriorityisAny_Priorityrange 0 .. Standard'Max_Priority;
-- Functional notation is needed in the following to avoid visibility-- problems when this package is compiled through rtsfind in the middle-- of another compilation.subtypeInterrupt_PriorityisAny_Priorityrange
Standard."+" (Standard'Max_Priority, 1) ..
Standard'Max_Interrupt_Priority;
Default_Priority : constantPriority :=
Standard."/" (Standard."+" (Priority'First, Priority'Last), 2);
privatetypeAddressismodMemory_Size;
Null_Address : constantAddress := 0;
Default_Bit_Order : constantBit_Order :=
Bit_Order'Val (Standard'Default_Bit_Order);
---------------------------------------- System Implementation Parameters ------------------------------------------ These parameters provide information about the target that is used-- by the compiler. They are in the private part of System, where they-- can be accessed using Rtsfind. All values defined here must be-- constants, since they are accessed at compile time.-- Note these definitions must come before the definitions of any-- complex types or other code that may require Rtsfind to access-- these entities during compilation of System itself.------------------------------------- Control of Exception Handling --------------------------------------- GNAT provides two methods of implementing exceptions:-- Longjmp/Setjmp (-gnatL)-- This approach uses longjmp/setjmp to handle exceptions. It-- uses less storage, and can often propagate exceptions faster,-- at the expense of (sometimes considerable) overhead in setting-- up an exception handler. This approach is available on all-- targets, and is the default where it is the only approach.-- Zero Cost (-gnatZ)-- This approach uses separate exception tables. These use extra-- storage, and exception propagation can be quite slow, but there-- is no overhead in setting up an exception handler (it is to this-- latter operation that the phrase zero-cost refers). This approach-- is only available on some targets, and is the default where it is-- available.
Zero_Cost_Exceptions : constant Boolean := False;
-- Set False for Longjmp/Setjmp, True for Zero Cost--------------------------------- Control of Stack Checking ----------------------------------- GNAT provides two methods of implementing exceptions:-- GCC Probing Mechanism-- This approach uses the standard GCC mechanism for-- stack checking. The method assumes that accessing-- storage immediately beyond the end of the stack-- will result in a trap that is converted to a storage-- error by the runtime system. This mechanism has-- minimal overhead, but requires complex hardware,-- operating system and run-time support. Probing is-- the default method where it is available. The stack-- size for the environment task depends on the operating-- system and cannot be set in a system-independent way.-- GNAT Stack-limit Checking-- This method relies on comparing the stack pointer-- with per-task stack limits. If the check fails, an-- exception is explicitly raised. The advantage is-- that the method requires no extra system dependent-- runtime support and can be used on systems without-- memory protection as well, but at the cost of more-- overhead for doing the check. This method is the-- default on systems that lack complete support for-- probing. The stack size for the environment task is
Stack_Check_Probes : constant Boolean := False;
-- Set True for GCC Probing, False for GNAT Stack-limit Checking
Stack_Check_Default : constant Boolean := False;
-- Set True for systems where stack checking is performed by default----------------------------- Underlying Priorities ------------------------------- Important note: this section of the file must come AFTER the-- definition of the system implementation parameters to ensure-- that the value of these parameters is available for analysis-- of the declarations here (using Rtsfind at compile time).-- The underlying priorities table provides a generalized mechanism-- for mapping from Ada priorities to system priorities. In some-- cases a 1-1 mapping is not the convenient or optimal choice.typePriorities_Mappingisarray (Any_Priority) of Integer;
pragma Suppress_Initialization (Priorities_Mapping);
-- Suppress initialization in case gnat.adc specifies Normalize_Scalars-- On NT, the default mapping preserves the standard 31 priorities-- of the Ada model, but maps them using compression onto the 7-- priority levels available in NT.-- To replace the default values of the Underlying_Priorities mapping,-- copy this source file into your build directory, edit the file to-- reflect your desired behavior, and recompile with the command:-- $ gcc -c -O3 -gnatpgn system.ads-- then recompile the run-time parts that depend on this package:-- $ gnatmake -a -gnatn -O3 <your application>-- then force rebuilding your application if you need different options:-- $ gnatmake -f <your options> <your application>
Underlying_Priorities : constantPriorities_Mapping :=
(Priority'First .. 1 => -15,
2 .. Default_Priority - 2 => -2,
Default_Priority - 1 => -1,
Default_Priority => 0,
Default_Priority + 1 .. 19 => 1,
20 .. Priority'Last => 2,
Interrupt_Priority => 15);
end System;