summaryrefslogtreecommitdiff
path: root/gcc/ada/targparm.ads
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ada/targparm.ads')
-rw-r--r--gcc/ada/targparm.ads288
1 files changed, 288 insertions, 0 deletions
diff --git a/gcc/ada/targparm.ads b/gcc/ada/targparm.ads
new file mode 100644
index 00000000000..2346fd209e7
--- /dev/null
+++ b/gcc/ada/targparm.ads
@@ -0,0 +1,288 @@
+------------------------------------------------------------------------------
+-- --
+-- GNAT RUN-TIME COMPONENTS --
+-- --
+-- T A R G P A R M --
+-- --
+-- S p e c --
+-- --
+-- $Revision: 1.13 $
+-- --
+-- Copyright (C) 1999-2001 Free Software Foundation, Inc. --
+-- --
+-- 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. --
+-- --
+-- 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). --
+-- --
+------------------------------------------------------------------------------
+
+-- This package obtains parameters from the target runtime version of
+-- System, to indicate parameters relevant to the target environment.
+
+-- Conceptually, these parameters could be obtained using rtsfind, but
+-- we do not do this for three reasons:
+
+-- 1. Compiling System for every compilation wastes time
+-- 2. This compilation impedes debugging by adding extra compile steps
+-- 3. There are recursion problems coming from compiling System itself
+-- or any of its children.
+
+-- For all these reasons, we read in the source of System, and then scan
+-- it at the text level to extract the parameter values.
+
+-- Note however, that later on, when the ali file is written, we make sure
+-- that the System file is at least parsed, so that the checksum is properly
+-- computed and set in the ali file. This partially negates points 1 and 2
+-- above although just parsing is quick and does not impact debugging much.
+
+package Targparm is
+
+ -- The following parameters correspond to the variables defined in the
+ -- private part of System (without the terminating _On_Target). Note
+ -- that it is required that all parameters be specified in system.ads.
+
+ -----------------------------------
+ -- 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.
+
+ ZCX_By_Default_On_Target : Boolean;
+ -- Indicates if zero cost exceptions are active by default. Can be modified
+ -- by the use of -gnatZ and -gnatL switches.
+
+ GCC_ZCX_Support_On_Target : Boolean;
+ -- Indicates that when ZCX is active the mechanism to be used is the
+ -- standard GCC ZCX mechanism (introduced in GCC 3.1)
+
+ Front_End_ZCX_Support_On_Target : Boolean;
+ -- Indicates that when ZCX is active (and GCC_ZCX_Support is not set)
+ -- the mechanism to be used is the GNAT front end specific ZCX mechanism
+
+ ---------------------------------------
+ -- High_Integrity (No Run Time) Mode --
+ ---------------------------------------
+
+ -- In High_Integrity mode, there is no system run-time, and the flag
+ -- Opt.No_Run_Time is set so that the language is appropriately
+ -- restricted to forbid construct that would generate run-time calls.
+
+ High_Integrity_Mode_On_Target : Boolean;
+ -- Indicates that this build is for a high integrity mode version of
+ -- GNAT, so that no run time is permitted.
+
+ -------------------------------
+ -- 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.
+
+ Stack_Check_Probes_On_Target : Boolean;
+ -- Indicates if stack check probes are used, as opposed to the standard
+ -- target independent comparison method.
+
+ Stack_Check_Default_On_Target : Boolean;
+ -- Indicates if stack checking is on by default
+
+ ----------------------------
+ -- Command Line Arguments --
+ ----------------------------
+
+ -- For most ports of GNAT, command line arguments are supported. The
+ -- following flag is set to False for targets that do not support
+ -- command line arguments (notably VxWorks).
+
+ Command_Line_Args_On_Target : Boolean;
+ -- Set False if no command line arguments on target
+
+ -- Note: this is prepared for future use, but not yet used, since we
+ -- do not yet have a way of propagating Targparm params to the binder
+
+ -----------------------
+ -- Main Program Name --
+ -----------------------
+
+ -- When the binder generates the main program to be used to create the
+ -- executable, the main program name is main by default (to match the
+ -- usual Unix practice). If this parameter is set to True, then the
+ -- name is instead by default taken from the actual Ada main program
+ -- name (just the name of the child if the main program is a child unit).
+ -- In either case, this value can be overridden using -M name.
+
+ Use_Ada_Main_Program_Name_On_Target : Boolean;
+ -- Set True to use the Ada main program name as the main name
+
+ -- Note: this is prepared for future use, but not yet used, since we
+ -- do not yet have a way of propagating Targparm params to the binder
+
+ ----------------------------
+ -- Support of Long Shifts --
+ ----------------------------
+
+ -- In GNORT mode, we cannot call library routines, and in particular
+ -- we cannot call routines for long (64-bit) shifts if such routines
+ -- are required on the target. This comes up in the context of support
+ -- of packed arrays. We can only represent packed arrays whose length
+ -- is in the range 33- to 64-bits as modular types if long shifts are
+ -- done with inline code.
+
+ -- For the default version, for now we set long shifts inlined as True
+ -- This may not be quite accurate, but until we get proper separate
+ -- System's for each target, it is a safer choice.
+
+ Long_Shifts_Inlined_On_Target : Boolean;
+ -- Indicates if long (double word) shifts are generated using inlined
+ -- code (and thus are permissible in No_Run_Time mode).
+
+ ----------------------------------------------
+ -- Boolean-Valued Floating-Point Attributes --
+ ----------------------------------------------
+
+ -- The constants below give the values for representation oriented
+ -- floating-point attributes that are the same for all float types
+ -- on the target. These are all boolean values.
+
+ -- A value is only True if the target reliably supports the corresponding
+ -- feature. Reliably here means that support is guaranteed for all
+ -- possible settings of the relevant compiler switches (like -mieee),
+ -- since we cannot control the user setting of those switches.
+
+ -- The attributes cannot dependent on the current setting of compiler
+ -- switches, since the values must be static and consistent throughout
+ -- the partition. We probably should add such consistency checks in future,
+ -- but for now we don't do this.
+
+ AAMP_On_Target : Boolean;
+ -- Set to True if target is AAMP.
+
+ Denorm_On_Target : Boolean;
+ -- Set to False on targets that do not reliably support denormals.
+ -- Reliably here means for all settings of the relevant -m flag, so
+ -- for example, this is False on the Alpha where denormals are not
+ -- supported unless -mieee is used.
+
+ Machine_Rounds_On_Target : Boolean;
+ -- Set to False for targets where S'Machine_Rounds is False
+
+ Machine_Overflows_On_Target : Boolean;
+ -- Set to True for targets where S'Machine_Overflows is True
+
+ Signed_Zeros_On_Target : Boolean;
+ -- Set to False on targets that do not reliably support signed zeros.
+
+ OpenVMS_On_Target : Boolean;
+ -- Set to True if target is OpenVMS.
+
+ --------------------------------------------------------------
+ -- Handling of Unconstrained Values Returned from Functions --
+ --------------------------------------------------------------
+
+ -- Functions that return variable length objects, notably unconstrained
+ -- arrays are a special case, because there is no simple obvious way of
+ -- implementing this feature. Furthermore, this capability is not present
+ -- in C++ or C, so typically the system ABI does not handle this case.
+
+ -- GNAT uses two different approaches
+
+ -- The Secondary Stack
+
+ -- The secondary stack is a special storage pool that is used for
+ -- this purpose. The called function places the result on the
+ -- secondary stack, and the caller uses or copies the value from
+ -- the secondary stack, and pops the secondary stack after the
+ -- value is consumed. The secondary stack is outside the system
+ -- ABI, and the important point is that although generally it is
+ -- handled in a stack like manner corresponding to the subprogram
+ -- call structure, a return from a function does NOT pop the stack.
+
+ -- DSP (Depressed Stack Pointer)
+
+ -- Some targets permit the implementation of a function call/return
+ -- protocol in which the function does not pop the main stack pointer
+ -- on return, but rather returns with the stack pointer depressed.
+ -- This is not generally permitted by any ABI, but for at least some
+ -- targets, the implementation of alloca provides a model for this
+ -- approach. If return-with-DSP is implemented, then functions that
+ -- return variable length objects do it by returning with the stack
+ -- pointer depressed, and the returned object is a pointer to the
+ -- area within the stack frame of the called procedure that contains
+ -- the returned value. The caller must then pop the main stack when
+ -- this value is consumed.
+
+ Functions_Return_By_DSP_On_Target : Boolean;
+ -- Set to True if target permits functions to return with using the
+ -- DSP (depressed stack pointer) approach.
+
+ -----------------
+ -- Data Layout --
+ -----------------
+
+ -- Normally when using the GCC backend, Gigi and GCC perform much of the
+ -- data layout using the standard layout capabilities of GCC. If the
+ -- parameter Backend_Layout is set to False, then the front end must
+ -- perform all data layout. For further details see the package Layout.
+
+ Frontend_Layout_On_Target : Boolean;
+ -- Set True if front end does layout
+
+ -----------------
+ -- Subprograms --
+ -----------------
+
+ procedure Get_Target_Parameters;
+ -- Called at the start of execution to read the source of System and
+ -- obtain and set the values of the above parameters.
+
+end Targparm;