pragma Interrupt_State ([Name =>] value, [State =>] SYSTEM | RUNTIME | USER);
Normally certain interrupts are reserved to the implementation. Any attempt
to attach an interrupt causes Program_Error to be raised, as described in
RM C.3.2(22). A typical example is the
SIGINT interrupt used in
many systems for an
Ctrl-C interrupt. Normally this interrupt is
reserved to the implementation, so that
Ctrl-C can be used to
interrupt execution. Additionally, signals such as
SIGILL are often mapped to specific
Ada exceptions, or used to implement run-time functions such as the
abort statement and stack overflow checking.
Interrupt_State provides a general mechanism for overriding
such uses of interrupts. It subsumes the functionality of pragma
Interrupt_State is not
available on Windows or VMS. On all other platforms than VxWorks,
it applies to signals; on VxWorks, it applies to vectored hardware interrupts
and may be used to mark interrupts required by the board support package
Interrupts can be in one of three states:
The interrupt is reserved (no Ada handler can be installed), and the Ada run-time may not install a handler. As a result you are guaranteed standard system default action if this interrupt is raised. This also allows installing a low level handler via C APIs such as sigaction(), outside of Ada control.
The interrupt is reserved (no Ada handler can be installed). The run time is allowed to install a handler for internal control purposes, but is not required to do so.
The interrupt is unreserved. The user may install an Ada handler via Ada.Interrupts and pragma Interrupt_Handler or Attach_Handler to provide some other action.
These states are the allowed values of the
State parameter of the
Name parameter is a value of the type
Ada.Interrupts.Interrupt_ID. Typically, it is a name declared in
This is a configuration pragma, and the binder will check that there are no inconsistencies between different units in a partition in how a given interrupt is specified. It may appear anywhere a pragma is legal.
The effect is to move the interrupt to the specified state.
By declaring interrupts to be SYSTEM, you guarantee the standard system action, such as a core dump.
By declaring interrupts to be USER, you guarantee that you can install a handler.
Note that certain signals on many operating systems cannot be caught and
handled by applications. In such cases, the pragma is ignored. See the
operating system documentation, or the value of the array
declared in the spec of package
Overriding the default state of signals used by the Ada runtime may interfere
with an application’s runtime behavior in the cases of the synchronous signals,
and in the case of the signal used to implement the