aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/s-intman-posix.adb
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2005-09-05 09:46:06 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2005-09-05 09:46:06 +0200
commit3b91d88ea1deb4d40b294c12536cbfc9f8137d54 (patch)
treea6cb1c584d1988e1b5e855ab100aea15d2e374d2 /gcc/ada/s-intman-posix.adb
parentca88769356a174361bf9c343dcbe8ea41192a662 (diff)
downloadgcc-3b91d88ea1deb4d40b294c12536cbfc9f8137d54.zip
gcc-3b91d88ea1deb4d40b294c12536cbfc9f8137d54.tar.gz
gcc-3b91d88ea1deb4d40b294c12536cbfc9f8137d54.tar.bz2
a-calend-mingw.adb: Add call to OS_Primitives.Initialize;
* a-calend-mingw.adb: Add call to OS_Primitives.Initialize; * s-taprop-mingw.adb, s-taprop-vms.adb, s-taprop-solaris.adb, s-taprop-os2.adb, s-taprop-irix-athread.adb, s-taprop-linux.adb, s-taprop-hpux-dce.adb, s-taprop-irix.adb, s-taprop-tru64.adb, s-taprop-lynxos.adb: Move with clauses outside Warnings Off now that dependent units are Preelaborate. (Initialize): Call Interrupt_Managemeent.Initialize and OS_Primitives.Initialize to ensure proper initialization of this unit. Remove use of System.Soft_Links Make this unit Preelaborate. * s-stache.ads, s-taspri-vxworks.ads, s-taspri-mingw.ads, s-taspri-vms.ads, s-tasinf-solaris.ads, s-taspri-os2.ads, s-taspri-lynxos.ads, s-taspri-hpux-dce.ads, s-taspri-tru64.ads, s-tasinf-tru64.ads, s-tasinf-irix.ads, s-tasinf-irix-athread.ads, s-proinf-irix-athread.adb, s-proinf-irix-athread.ads, s-tratas.ads, s-tasinf.ads: Minor reformatting. Add pragma Preelaborate, since these packages are suitable for this categorization. Update comments. * s-traent-vms.ads, s-intman-dummy.adb, s-taprop-dummy.adb: Make this unit Preelaborate. * s-osprim-vxworks.adb, s-osprim-vms.adb, s-osprim-vms.ads, s-osprim-mingw.adb, s-intman-vxworks.ads, s-intman-vxworks.adb, s-intman-vms.adb, s-intman-mingw.adb, s-intman-vms.ads, s-osprim-unix.adb, s-osprim-os2.adb, s-osprim-solaris.adb, s-intman-solaris.adb, s-intman-irix-athread.adb, s-intman-irix.adb: Mark this unit Preelaborate. (Initialize): New procedure. Update comments. * s-taspri-linux.ads: Removed. * s-tpopsp-solaris.adb (Initialize): Create the key in this procedure, as done by other implementations (e.g. posix). * s-taprop.ads (Timed_Delay): Update spec since the caller now is responsible for deferring abort. Mark this unit Preelaborate. * s-taprob.adb, s-tarest.adb: Call System.Tasking.Initialize to ensure proper initialization of the tasking run-time. * s-tasdeb.ads: Mark this unit Preelaborate. (Known_Tasks): Add explicit default value to avoid elaboration code. * s-inmaop-vms.adb (Elaboration code): Add call to Interrupt_Management.Initialize since the elaboration code depends on proper initialization of this package. * s-intman.ads, s-inmaop-posix.adb, s-intman-posix.adb, s-osprim.ads, s-taprop-posix.adb, s-taspri-posix.ads, s-osprim-posix.adb: Make this unit Preelaborate. * a-calend.adb: Add call to OS_Primitives.Initialize * a-elchha.adb: Update use of Except.Id.Full_Name. Minor reformatting. Remove use of Ada.Exceptions.Traceback when possible, cleaner. * a-dynpri.adb, a-sytaco.adb, a-sytaco.ads: Move with clauses outside Warnings Off now that dependent units are Preelaborate. Use raise xxx with "..."; Ada 2005 form. * a-taside.ads, a-taside.adb: Remove some dependencies, to make it easier to make this unit truly Preelaborate. Rewrite some code to be conformant with Preelaborate rules. * g-os_lib.adb: Remove non-preelaborate code so that this unit can be marked Preelaborate in the future. * s-proinf.ads, g-string.ads, s-auxdec.ads, s-auxdec-vms_64.ads: Make these units Preelaborate. * s-exctab.adb: Update use of Except.Id.Full_Name. * s-soflin.ads, s-soflin.adb: Mark this unit Preelaborate_05. (Set_Exc_Stack_Addr_Soft, Get_Exc_Stack_Addr_NT, Set_Exc_Stack_Addr_NT, Set_Exc_Stack_Addr): Removed, no longer used. Remove reference to *Machine_State_Addr*, no longer needed. * s-stalib.ads: Mark this unit as Preelaborate[_05]. (Exception_Data): Full_Name is now a System.Address so that this unit can be made Preelaborate. Clean up/simplify code thanks to Full_Name being a System.Address. Remove obsolete pragma Suppress (All_Checks), no longer needed. * s-taskin.ads, s-taskin.adb: Move with clauses outside Warnings Off now that dependent units are Preelaborate. Make this unit Preelaborate. (Initialize): New proceduure, replace elaboration code and makes the set up of the tasking run-time cleaner. (Detect_Blocking): Now a function instead of a deferred boolean, to obey Preelaborate rules. * s-tassta.adb (Finalize_Global_Tasks): Remove Get/Set_Exc_Stack_Addr soft links, no longer used. * s-traces.ads, s-traent.ads: Add pragma Preelaborate, since these packages are suitable for this categorization. * s-solita.adb: Replace use of Ada.Exception by raise xxx with "..." since we compile run-time sources in Ada 2005 mode. (Timed_Delay_T): Call Abort_Defer/Undefer around Timed_Delay, to avoid having s-taprop*.adb depend on s-soflin and to avoid code duplication. Remove reference to *Machine_State_Addr*, no longer needed. From-SVN: r103847
Diffstat (limited to 'gcc/ada/s-intman-posix.adb')
-rw-r--r--gcc/ada/s-intman-posix.adb56
1 files changed, 29 insertions, 27 deletions
diff --git a/gcc/ada/s-intman-posix.adb b/gcc/ada/s-intman-posix.adb
index d363300..26ddbe5 100644
--- a/gcc/ada/s-intman-posix.adb
+++ b/gcc/ada/s-intman-posix.adb
@@ -33,12 +33,6 @@
-- This is the POSIX threads version of this package
--- PLEASE DO NOT add any dependences on other packages. ??? why not ???
--- This package is designed to work with or without tasking support.
-
--- See the other warnings in the package specification before making
--- any modifications to this file.
-
-- Make a careful study of all signals available under the OS, to see which
-- need to be reserved, kept always unmasked, or kept always unmasked. Be on
-- the lookout for special signals that may be used by the thread library.
@@ -88,6 +82,21 @@ package body System.Interrupt_Management is
-- Local Subprograms --
-----------------------
+ function State (Int : Interrupt_ID) return Character;
+ pragma Import (C, State, "__gnat_get_interrupt_state");
+ -- Get interrupt state. Defined in init.c
+ -- The input argument is the interrupt number,
+ -- and the result is one of the following:
+
+ User : constant Character := 'u';
+ Runtime : constant Character := 'r';
+ Default : constant Character := 's';
+ -- 'n' this interrupt not set by any Interrupt_State pragma
+ -- 'u' Interrupt_State pragma set state to User
+ -- 'r' Interrupt_State pragma set state to Runtime
+ -- 's' Interrupt_State pragma set state to System (use "default"
+ -- system handler)
+
procedure Notify_Exception
(signo : Signal;
siginfo : System.Address;
@@ -154,32 +163,24 @@ package body System.Interrupt_Management is
end case;
end Notify_Exception;
--------------------------
--- Package Elaboration --
--------------------------
+ ----------------
+ -- Initialize --
+ ----------------
-begin
- declare
+ Initialized : Boolean := False;
+
+ procedure Initialize is
act : aliased struct_sigaction;
old_act : aliased struct_sigaction;
Result : System.OS_Interface.int;
- function State (Int : Interrupt_ID) return Character;
- pragma Import (C, State, "__gnat_get_interrupt_state");
- -- Get interrupt state. Defined in a-init.c
- -- The input argument is the interrupt number,
- -- and the result is one of the following:
-
- User : constant Character := 'u';
- Runtime : constant Character := 'r';
- Default : constant Character := 's';
- -- 'n' this interrupt not set by any Interrupt_State pragma
- -- 'u' Interrupt_State pragma set state to User
- -- 'r' Interrupt_State pragma set state to Runtime
- -- 's' Interrupt_State pragma set state to System (use "default"
- -- system handler)
-
begin
+ if Initialized then
+ return;
+ end if;
+
+ Initialized := True;
+
-- Need to call pthread_init very early because it is doing signal
-- initializations.
@@ -295,5 +296,6 @@ begin
-- mark it as reserved.
Reserve (0) := True;
- end;
+ end Initialize;
+
end System.Interrupt_Management;