home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / adav313.zip / gnat-3_13p-os2-bin-20010916.zip / emx / gnatlib / system.ads < prev    next >
Text File  |  2000-07-19  |  11KB  |  244 lines

  1. ------------------------------------------------------------------------------
  2. --                                                                          --
  3. --                        GNAT RUN-TIME COMPONENTS                          --
  4. --                                                                          --
  5. --                               S Y S T E M                                --
  6. --                                                                          --
  7. --                                 S p e c                                  --
  8. --                            (Default Version)                             --
  9. --                                                                          --
  10. --                            $Revision: 1.40 $
  11. --                                                                          --
  12. --          Copyright (C) 1992-2000 Free Software Foundation, Inc.          --
  13. --                                                                          --
  14. -- This specification is derived from the Ada Reference Manual for use with --
  15. -- GNAT. The copyright notice above, and the license provisions that follow --
  16. -- apply solely to the  contents of the part following the private keyword. --
  17. --                                                                          --
  18. -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  19. -- terms of the  GNU General Public License as published  by the Free Soft- --
  20. -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
  21. -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
  22. -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
  23. -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
  24. -- for  more details.  You should have  received  a copy of the GNU General --
  25. -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
  26. -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
  27. -- MA 02111-1307, USA.                                                      --
  28. --                                                                          --
  29. -- As a special exception,  if other files  instantiate  generics from this --
  30. -- unit, or you link  this unit with other files  to produce an executable, --
  31. -- this  unit  does not  by itself cause  the resulting  executable  to  be --
  32. -- covered  by the  GNU  General  Public  License.  This exception does not --
  33. -- however invalidate  any other reasons why  the executable file  might be --
  34. -- covered by the  GNU Public License.                                      --
  35. --                                                                          --
  36. -- GNAT was originally developed  by the GNAT team at  New York University. --
  37. -- It is now maintained by Ada Core Technologies Inc (http://www.gnat.com). --
  38. --                                                                          --
  39. ------------------------------------------------------------------------------
  40.  
  41. package System is
  42. pragma Pure (System);
  43. --  Note that we take advantage of the implementation permission to
  44. --  make this unit Pure instead of Preelaborable, see RM 13.7(36)
  45.  
  46.    type Name is (SYSTEM_NAME_GNAT);
  47.    System_Name : constant Name := SYSTEM_NAME_GNAT;
  48.  
  49.    --  System-Dependent Named Numbers
  50.  
  51.    Min_Int               : constant := Long_Long_Integer'First;
  52.    Max_Int               : constant := Long_Long_Integer'Last;
  53.  
  54.    Max_Binary_Modulus    : constant := 2 ** Long_Long_Integer'Size;
  55.    Max_Nonbinary_Modulus : constant := Integer'Last;
  56.  
  57.    Max_Base_Digits       : constant := Long_Long_Float'Digits;
  58.    Max_Digits            : constant := Long_Long_Float'Digits;
  59.  
  60.    Max_Mantissa          : constant := 63;
  61.    Fine_Delta            : constant := 2.0 ** (-Max_Mantissa);
  62.  
  63.    Tick                  : constant := Standard'Tick;
  64.  
  65.    --  Storage-related Declarations
  66.  
  67.    type Address is private;
  68.    Null_Address : constant Address;
  69.  
  70.    Storage_Unit : constant := Standard'Storage_Unit;
  71.    Word_Size    : constant := Standard'Word_Size;
  72.    Memory_Size  : constant := 2 ** Standard'Address_Size;
  73.  
  74.    --  Address comparison
  75.  
  76.    function "<"  (Left, Right : Address) return Boolean;
  77.    function "<=" (Left, Right : Address) return Boolean;
  78.    function ">"  (Left, Right : Address) return Boolean;
  79.    function ">=" (Left, Right : Address) return Boolean;
  80.    function "="  (Left, Right : Address) return Boolean;
  81.  
  82.    pragma Import (Intrinsic, "<");
  83.    pragma Import (Intrinsic, "<=");
  84.    pragma Import (Intrinsic, ">");
  85.    pragma Import (Intrinsic, ">=");
  86.    pragma Import (Intrinsic, "=");
  87.  
  88.    --  Other System-Dependent Declarations
  89.  
  90.    type Bit_Order is (High_Order_First, Low_Order_First);
  91.    Default_Bit_Order : constant Bit_Order :=
  92.                          Bit_Order'Val (Standard'Default_Bit_Order);
  93.  
  94.    --  Priority-related Declarations (RM D.1)
  95.  
  96.    Max_Priority : constant Positive := 30;
  97.  
  98.    Max_Interrupt_Priority : constant Positive := 31;
  99.  
  100.    subtype Any_Priority is Integer
  101.      range 0 .. Standard'Max_Interrupt_Priority;
  102.  
  103.    subtype Priority is Any_Priority
  104.      range 0 .. Standard'Max_Priority;
  105.  
  106.    --  Functional notation is needed in the following to avoid visibility
  107.    --  problems when this package is compiled through rtsfind in the middle
  108.    --  of another compilation.
  109.  
  110.    subtype Interrupt_Priority is Any_Priority
  111.      range
  112.        Standard."+" (Standard'Max_Priority,  1) ..
  113.          Standard'Max_Interrupt_Priority;
  114.  
  115.    Default_Priority : constant Priority :=
  116.      Standard."/" (Standard."+" (Priority'First, Priority'Last), 2);
  117.  
  118. private
  119.  
  120.    type Address is mod Memory_Size;
  121.    Null_Address : constant Address := 0;
  122.  
  123.    --------------------------------------
  124.    -- System Implementation Parameters --
  125.    --------------------------------------
  126.  
  127.    --  These parameters provide information about the target that is used
  128.    --  by the compiler. They are in the private part of System, where they
  129.    --  can be accessed using Rtsfind. All values defined here must be
  130.    --  constants, since they are accessed at compile time.
  131.  
  132.    --  Note these definitions must come before the definitions of any
  133.    --  complex types or other code that may require Rtsfind to access
  134.    --  these entities during compilation of System itself.
  135.  
  136.    -----------------------------------
  137.    -- Control of Exception Handling --
  138.    -----------------------------------
  139.  
  140.    --  GNAT provides two methods of implementing exceptions:
  141.  
  142.    --    Longjmp/Setjmp (-gnatL)
  143.  
  144.    --      This approach uses longjmp/setjmp to handle exceptions. It
  145.    --      uses less storage, and can often propagate exceptions faster,
  146.    --      at the expense of (sometimes considerable) overhead in setting
  147.    --      up an exception handler. This approach is available on all
  148.    --      targets, and is the default where it is the only approach.
  149.  
  150.    --    Zero Cost (-gnatZ)
  151.  
  152.    --      This approach uses separate exception tables. These use extra
  153.    --      storage, and exception propagation can be quite slow, but there
  154.    --      is no overhead in setting up an exception handler (it is to this
  155.    --      latter operation that the phrase zero-cost refers). This approach
  156.    --      is only available on some targets, and is the default where it is
  157.    --      available.
  158.  
  159.    Zero_Cost_Exceptions : constant Boolean := False;
  160.    --  Set False for Longjmp/Setjmp, True for Zero Cost
  161.  
  162.    -------------------------------
  163.    -- Control of Stack Checking --
  164.    -------------------------------
  165.  
  166.    --  GNAT provides two methods of implementing exceptions:
  167.  
  168.    --    GCC Probing Mechanism
  169.  
  170.    --      This approach uses the standard GCC mechanism for
  171.    --      stack checking. The method assumes that accessing
  172.    --      storage immediately beyond the end of the stack
  173.    --      will result in a trap that is converted to a storage
  174.    --      error by the runtime system. This mechanism has
  175.    --      minimal overhead, but requires complex hardware,
  176.    --      operating system and run-time support. Probing is
  177.    --      the default method where it is available. The stack
  178.    --      size for the environment task depends on the operating
  179.    --      system and cannot be set in a system-independent way.
  180.  
  181.    --   GNAT Stack-limit Checking
  182.  
  183.    --      This method relies on comparing the stack pointer
  184.    --      with per-task stack limits. If the check fails, an
  185.    --      exception is explicitly raised. The advantage is
  186.    --      that the method requires no extra system dependent
  187.    --      runtime support and can be used on systems without
  188.    --      memory protection as well, but at the cost of more
  189.    --      overhead for doing the check. This method is the
  190.    --      default on systems that lack complete support for
  191.    --      probing.
  192.  
  193.    Stack_Check_Probes : constant Boolean := False;
  194.    --  Set True for GCC Probing, False for GNAT Stack-limit Checking
  195.  
  196.    Stack_Check_Default : constant Boolean := False;
  197.    --  Set True for systems where stack checking is performed by default
  198.  
  199.    ----------------------------------------------
  200.    -- Boolean-Valued Floating-Point Attributes --
  201.    ----------------------------------------------
  202.  
  203.    --  The constants below give the values for representation oriented
  204.    --  floating-point attributes that are the same for all float types
  205.    --  on the target. These are all boolean values.
  206.  
  207.    --  A value is only True if the target reliably supports the corresponding
  208.    --  feature. Reliably here means that support is guaranteed for all
  209.    --  possible settings of the relevant compiler switches (like -mieee),
  210.    --  since we cannot control the user setting of those switches.
  211.  
  212.    --  The attributes cannot dependent on the current setting of compiler
  213.    --  switches, since the values must be static and consistent throughout
  214.    --  the partition. We probably should add such consistency checks in future,
  215.    --  but for now we don't do this.
  216.  
  217.    Denorm            : constant Boolean := True;
  218.    --  It might be safer to set this to False ???
  219.  
  220.    Machine_Rounds    : constant Boolean := True;
  221.  
  222.    Machine_Overflows : constant Boolean := False;
  223.  
  224.    Signed_Zeros      : constant Boolean := True;
  225.  
  226.    ----------------------------
  227.    -- Support of Long Shifts --
  228.    ----------------------------
  229.  
  230.    --  In GNORT mode, we cannot call library routines, and in particular
  231.    --  we cannot call routines for long (64-bit) shifts if such routines
  232.    --  are required on the target. This comes up in the context of support
  233.    --  of packed arrays. We can only represent packed arrays whose length
  234.    --  is in the range 33- to 64-bits as modular types if long shifts are
  235.    --  done with inline code.
  236.  
  237.    --  For the default version, for now we set long shifts inlined as True
  238.    --  This may not be quite accurate, but until we get proper separate
  239.    --  System's for each target, it is a safer choice.
  240.  
  241.    Long_Shifts_Inlined : constant Boolean := True;
  242.  
  243. end System;
  244.