|





| |
Restrictions and Profiles
This page defines how the
Ada 95 restrictions, accessible through the pragma Restrictions, are supported.
Unsafe features such as run-time dispatching and heap management are not
supported in the run-time system, so all the restrictions that are relevant for
these features are set to True by default.
The following restrictions are
built in. That is, they cannot be turned off and are exploited by the compiler
to offer better-quality generated code than would otherwise be possible.
 |
No_Abort_Statements |
 |
No_Dispatch |
 |
No_Local_Protected_Objects |
 |
No_Requeue |
 |
No_Task_Attributes |
 |
No_Task_Hierarchy |
 |
No_Terminate_Alternatives |
The implementation-defined
pragma Profile may also be used to set and unset restrictions that correspond to
a certain application area. The profiles supported are as follows:
Table B-1. Supported
Profiles
|
Profile Name |
Description |
|
XGC |
This is the default
profile and offers the least restrictions. |
|
Ravenscar |
This allows a limited
form of tasking that includes static tasks, protected objects, the delay
until statement and interrupts. |
|
Restricted_Run_Time |
This severely restricts
the use of non-deterministic language features (including tasking) and is
suitable for general avionics applications. |
|
No_Run_Time |
This profile prohibits
all calls to the predefined Ada library and is useful for safety-critical
applications. Calls to the compiler support library are not restricted. |
Table B-2 gives the individual restrictions for each profile. Note that the
built-in restrictions apply to all profiles.
Table B-2. Profiles and
Restrictions
|
Restriction |
Ada 95 Reference Manual Section |
Default |
Ravenscar |
Restricted_ Run_Time |
|
Boolean_Entry_Barriers |
XGC (Ravenscar) |
False |
True |
True |
|
Immediate_Reclamation |
RM H.4(10) |
False |
False |
False |
|
No_Abort_Statements |
RM D.7(5), H.4(3) |
True |
True |
True |
|
No_Access_Subprograms |
RM H.4(17) |
False |
True |
True |
|
No_Allocators |
RM H.4(7) |
False |
False |
True |
|
No_Asynchronous_Control |
RM D.9(10) |
False |
True |
True |
|
No_Calendar |
XGC |
False |
True |
True |
|
No_Delay |
RM H.4(21) |
False |
False |
True |
|
No_Dispatch |
RM H.4(19) |
True |
True |
True |
|
No_Dynamic_Interrupts |
XGC |
True |
True |
True |
|
No_Dynamic_Priorities |
RM D.9(9) |
False |
True |
True |
|
No_Elaboration_Code |
XGC |
False |
False |
True |
|
No_Entry_Calls_In_Elaboration_Code |
XGC |
False |
True |
True |
|
No_Entry_Queue |
XGC |
True |
True |
True |
|
No_Enumeration_Maps |
XGC |
False |
False |
True |
|
No_Exception_Handlers |
XGC |
False |
False |
True |
|
No_Exceptions |
RM H.4(12) |
False |
False |
False |
|
No_Fixed_Point |
RM H.4(15) |
False |
False |
False |
|
No_Floating_Point |
RM H.4(14) |
False |
False |
False |
|
No_Implementation_Attributes |
XGC |
False |
False |
True |
|
No_Implementation_Pragmas |
XGC |
False |
False |
True |
|
No_Implementation_Restrictions |
XGC |
False |
False |
True |
|
No_Implicit_Conditionals |
XGC |
False |
False |
True |
|
No_Implicit_Heap_Allocations |
RM D.8(8), H.4(3) |
False |
True |
True |
|
No_Implicit_Loops |
XGC |
False |
False |
False |
|
No_IO |
RM H.4(20) |
False |
True |
True |
|
No_Local_Allocators |
RM H.4(8) |
False |
True |
True |
|
No_Local_Protected_Objects |
XGC |
True |
True |
True |
|
No_Nested_Finalization |
RM D.7(4) |
True |
True |
True |
|
No_Protected_Type_Allocators |
XGC |
True |
True |
True |
|
No_Protected_Types |
RM H.4(5) |
False |
False |
True |
|
No_Recursion |
RM H.4(22) |
False |
True |
True |
|
No_Reentrancy |
RM H.4(23) |
False |
False |
False |
|
No_Relative_Delay |
XGC |
False |
True |
True |
|
No_Requeue |
XGC |
True |
True |
True |
|
No_Select_Statements |
XGC (Ravenscar) |
False |
True |
True |
|
No_Standard_Storage_Pools |
XGC |
True |
True |
True |
|
No_Streams |
XGC |
True |
True |
True |
|
No_Task_Allocators |
RM D.7(7) |
False |
True |
True |
|
No_Task_Attributes |
XGC |
True |
True |
True |
|
No_Task_Hierarchy |
RM D.7(3), H.4(3) |
True |
True |
True |
|
No_Task_Termination |
XGC |
True |
True |
True |
|
No_Terminate_Alternatives |
RM D.7(6) |
True |
True |
True |
|
No_Unchecked_Access |
RM H.4(18) |
False |
True |
True |
|
No_Unchecked_Conversion |
RM H.4(16) |
False |
False |
True |
|
No_Unchecked_Deallocation |
RM H.4(9) |
True |
True |
True |
|
No_Wide_Characters |
XGC |
False |
True |
True |
|
Static_Priorities |
XGC |
False |
True |
True |
|
Static_Storage_Size |
XGC |
False |
True |
True |
Table B-3 gives the restrictions concerning numerical limits.
Table B-3. Profiles and
Numerical Restrictions
|
Restriction |
Ada 95 Reference Manual Section |
Default |
Ravenscar |
Restricted_ Run_Time |
|
Max_Asynchronous_Select_Nesting |
RM D.7(18), H.4(2) |
0 |
0 |
0 |
|
Max_Protected_Entries |
RM D.7(14) |
1 |
1 |
1 |
|
Max_Select_Alternatives |
RM D.7(12) |
Undefined |
0 |
0 |
|
Max_Storage_At_Blocking |
RM D.7(17) |
0 |
0 |
0 |
|
Max_Task_Entries |
RM D.7(13), H.4(2) |
Undefined |
0 |
0 |
|
Max_Tasks |
RM D.7(19), H.4(2) |
Undefined |
Undefined |
Undefined |
|
Max_Entry_Queue_Depth |
Ravenscar specific |
1 |
1 |
1 |
Violation of the restriction
Max_Entry_Queue_Depth is detected at run time and raises the predefined
exception Program_Error.
|