Ada Reference Manual (Ada 2022) — Legal Information

# H.6 Pragma Partition_Elaboration_Policy

1/3
This subclause defines a pragma for user control over elaboration policy.

#### Syntax

2/2
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.

#### Post-Compilation Rules

5/2
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/3
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
Notwithstanding 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.
8/2
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
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
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/3
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.

#### Implementation Permissions

16/3
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/5
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.

Ada 2005 and 2012 Editions sponsored in part by Ada-Europe