]>
Commit | Line | Data |
---|---|---|
84481f76 RK |
1 | ------------------------------------------------------------------------------ |
2 | -- -- | |
3 | -- GNAT COMPILER COMPONENTS -- | |
4 | -- -- | |
5 | -- S Y S T E M . P A R A M E T E R S -- | |
6 | -- -- | |
7 | -- S p e c -- | |
8 | -- -- | |
748086b7 | 9 | -- Copyright (C) 1992-2009, Free Software Foundation, Inc. -- |
84481f76 RK |
10 | -- -- |
11 | -- GNAT is free software; you can redistribute it and/or modify it under -- | |
12 | -- terms of the GNU General Public License as published by the Free Soft- -- | |
748086b7 | 13 | -- ware Foundation; either version 3, or (at your option) any later ver- -- |
84481f76 RK |
14 | -- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- |
15 | -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- | |
748086b7 JJ |
16 | -- or FITNESS FOR A PARTICULAR PURPOSE. -- |
17 | -- -- | |
18 | -- As a special exception under Section 7 of GPL version 3, you are granted -- | |
19 | -- additional permissions described in the GCC Runtime Library Exception, -- | |
20 | -- version 3.1, as published by the Free Software Foundation. -- | |
21 | -- -- | |
22 | -- You should have received a copy of the GNU General Public License and -- | |
23 | -- a copy of the GCC Runtime Library Exception along with this program; -- | |
24 | -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- | |
25 | -- <http://www.gnu.org/licenses/>. -- | |
84481f76 RK |
26 | -- -- |
27 | -- GNAT was originally developed by the GNAT team at New York University. -- | |
71ff80dc | 28 | -- Extensive contributions were provided by Ada Core Technologies Inc. -- |
84481f76 RK |
29 | -- -- |
30 | ------------------------------------------------------------------------------ | |
31 | ||
261ce0eb | 32 | -- This is the OpenVMS Alpha version |
84481f76 RK |
33 | |
34 | -- This package defines some system dependent parameters for GNAT. These | |
35 | -- are values that are referenced by the runtime library and are therefore | |
36 | -- relevant to the target machine. | |
37 | ||
38 | -- The parameters whose value is defined in the spec are not generally | |
39 | -- expected to be changed. If they are changed, it will be necessary to | |
40 | -- recompile the run-time library. | |
41 | ||
42 | -- The parameters which are defined by functions can be changed by modifying | |
43 | -- the body of System.Parameters in file s-parame.adb. A change to this body | |
44 | -- requires only rebinding and relinking of the application. | |
45 | ||
46 | -- Note: do not introduce any pragma Inline statements into this unit, since | |
47 | -- otherwise the relinking and rebinding capability would be deactivated. | |
48 | ||
49 | package System.Parameters is | |
009186e0 | 50 | pragma Pure; |
84481f76 RK |
51 | |
52 | --------------------------------------- | |
53 | -- Task And Stack Allocation Control -- | |
54 | --------------------------------------- | |
55 | ||
56 | type Task_Storage_Size is new Integer; | |
57 | -- Type used in tasking units for task storage size | |
58 | ||
59 | type Size_Type is new Task_Storage_Size; | |
60 | -- Type used to provide task storage size to runtime | |
61 | ||
62 | Unspecified_Size : constant Size_Type := Size_Type'First; | |
63 | -- Value used to indicate that no size type is set | |
64 | ||
65 | subtype Ratio is Size_Type range -1 .. 100; | |
66 | Dynamic : constant Size_Type := -1; | |
67 | -- The secondary stack ratio is a constant between 0 and 100 which | |
68 | -- determines the percentage of the allocated task stack that is | |
69 | -- used by the secondary stack (the rest being the primary stack). | |
70 | -- The special value of minus one indicates that the secondary | |
71 | -- stack is to be allocated from the heap instead. | |
72 | ||
73 | Sec_Stack_Ratio : constant Ratio := Dynamic; | |
74 | -- This constant defines the handling of the secondary stack | |
75 | ||
76 | Sec_Stack_Dynamic : constant Boolean := Sec_Stack_Ratio = Dynamic; | |
77 | -- Convenient Boolean for testing for dynamic secondary stack | |
78 | ||
79 | function Default_Stack_Size return Size_Type; | |
80 | -- Default task stack size used if none is specified | |
81 | ||
82 | function Minimum_Stack_Size return Size_Type; | |
83 | -- Minimum task stack size permitted | |
84 | ||
85 | function Adjust_Storage_Size (Size : Size_Type) return Size_Type; | |
86 | -- Given the storage size stored in the TCB, return the Storage_Size | |
87 | -- value required by the RM for the Storage_Size attribute. The | |
88 | -- required adjustment is as follows: | |
89 | -- | |
90 | -- when Size = Unspecified_Size, return Default_Stack_Size | |
91 | -- when Size < Minimum_Stack_Size, return Minimum_Stack_Size | |
92 | -- otherwise return given Size | |
93 | ||
bcea76b6 GB |
94 | Default_Env_Stack_Size : constant Size_Type := 8_192_000; |
95 | -- Assumed size of the environment task, if no other information | |
96 | -- is available. This value is used when stack checking is | |
97 | -- enabled and no GNAT_STACK_LIMIT environment variable is set. | |
98 | ||
84481f76 RK |
99 | Stack_Grows_Down : constant Boolean := True; |
100 | -- This constant indicates whether the stack grows up (False) or | |
101 | -- down (True) in memory as functions are called. It is used for | |
102 | -- proper implementation of the stack overflow check. | |
103 | ||
104 | ---------------------------------------------- | |
105 | -- Characteristics of types in Interfaces.C -- | |
106 | ---------------------------------------------- | |
107 | ||
108 | long_bits : constant := 32; | |
109 | -- Number of bits in type long and unsigned_long. The normal convention | |
110 | -- is that this is the same as type Long_Integer, but this is not true | |
111 | -- of all targets. For example, in OpenVMS long /= Long_Integer. | |
112 | ||
113 | ---------------------------------------------- | |
114 | -- Behavior of Pragma Finalize_Storage_Only -- | |
115 | ---------------------------------------------- | |
116 | ||
117 | -- Garbage_Collected is a Boolean constant whose value indicates the | |
118 | -- effect of the pragma Finalize_Storage_Entry on a controlled type. | |
119 | ||
120 | -- Garbage_Collected = False | |
121 | ||
122 | -- The system releases all storage on program termination only, | |
123 | -- but not other garbage collection occurs, so finalization calls | |
276e95ca | 124 | -- are omitted only for outer level objects can be omitted if |
84481f76 RK |
125 | -- pragma Finalize_Storage_Only is used. |
126 | ||
127 | -- Garbage_Collected = True | |
128 | ||
129 | -- The system provides full garbage collection, so it is never | |
130 | -- necessary to release storage for controlled objects for which | |
131 | -- a pragma Finalize_Storage_Only is used. | |
132 | ||
133 | Garbage_Collected : constant Boolean := False; | |
134 | -- The storage mode for this system (release on program exit) | |
135 | ||
07fc65c4 GB |
136 | --------------------- |
137 | -- Tasking Profile -- | |
138 | --------------------- | |
139 | ||
140 | -- In the following sections, constant parameters are defined to | |
fbf5a39b AC |
141 | -- allow some optimizations and fine tuning within the tasking run time |
142 | -- based on restrictions on the tasking features. | |
07fc65c4 GB |
143 | |
144 | ---------------------- | |
145 | -- Locking Strategy -- | |
146 | ---------------------- | |
147 | ||
148 | Single_Lock : constant Boolean := True; | |
149 | -- Indicates whether a single lock should be used within the tasking | |
150 | -- run-time to protect internal structures. If True, a single lock | |
151 | -- will be used, meaning less locking/unlocking operations, but also | |
152 | -- more global contention. In general, Single_Lock should be set to | |
153 | -- True on single processor machines, and to False to multi-processor | |
154 | -- systems, but this can vary from application to application and also | |
155 | -- depends on the scheduling policy. | |
156 | ||
157 | ------------------- | |
158 | -- Task Abortion -- | |
159 | ------------------- | |
160 | ||
161 | No_Abort : constant Boolean := False; | |
162 | -- This constant indicates whether abort statements and asynchronous | |
163 | -- transfer of control (ATC) are disallowed. If set to True, it is | |
164 | -- assumed that neither construct is used, and the run time does not | |
165 | -- need to defer/undefer abort and check for pending actions at | |
166 | -- completion points. A value of True for No_Abort corresponds to: | |
167 | -- pragma Restrictions (No_Abort_Statements); | |
168 | -- pragma Restrictions (Max_Asynchronous_Select_Nesting => 0); | |
169 | ||
fbf5a39b AC |
170 | --------------------- |
171 | -- Task Attributes -- | |
172 | --------------------- | |
173 | ||
174 | Default_Attribute_Count : constant := 4; | |
175 | -- Number of pre-allocated Address-sized task attributes stored in the | |
176 | -- task control block. | |
177 | ||
07fc65c4 GB |
178 | -------------------- |
179 | -- Runtime Traces -- | |
180 | -------------------- | |
181 | ||
182 | Runtime_Traces : constant Boolean := False; | |
183 | -- This constant indicates whether the runtime outputs traces to a | |
184 | -- predefined output or not (True means that traces are output). | |
185 | -- See System.Traces for more details. | |
186 | ||
dae22b53 AC |
187 | ----------------------- |
188 | -- Task Image Length -- | |
189 | ----------------------- | |
190 | ||
191 | Max_Task_Image_Length : constant := 256; | |
b11e8d6f | 192 | -- This constant specifies the maximum length of a task's image |
dae22b53 | 193 | |
df0db19f DR |
194 | ------------------------------ |
195 | -- Exception Message Length -- | |
196 | ------------------------------ | |
197 | ||
198 | Default_Exception_Msg_Max_Length : constant := 512; | |
199 | -- This constant specifies the maximum number of characters to allow in an | |
200 | -- exception message (see RM 11.4.1(18)). The value for VMS exceeds the | |
201 | -- default minimum of 200 to allow for the length of chained VMS condition | |
202 | -- handling messages. | |
203 | ||
84481f76 | 204 | end System.Parameters; |