Pragma Partition_Elaboration_Policy
Author: JTC1/SC22/WG9/ARG, by Randall Brukardt, ARG Editor

Ada Reference Manual — Legal Information

# H.6 Pragma Partition_Elaboration_Policy

1/2
This clause 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/2
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 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
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/2
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/2
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.
NOTES
17/2
12 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.

Sponsored by Ada-Europe