]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - gcc/ada/s-taprop-vxworks.adb
trans-array.c (gfc_conv_descriptor_data_get): Rename from gfc_conv_descriptor_data.
[thirdparty/gcc.git] / gcc / ada / s-taprop-vxworks.adb
index 8bbbf0e13b043f80159752dfd6147b48791380e5..4298e09e84591baa163ab5476c19a4ac0f04b69d 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                  B o d y                                 --
 --                                                                          --
---         Copyright (C) 1992-2003, Free Software Foundation, Inc.          --
+--         Copyright (C) 1992-2005, 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- --
@@ -55,7 +55,7 @@ with System.Soft_Links;
 --  Note that we do not use System.Tasking.Initialization directly since
 --  this is a higher level package that we shouldn't depend on. For example
 --  when using the restricted run time, it is replaced by
---  System.Tasking.Restricted.Initialization
+--  System.Tasking.Restricted.Stages.
 
 with System.OS_Interface;
 --  used for various type, constant, and operations
@@ -65,7 +65,7 @@ with System.Parameters;
 
 with System.Tasking;
 --  used for Ada_Task_Control_Block
---           Task_ID
+--           Task_Id
 --           ATCB components and types
 
 with Interfaces.C;
@@ -91,16 +91,16 @@ package body System.Task_Primitives.Operations is
    -- Local Data --
    ----------------
 
-   --  The followings are logically constants, but need to be initialized
-   --  at run time.
+   --  The followings are logically constants, but need to be initialized at
+   --  run time.
 
    Single_RTS_Lock : aliased RTS_Lock;
-   --  This is a lock to allow only one thread of control in the RTS at
-   --  time; it is used to execute in mutual exclusion from all other tasks.
+   --  This is a lock to allow only one thread of control in the RTS at a
+   --  time; it is used to execute in mutual exclusion from all other tasks.
    --  Used mainly in Single_Lock mode, but also to protect All_Tasks_List
 
    ATCB_Key : aliased System.Address := System.Null_Address;
-   --  Key used to find the Ada Task_ID associated with a thread
+   --  Key used to find the Ada Task_Id associated with a thread
 
    ATCB_Key_Addr : System.Address := ATCB_Key'Address;
    pragma Export (Ada, ATCB_Key_Addr, "__gnat_ATCB_key_addr");
@@ -108,13 +108,13 @@ package body System.Task_Primitives.Operations is
    --  implementation. This mechanism is used to minimize impact on other
    --  targets.
 
-   Environment_Task_ID : Task_ID;
-   --  A variable to hold Task_ID for the environment task.
+   Environment_Task_Id : Task_Id;
+   --  A variable to hold Task_Id for the environment task
 
    Unblocked_Signal_Mask : aliased sigset_t;
    --  The set of signals that should unblocked in all tasks
 
-   --  The followings are internal configuration constants needed.
+   --  The followings are internal configuration constants needed
 
    Time_Slice_Val : Integer;
    pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
@@ -126,12 +126,12 @@ package body System.Task_Primitives.Operations is
    pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
 
    FIFO_Within_Priorities : constant Boolean := Dispatching_Policy = 'F';
-   --  Indicates whether FIFO_Within_Priorities is set.
+   --  Indicates whether FIFO_Within_Priorities is set
 
    Mutex_Protocol : Priority_Type;
 
    Foreign_Task_Elaborated : aliased Boolean := True;
-   --  Used to identified fake tasks (i.e., non-Ada Threads).
+   --  Used to identified fake tasks (i.e., non-Ada Threads)
 
    --------------------
    -- Local Packages --
@@ -143,40 +143,40 @@ package body System.Task_Primitives.Operations is
       pragma Inline (Is_Valid_Task);
       --  Does executing thread have a TCB?
 
-      procedure Set (Self_Id : Task_ID);
+      procedure Set (Self_Id : Task_Id);
       pragma Inline (Set);
-      --  Set the self id for the current task.
+      --  Set the self id for the current task
 
-      function Self return Task_ID;
+      function Self return Task_Id;
       pragma Inline (Self);
-      --  Return a pointer to the Ada Task Control Block of the calling task.
+      --  Return a pointer to the Ada Task Control Block of the calling task
 
    end Specific;
 
    package body Specific is separate;
-   --  The body of this package is target specific.
+   --  The body of this package is target specific
 
    ---------------------------------
    -- Support for foreign threads --
    ---------------------------------
 
-   function Register_Foreign_Thread (Thread : Thread_Id) return Task_ID;
-   --  Allocate and Initialize a new ATCB for the current Thread.
+   function Register_Foreign_Thread (Thread : Thread_Id) return Task_Id;
+   --  Allocate and Initialize a new ATCB for the current Thread
 
    function Register_Foreign_Thread
-     (Thread : Thread_Id) return Task_ID is separate;
+     (Thread : Thread_Id) return Task_Id is separate;
 
    -----------------------
    -- Local Subprograms --
    -----------------------
 
    procedure Abort_Handler (signo : Signal);
-   --  Handler for the abort (SIGABRT) signal to handle asynchronous abortion.
+   --  Handler for the abort (SIGABRT) signal to handle asynchronous abort
 
    procedure Install_Signal_Handlers;
    --  Install the default signal handlers for the current task
 
-   function To_Address is new Unchecked_Conversion (Task_ID, System.Address);
+   function To_Address is new Unchecked_Conversion (Task_Id, System.Address);
 
    -------------------
    -- Abort_Handler --
@@ -185,7 +185,7 @@ package body System.Task_Primitives.Operations is
    procedure Abort_Handler (signo : Signal) is
       pragma Unreferenced (signo);
 
-      Self_ID : constant Task_ID := Self;
+      Self_ID : constant Task_Id := Self;
       Result  : int;
       Old_Set : aliased sigset_t;
 
@@ -217,7 +217,7 @@ package body System.Task_Primitives.Operations is
    -- Stack_Guard --
    -----------------
 
-   procedure Stack_Guard (T : ST.Task_ID; On : Boolean) is
+   procedure Stack_Guard (T : ST.Task_Id; On : Boolean) is
       pragma Unreferenced (T);
       pragma Unreferenced (On);
 
@@ -231,7 +231,7 @@ package body System.Task_Primitives.Operations is
    -- Get_Thread_Id --
    -------------------
 
-   function Get_Thread_Id (T : ST.Task_ID) return OSI.Thread_Id is
+   function Get_Thread_Id (T : ST.Task_Id) return OSI.Thread_Id is
    begin
       return T.Common.LL.Thread;
    end Get_Thread_Id;
@@ -240,7 +240,7 @@ package body System.Task_Primitives.Operations is
    -- Self --
    ----------
 
-   function Self return Task_ID renames Specific.Self;
+   function Self return Task_Id renames Specific.Self;
 
    -----------------------------
    -- Install_Signal_Handlers --
@@ -346,7 +346,7 @@ package body System.Task_Primitives.Operations is
       end if;
    end Write_Lock;
 
-   procedure Write_Lock (T : Task_ID) is
+   procedure Write_Lock (T : Task_Id) is
       Result : int;
 
    begin
@@ -387,7 +387,7 @@ package body System.Task_Primitives.Operations is
       end if;
    end Unlock;
 
-   procedure Unlock (T : Task_ID) is
+   procedure Unlock (T : Task_Id) is
       Result : int;
 
    begin
@@ -401,7 +401,7 @@ package body System.Task_Primitives.Operations is
    -- Sleep --
    -----------
 
-   procedure Sleep (Self_ID : Task_ID; Reason : System.Tasking.Task_States) is
+   procedure Sleep (Self_ID : Task_Id; Reason : System.Tasking.Task_States) is
       pragma Unreferenced (Reason);
 
       Result : int;
@@ -409,7 +409,8 @@ package body System.Task_Primitives.Operations is
    begin
       pragma Assert (Self_ID = Self);
 
-      --  Release the mutex before sleeping.
+      --  Release the mutex before sleeping
+
       if Single_Lock then
          Result := semGive (Single_RTS_Lock.Mutex);
       else
@@ -418,15 +419,16 @@ package body System.Task_Primitives.Operations is
 
       pragma Assert (Result = 0);
 
-      --  Perform a blocking operation to take the CV semaphore.
-      --  Note that a blocking operation in VxWorks will reenable
-      --  task scheduling. When we are no longer blocked and control
-      --  is returned, task scheduling will again be disabled.
+      --  Perform a blocking operation to take the CV semaphore. Note that a
+      --  blocking operation in VxWorks will reenable task scheduling. When we
+      --  are no longer blocked and control is returned, task scheduling will
+      --  again be disabled.
 
       Result := semTake (Self_ID.Common.LL.CV, WAIT_FOREVER);
       pragma Assert (Result = 0);
 
-      --  Take the mutex back.
+      --  Take the mutex back
+
       if Single_Lock then
          Result := semTake (Single_RTS_Lock.Mutex, WAIT_FOREVER);
       else
@@ -440,12 +442,11 @@ package body System.Task_Primitives.Operations is
    -- Timed_Sleep --
    -----------------
 
-   --  This is for use within the run-time system, so abort is
-   --  assumed to be already deferred, and the caller should be
-   --  holding its own ATCB lock.
+   --  This is for use within the run-time system, so abort is assumed to be
+   --  already deferred, and the caller should be holding its own ATCB lock.
 
    procedure Timed_Sleep
-     (Self_ID  : Task_ID;
+     (Self_ID  : Task_Id;
       Time     : Duration;
       Mode     : ST.Delay_Modes;
       Reason   : System.Tasking.Task_States;
@@ -467,9 +468,9 @@ package body System.Task_Primitives.Operations is
       if Mode = Relative then
          Absolute := Orig + Time;
 
-         --  Systematically add one since the first tick will delay
-         --  *at most* 1 / Rate_Duration seconds, so we need to add one to
-         --  be on the safe side.
+         --  Systematically add one since the first tick will delay *at most*
+         --  1 / Rate_Duration seconds, so we need to add one to be on the
+         --  safe side.
 
          Ticks := To_Clock_Ticks (Time);
 
@@ -484,7 +485,8 @@ package body System.Task_Primitives.Operations is
 
       if Ticks > 0 then
          loop
-            --  Release the mutex before sleeping.
+            --  Release the mutex before sleeping
+
             if Single_Lock then
                Result := semGive (Single_RTS_Lock.Mutex);
             else
@@ -493,14 +495,15 @@ package body System.Task_Primitives.Operations is
 
             pragma Assert (Result = 0);
 
-            --  Perform a blocking operation to take the CV semaphore.
-            --  Note that a blocking operation in VxWorks will reenable
-            --  task scheduling. When we are no longer blocked and control
-            --  is returned, task scheduling will again be disabled.
+            --  Perform a blocking operation to take the CV semaphore. Note
+            --  that a blocking operation in VxWorks will reenable task
+            --  scheduling. When we are no longer blocked and control is
+            --  returned, task scheduling will again be disabled.
 
             Result := semTake (Self_ID.Common.LL.CV, Ticks);
 
             if Result = 0 then
+
                --  Somebody may have called Wakeup for us
 
                Wakeup := True;
@@ -508,10 +511,11 @@ package body System.Task_Primitives.Operations is
             else
                if errno /= S_objLib_OBJ_TIMEOUT then
                   Wakeup := True;
+
                else
-                  --  If Ticks = int'last, it was most probably truncated
-                  --  so let's make another round after recomputing Ticks
-                  --  from the the absolute time.
+                  --  If Ticks = int'last, it was most probably truncated so
+                  --  let's make another round after recomputing Ticks from
+                  --  the the absolute time.
 
                   if Ticks /= int'Last then
                      Timedout := True;
@@ -525,7 +529,8 @@ package body System.Task_Primitives.Operations is
                end if;
             end if;
 
-            --  Take the mutex back.
+            --  Take the mutex back
+
             if Single_Lock then
                Result := semTake (Single_RTS_Lock.Mutex, WAIT_FOREVER);
             else
@@ -540,7 +545,8 @@ package body System.Task_Primitives.Operations is
       else
          Timedout := True;
 
-         --  Should never hold a lock while yielding.
+         --  Should never hold a lock while yielding
+
          if Single_Lock then
             Result := semGive (Single_RTS_Lock.Mutex);
             taskDelay (0);
@@ -558,11 +564,11 @@ package body System.Task_Primitives.Operations is
    -- Timed_Delay --
    -----------------
 
-   --  This is for use in implementing delay statements, so
-   --  we assume the caller is holding no locks.
+   --  This is for use in implementing delay statements, so we assume the
+   --  caller is holding no locks.
 
    procedure Timed_Delay
-     (Self_ID  : Task_ID;
+     (Self_ID  : Task_Id;
       Time     : Duration;
       Mode     : ST.Delay_Modes)
    is
@@ -582,9 +588,8 @@ package body System.Task_Primitives.Operations is
 
          if Ticks > 0 and then Ticks < int'Last then
 
-            --  The first tick will delay anytime between 0 and
-            --  1 / sysClkRateGet seconds, so we need to add one to
-            --  be on the safe side.
+            --  First tick will delay anytime between 0 and 1 / sysClkRateGet
+            --  seconds, so we need to add one to be on the safe side.
 
             Ticks := Ticks + 1;
          end if;
@@ -595,7 +600,9 @@ package body System.Task_Primitives.Operations is
       end if;
 
       if Ticks > 0 then
-         --  Modifying State and Pending_Priority_Change, locking the TCB.
+
+         --  Modifying State and Pending_Priority_Change, locking the TCB
+
          if Single_Lock then
             Result := semTake (Single_RTS_Lock.Mutex, WAIT_FOREVER);
          else
@@ -630,6 +637,7 @@ package body System.Task_Primitives.Operations is
             Result := semTake (Self_ID.Common.LL.CV, Ticks);
 
             if Result /= 0 then
+
                --  If Ticks = int'last, it was most probably truncated
                --  so let's make another round after recomputing Ticks
                --  from the the absolute time.
@@ -681,7 +689,6 @@ package body System.Task_Primitives.Operations is
    function Monotonic_Clock return Duration is
       TS     : aliased timespec;
       Result : int;
-
    begin
       Result := clock_gettime (CLOCK_REALTIME, TS'Unchecked_Access);
       pragma Assert (Result = 0);
@@ -701,11 +708,9 @@ package body System.Task_Primitives.Operations is
    -- Wakeup --
    ------------
 
-   procedure Wakeup (T : Task_ID; Reason : System.Tasking.Task_States) is
+   procedure Wakeup (T : Task_Id; Reason : System.Tasking.Task_States) is
       pragma Unreferenced (Reason);
-
       Result : int;
-
    begin
       Result := semGive (T.Common.LL.CV);
       pragma Assert (Result = 0);
@@ -736,7 +741,7 @@ package body System.Task_Primitives.Operations is
    --  with run-till-blocked scheduling.
 
    procedure Set_Priority
-     (T                   : Task_ID;
+     (T                   : Task_Id;
       Prio                : System.Any_Priority;
       Loss_Of_Inheritance : Boolean := False)
    is
@@ -752,6 +757,7 @@ package body System.Task_Primitives.Operations is
       if FIFO_Within_Priorities then
 
          --  Annex D requirement [RM D.2.2 par. 9]:
+
          --    If the task drops its priority due to the loss of inherited
          --    priority, it is added at the head of the ready queue for its
          --    new active priority.
@@ -785,7 +791,7 @@ package body System.Task_Primitives.Operations is
    -- Get_Priority --
    ------------------
 
-   function Get_Priority (T : Task_ID) return System.Any_Priority is
+   function Get_Priority (T : Task_Id) return System.Any_Priority is
    begin
       return T.Common.Current_Priority;
    end Get_Priority;
@@ -794,10 +800,10 @@ package body System.Task_Primitives.Operations is
    -- Enter_Task --
    ----------------
 
-   procedure Enter_Task (Self_ID : Task_ID) is
+   procedure Enter_Task (Self_ID : Task_Id) is
       procedure Init_Float;
       pragma Import (C, Init_Float, "__gnat_init_float");
-      --  Properly initializes the FPU for PPC/MIPS systems.
+      --  Properly initializes the FPU for PPC/MIPS systems
 
    begin
       Self_ID.Common.LL.Thread := taskIdSelf;
@@ -805,7 +811,8 @@ package body System.Task_Primitives.Operations is
 
       Init_Float;
 
-      --  Install the signal handlers.
+      --  Install the signal handlers
+
       --  This is called for each task since there is no signal inheritance
       --  between VxWorks tasks.
 
@@ -828,7 +835,7 @@ package body System.Task_Primitives.Operations is
    -- New_ATCB --
    --------------
 
-   function New_ATCB (Entry_Num : Task_Entry_Index) return Task_ID is
+   function New_ATCB (Entry_Num : Task_Entry_Index) return Task_Id is
    begin
       return new Ada_Task_Control_Block (Entry_Num);
    end New_ATCB;
@@ -843,7 +850,7 @@ package body System.Task_Primitives.Operations is
    -- Register_Foreign_Thread --
    -----------------------------
 
-   function Register_Foreign_Thread return Task_ID is
+   function Register_Foreign_Thread return Task_Id is
    begin
       if Is_Valid_Task then
          return Self;
@@ -856,7 +863,7 @@ package body System.Task_Primitives.Operations is
    -- Initialize_TCB --
    --------------------
 
-   procedure Initialize_TCB (Self_ID : Task_ID; Succeeded : out Boolean) is
+   procedure Initialize_TCB (Self_ID : Task_Id; Succeeded : out Boolean) is
    begin
       Self_ID.Common.LL.CV := semBCreate (SEM_Q_PRIORITY, SEM_EMPTY);
       Self_ID.Common.LL.Thread := 0;
@@ -877,7 +884,7 @@ package body System.Task_Primitives.Operations is
    -----------------
 
    procedure Create_Task
-     (T          : Task_ID;
+     (T          : Task_Id;
       Wrapper    : System.Address;
       Stack_Size : System.Parameters.Size_Type;
       Priority   : System.Any_Priority;
@@ -895,28 +902,26 @@ package body System.Task_Primitives.Operations is
          Adjusted_Stack_Size := size_t (Stack_Size);
       end if;
 
-      --  Ask for 4 extra bytes of stack space so that the ATCB
-      --  pointer can be stored below the stack limit, plus extra
-      --  space for the frame of Task_Wrapper.  This is so the user
-      --  gets the amount of stack requested exclusive of the needs
-      --  of the runtime.
+      --  Ask for four extra bytes of stack space so that the ATCB pointer can
+      --  be stored below the stack limit, plus extra space for the frame of
+      --  Task_Wrapper. This is so the user gets the amount of stack requested
+      --  exclusive of the needs
       --
-      --  We also have to allocate n more bytes for the task name
-      --  storage and enough space for the Wind Task Control Block
-      --  which is around 0x778 bytes.  VxWorks also seems to carve out
-      --  additional space, so use 2048 as a nice round number.
-      --  We might want to increment to the nearest page size in
-      --  case we ever support VxVMI.
+      --  We also have to allocate n more bytes for the task name storage and
+      --  enough space for the Wind Task Control Block which is around 0x778
+      --  bytes. VxWorks also seems to carve out additional space, so use 2048
+      --  as a nice round number. We might want to increment to the nearest
+      --  page size in case we ever support VxVMI.
       --
-      --  XXX - we should come back and visit this so we can
-      --        set the task name to something appropriate.
+      --  XXX - we should come back and visit this so we can set the task name
+      --        to something appropriate.
 
       Adjusted_Stack_Size := Adjusted_Stack_Size + 2048;
 
       --  Since the initial signal mask of a thread is inherited from the
-      --  creator, and the Environment task has all its signals masked, we
-      --  do not need to manipulate caller's signal mask at this point.
-      --  All tasks in RTS will have All_Tasks_Mask initially.
+      --  creator, and the Environment task has all its signals masked, we do
+      --  not need to manipulate caller's signal mask at this point. All tasks
+      --  in RTS will have All_Tasks_Mask initially.
 
       if T.Common.Task_Image_Len = 0 then
          T.Common.LL.Thread := taskSpawn
@@ -929,6 +934,7 @@ package body System.Task_Primitives.Operations is
       else
          declare
             Name : aliased String (1 .. T.Common.Task_Image_Len + 1);
+
          begin
             Name (1 .. Name'Last - 1) :=
               T.Common.Task_Image (1 .. T.Common.Task_Image_Len);
@@ -958,13 +964,13 @@ package body System.Task_Primitives.Operations is
    -- Finalize_TCB --
    ------------------
 
-   procedure Finalize_TCB (T : Task_ID) is
+   procedure Finalize_TCB (T : Task_Id) is
       Result  : int;
-      Tmp     : Task_ID          := T;
+      Tmp     : Task_Id          := T;
       Is_Self : constant Boolean := (T = Self);
 
       procedure Free is new
-        Unchecked_Deallocation (Ada_Task_Control_Block, Task_ID);
+        Unchecked_Deallocation (Ada_Task_Control_Block, Task_Id);
 
    begin
       if not Single_Lock then
@@ -1002,12 +1008,12 @@ package body System.Task_Primitives.Operations is
    -- Abort_Task --
    ----------------
 
-   procedure Abort_Task (T : Task_ID) is
+   procedure Abort_Task (T : Task_Id) is
       Result : int;
 
    begin
       Result := kill (T.Common.LL.Thread,
-        Signal (Interrupt_Management.Abort_Task_Signal));
+                      Signal (Interrupt_Management.Abort_Task_Signal));
       pragma Assert (Result = 0);
    end Abort_Task;
 
@@ -1017,9 +1023,8 @@ package body System.Task_Primitives.Operations is
 
    --  Dummy version
 
-   function Check_Exit (Self_ID : ST.Task_ID) return Boolean is
+   function Check_Exit (Self_ID : ST.Task_Id) return Boolean is
       pragma Unreferenced (Self_ID);
-
    begin
       return True;
    end Check_Exit;
@@ -1028,9 +1033,8 @@ package body System.Task_Primitives.Operations is
    -- Check_No_Locks --
    --------------------
 
-   function Check_No_Locks (Self_ID : ST.Task_ID) return Boolean is
+   function Check_No_Locks (Self_ID : ST.Task_Id) return Boolean is
       pragma Unreferenced (Self_ID);
-
    begin
       return True;
    end Check_No_Locks;
@@ -1039,9 +1043,9 @@ package body System.Task_Primitives.Operations is
    -- Environment_Task --
    ----------------------
 
-   function Environment_Task return Task_ID is
+   function Environment_Task return Task_Id is
    begin
-      return Environment_Task_ID;
+      return Environment_Task_Id;
    end Environment_Task;
 
    --------------
@@ -1067,9 +1071,8 @@ package body System.Task_Primitives.Operations is
    ------------------
 
    function Suspend_Task
-     (T           : ST.Task_ID;
-      Thread_Self : Thread_Id)
-      return        Boolean
+     (T           : ST.Task_Id;
+      Thread_Self : Thread_Id) return Boolean
    is
    begin
       if T.Common.LL.Thread /= 0
@@ -1086,9 +1089,8 @@ package body System.Task_Primitives.Operations is
    -----------------
 
    function Resume_Task
-     (T           : ST.Task_ID;
-      Thread_Self : Thread_Id)
-      return        Boolean
+     (T           : ST.Task_Id;
+      Thread_Self : Thread_Id) return Boolean
    is
    begin
       if T.Common.LL.Thread /= 0
@@ -1104,7 +1106,7 @@ package body System.Task_Primitives.Operations is
    -- Initialize --
    ----------------
 
-   procedure Initialize (Environment_Task : Task_ID) is
+   procedure Initialize (Environment_Task : Task_Id) is
       Result : int;
 
    begin
@@ -1132,9 +1134,9 @@ package body System.Task_Primitives.Operations is
          end if;
       end loop;
 
-      Environment_Task_ID := Environment_Task;
+      Environment_Task_Id := Environment_Task;
 
-      --  Initialize the lock used to synchronize chain of all ATCBs.
+      --  Initialize the lock used to synchronize chain of all ATCBs
 
       Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level);