]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/ada/libgnarl/s-intman__vxworks.adb
2017-09-25 Yannick Moy <moy@adacore.com>
[thirdparty/gcc.git] / gcc / ada / libgnarl / s-intman__vxworks.adb
CommitLineData
e6e7bf38 1------------------------------------------------------------------------------
2-- --
96d7aa32 3-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
e6e7bf38 4-- --
5-- S Y S T E M . I N T E R R U P T _ M A N A G E M E N T --
6-- --
7-- B o d y --
8-- --
6e2e029f 9-- Copyright (C) 1992-2017, Free Software Foundation, Inc. --
e6e7bf38 10-- --
11-- GNARL is free software; you can redistribute it and/or modify it under --
12-- terms of the GNU General Public License as published by the Free Soft- --
6bc9506f 13-- ware Foundation; either version 3, or (at your option) any later ver- --
14-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
e6e7bf38 15-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
6bc9506f 16-- or FITNESS FOR A PARTICULAR PURPOSE. --
17-- --
18-- As a special exception under Section 7 of GPL version 3, you are granted --
19-- additional permissions described in the GCC Runtime Library Exception, --
20-- version 3.1, as published by the Free Software Foundation. --
21-- --
f03f06a2 22-- You should have received a copy of the GNU General Public License and --
23-- a copy of the GCC Runtime Library Exception along with this program; --
24-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
25-- <http://www.gnu.org/licenses/>. --
e6e7bf38 26-- --
83f07f11 27-- GNARL was developed by the GNARL team at Florida State University. --
28-- Extensive contributions were provided by Ada Core Technologies, Inc. --
e6e7bf38 29-- --
30------------------------------------------------------------------------------
31
9925603e 32-- This is the VxWorks version of this package
e6e7bf38 33
c7b7b140 34-- It is simpler than other versions because the Ada interrupt handling
35-- mechanisms are used for hardware interrupts rather than signals.
e6e7bf38 36
e6e7bf38 37package body System.Interrupt_Management is
38
e6e7bf38 39 use System.OS_Interface;
e6e7bf38 40
cf428c6c 41 -----------------------
42 -- Local Subprograms --
43 -----------------------
e6e7bf38 44
51e69f04 45 function State (Int : Interrupt_ID) return Character;
46 pragma Import (C, State, "__gnat_get_interrupt_state");
9925603e 47 -- Get interrupt state. Defined in init.c The input argument is the
c7b7b140 48 -- hardware interrupt number, and the result is one of the following:
51e69f04 49
50 Runtime : constant Character := 'r';
51 Default : constant Character := 's';
52 -- 'n' this interrupt not set by any Interrupt_State pragma
53 -- 'u' Interrupt_State pragma set state to User
54 -- 'r' Interrupt_State pragma set state to Runtime
55 -- 's' Interrupt_State pragma set state to System (use "default"
56 -- system handler)
57
51e69f04 58 ----------------
59 -- Initialize --
60 ----------------
9dfe12ae 61
51e69f04 62 Initialized : Boolean := False;
9434216a 63 -- Set to True once Initialize is called, further calls have no effect
9dfe12ae 64
51e69f04 65 procedure Initialize is
9434216a 66
e6e7bf38 67 begin
51e69f04 68 if Initialized then
69 return;
70 end if;
71
72 Initialized := True;
9dfe12ae 73
e6e7bf38 74 -- Change this if you want to use another signal for task abort.
75 -- SIGTERM might be a good one.
76
d1470585 77 Abort_Task_Interrupt := SIGABRT;
9dfe12ae 78
9dfe12ae 79 -- Initialize hardware interrupt handling
80
81 pragma Assert (Reserve = (Interrupt_ID'Range => False));
82
83 -- Check all interrupts for state that requires keeping them reserved
84
85 for J in Interrupt_ID'Range loop
86 if State (J) = Default or else State (J) = Runtime then
87 Reserve (J) := True;
88 end if;
89 end loop;
cf428c6c 90
51e69f04 91 end Initialize;
92
e6e7bf38 93end System.Interrupt_Management;