H.6 Pragma Partition_Elaboration_Policy
1/2
{
AI95-00265-01}
This clause defines a pragma
for user control over elaboration policy.
Syntax
2/2
{
AI95-00265-01}
The form of a pragma
Partition_Elaboration_Policy is as follows:
3/2
pragma
Partition_Elaboration_Policy
(policy_identifier);
4/2
The policy_identifier
shall be either Sequential, Concurrent or an implementation-defined identifier.
4.a/2
Implementation defined:
Implementation-defined policy_identifiers
allowed in a pragma Partition_Elaboration_Policy.
Post-Compilation Rules
5/2
{
AI95-00265-01}
{configuration
pragma (Partition_Elaboration_Policy) [partial]} {pragma,
configuration (Partition_Elaboration_Policy) [partial]} A
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.
6/2
{
AI95-00265-01}
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/2
{
AI95-00265-01}
Notwithstanding what this International Standard
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 Standard
apply.
8/2
{
AI95-00265-01}
{
AI95-00421-01}
If the partition elaboration policy is Sequential,
then task activation and interrupt attachment are performed in the following
sequence of steps:
9/2
- The activation
of all library-level tasks and the attachment of interrupt handlers are
deferred until all library units are elaborated.
10/2
- The interrupt
handlers are attached by the environment task.
11/2
- The environment
task is suspended while the library-level tasks are activated.
12/2
- The environment
task executes the main subprogram (if any) concurrently with these executing
tasks.
13/2
{
AI95-00265-01}
{
AI95-00421-01}
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.
14/2
{
AI95-00265-01}
{
AI95-00421-01}
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/2
{
AI95-00265-01}
If 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.
15.a/2
Implementation Advice:
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/2
{
AI95-00265-01}
If 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.
17/2
12 {
AI95-00421-01}
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 could be handled within a library unit.
Extensions to Ada 95
17.a/2