diff options
Diffstat (limited to 'gcc/ada/s-intman.ads')
-rw-r--r-- | gcc/ada/s-intman.ads | 98 |
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; |