H.6 Pragma Partition_Elaboration_Policy
This Reference Manual output has not been verified, and may contain omissions or errors. Report any problems on the tracking issue
This subclause defines a pragma
for user control over elaboration policy.
Syntax
2/2The form of a pragma
Partition_Elaboration_Policy is as follows:
pragma Partition_Elaboration_Policy (policy_identifier
);
The policy_identifier
shall be either Sequential, Concurrent or an implementation-defined identifier.
Implementation-defined policy_identifier
s allowed in a pragma
Partition_Elaboration_Policy.
Note that the Ravenscar profile (see D.13) has nothing to say about which Partition_Elaboration_Policy is used. This was intentionally omitted from the profile, as there was no agreement as to whether the Sequential policy should be required for Ravenscar programs. As such it was defined separately.
Post-Compilation Rules
5/2A pragma
Partition_Elaboration_Policy is a configuration pragma. It specifies the elaboration policy for a partition. At most one elaboration policy shall be specified for a partition.
If the Sequential policy is specified for a partition, then pragma Restrictions (No_Task_Hierarchy) shall also be specified for the partition.
Dynamic Semantics
7/2Notwithstanding what this document says elsewhere, this pragma
allows partition elaboration rules concerning task activation and interrupt attachment to be changed. If the policy_identifier
is Concurrent, or if there is no pragma Partition_Elaboration_Policy defined for the partition, then the rules defined elsewhere in this Reference Manual apply.
If the partition elaboration policy is Sequential, then task activation and interrupt attachment are performed in the following sequence of steps:
- The activation of all library-level tasks and the attachment of interrupt handlers are deferred until all library units are elaborated.
- The interrupt handlers are attached by the environment task.
- The environment task is suspended while the library-level tasks are activated.
- The environment task executes the main subprogram (if any) concurrently with these executing tasks.
If several dynamic interrupt handler attachments for the same interrupt are deferred, then the most recent call of Attach_Handler or Exchange_Handler determines which handler is attached.
If any deferred task activation fails, Tasking_Error is raised at the beginning of the sequence of statements of the body of the environment task prior to calling the main subprogram.
Implementation Advice
15/3If the partition elaboration policy is Sequential and the Environment task becomes permanently blocked during elaboration, then the partition is deadlocked and it is recommended that the partition be immediately terminated.
If the partition elaboration policy is Sequential and the Environment task becomes permanently blocked during elaboration, then the partition should be immediately terminated.
Implementation Permissions
16/3If the partition elaboration policy is Sequential and any task activation fails, then an implementation may immediately terminate the active partition to mitigate the hazard posed by continuing to execute with a subset of the tasks being active.
NOTE If any deferred task activation fails, the environment task is unable to handle the Tasking_Error exception and completes immediately. By contrast, if the partition elaboration policy is Concurrent, then this exception can be handled within a library unit.