summaryrefslogtreecommitdiff
path: root/gcc/ada/s-intman.ads
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ada/s-intman.ads')
-rw-r--r--gcc/ada/s-intman.ads98
1 files changed, 45 insertions, 53 deletions
diff --git a/gcc/ada/s-intman.ads b/gcc/ada/s-intman.ads
index 306df161741..2353c9b29bf 100644
--- a/gcc/ada/s-intman.ads
+++ b/gcc/ada/s-intman.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1991-2001 Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2003 Free Software Foundation, Inc. --
-- --
-- GNARL is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -27,36 +27,36 @@
-- covered by the GNU Public License. --
-- --
-- GNARL was developed by the GNARL team at Florida State University. --
--- Extensive contributions were provided by Ada Core Technologies Inc. --
+-- Extensive contributions were provided by Ada Core Technologies, Inc. --
-- --
------------------------------------------------------------------------------
--- This package encapsulates and centralizes information about
--- all uses of interrupts (or signals), including the
--- target-dependent mapping of interrupts (or signals) to exceptions.
+-- This package encapsulates and centralizes information about all
+-- uses of interrupts (or signals), including the target-dependent
+-- mapping of interrupts (or signals) to exceptions.
--- PLEASE DO NOT add any with-clauses to this package.
--- This is designed to work for both tasking and non-tasking systems,
--- without pulling in any of the tasking support.
+-- Unlike the original design, System.Interrupt_Management can only
+-- be used for tasking systems.
-- PLEASE DO NOT remove the Elaborate_Body pragma from this package.
-- Elaboration of this package should happen early, as most other
--- initializations depend on it.
--- Forcing immediate elaboration of the body also helps to enforce
--- the design assumption that this is a second-level
--- package, just one level above System.OS_Interface, with no
--- cross-dependences.
+-- initializations depend on it. Forcing immediate elaboration of
+-- the body also helps to enforce the design assumption that this
+-- is a second-level package, just one level above System.OS_Interface
+-- with no cross-dependencies.
-- PLEASE DO NOT put any subprogram declarations with arguments of
--- type Interrupt_ID into the visible part of this package.
--- The type Interrupt_ID is used to derive the type in Ada.Interrupts,
--- and adding more operations to that type would be illegal according
--- to the Ada Reference Manual. (This is the reason why the signals sets
--- below are implemented as visible arrays rather than functions.)
+-- type Interrupt_ID into the visible part of this package. The type
+-- Interrupt_ID is used to derive the type in Ada.Interrupts, and
+-- adding more operations to that type would be illegal according
+-- to the Ada Reference Manual. This is the reason why the signals
+-- sets are implemeneted using visible arrays rather than functions.
with System.OS_Interface;
--- used for Signal
--- sigset_t
+-- used for sigset_t
+
+with Interfaces.C;
+-- used for int
package System.Interrupt_Management is
@@ -64,53 +64,44 @@ package System.Interrupt_Management is
type Interrupt_Mask is limited private;
- type Interrupt_ID is new System.OS_Interface.Signal;
+ type Interrupt_ID is new Interfaces.C.int
+ range 0 .. System.OS_Interface.Max_Interrupt;
type Interrupt_Set is array (Interrupt_ID) of Boolean;
-- The following objects serve as constants, but are initialized
- -- in the body to aid portability. This permits us
- -- to use more portable names for interrupts,
- -- where distinct names may map to the same interrupt ID value.
+ -- in the body to aid portability. This permits us to use more
+ -- portable names for interrupts, where distinct names may map to
+ -- the same interrupt ID value.
+ --
-- For example, suppose SIGRARE is a signal that is not defined on
- -- all systems, but is always reserved when it is defined.
- -- If we have the convention that ID zero is not used for any "real"
+ -- all systems, but is always reserved when it is defined. If we
+ -- have the convention that ID zero is not used for any "real"
-- signals, and SIGRARE = 0 when SIGRARE is not one of the locally
-- supported signals, we can write
-- Reserved (SIGRARE) := true;
-- and the initialization code will be portable.
Abort_Task_Interrupt : Interrupt_ID;
- -- The interrupt that is used to implement task abortion,
- -- if an interrupt is used for that purpose.
- -- This is one of the reserved interrupts.
+ -- The interrupt that is used to implement task abortion if
+ -- an interrupt is used for that purpose. This is one of the
+ -- reserved interrupts.
Keep_Unmasked : Interrupt_Set := (others => False);
- -- Keep_Unmasked (I) is true iff the interrupt I is
- -- one that must be kept unmasked at all times,
- -- except (perhaps) for short critical sections.
- -- This includes interrupts that are mapped to exceptions
- -- (see System.Interrupt_Exceptions.Is_Exception), but may also
- -- include interrupts (e.g. timer) that need to be kept unmasked
- -- for other reasons.
- -- Where interrupts are implemented as OS signals, and signal masking
- -- is per-task, the interrupt should be unmasked in ALL TASKS.
+ -- Keep_Unmasked (I) is true iff the interrupt I is one that must
+ -- that must be kept unmasked at all times, except (perhaps) for
+ -- short critical sections. This includes interrupts that are
+ -- mapped to exceptions (see System.Interrupt_Exceptions.Is_Exception),
+ -- but may also include interrupts (e.g. timer) that need to be kept
+ -- unmasked for other reasons. Where interrupts are implemented as
+ -- OS signals, and signal masking is per-task, the interrupt should
+ -- be unmasked in ALL TASKS.
Reserve : Interrupt_Set := (others => False);
- -- Reserve (I) is true iff the interrupt I is one that
- -- cannot be permitted to be attached to a user handler.
- -- The possible reasons are many. For example,
- -- it may be mapped to an exception, used to implement task abortion,
- -- or used to implement time delays.
-
- Keep_Masked : Interrupt_Set := (others => False);
- -- Keep_Masked (I) is true iff the interrupt I must always be masked.
- -- Where interrupts are implemented as OS signals, and signal masking
- -- is per-task, the interrupt should be masked in ALL TASKS.
- -- There might not be any interrupts in this class, depending on
- -- the environment. For example, if interrupts are OS signals
- -- and signal masking is per-task, use of the sigwait operation
- -- requires the signal be masked in all tasks.
+ -- Reserve (I) is true iff the interrupt I is one that cannot be
+ -- permitted to be attached to a user handler. The possible reasons
+ -- are many. For example, it may be mapped to an exception used to
+ -- implement task abortion, or used to implement time delays.
procedure Initialize_Interrupts;
-- On systems where there is no signal inheritance between tasks (e.g
@@ -120,6 +111,7 @@ package System.Interrupt_Management is
private
type Interrupt_Mask is new System.OS_Interface.sigset_t;
- -- in some implementation Interrupt_Mask can be represented
+ -- In some implementation Interrupt_Mask can be represented
-- as a linked list.
+
end System.Interrupt_Management;