OSDN Git Service

Delete all lines containing "$Revision:".
[pf3gnuchains/gcc-fork.git] / gcc / ada / 5bosinte.adb
1 ------------------------------------------------------------------------------
2 --                                                                          --
3 --                GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS               --
4 --                                                                          --
5 --                   S Y S T E M . O S _ I N T E R F A C E                  --
6 --                                                                          --
7 --                                  B o d y                                 --
8 --                                                                          --
9 --                                                                          --
10 --          Copyright (C) 1997-2001, Free Software Fundation, Inc.          --
11 --                                                                          --
12 -- GNARL is free software; you can  redistribute it  and/or modify it under --
13 -- terms of the  GNU General Public License as published  by the Free Soft- --
14 -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
15 -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
16 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
17 -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
18 -- for  more details.  You should have  received  a copy of the GNU General --
19 -- Public License  distributed with GNARL; see file COPYING.  If not, write --
20 -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
21 -- MA 02111-1307, USA.                                                      --
22 --                                                                          --
23 -- As a special exception,  if other files  instantiate  generics from this --
24 -- unit, or you link  this unit with other files  to produce an executable, --
25 -- this  unit  does not  by itself cause  the resulting  executable  to  be --
26 -- covered  by the  GNU  General  Public  License.  This exception does not --
27 -- however invalidate  any other reasons why  the executable file  might be --
28 -- covered by the  GNU Public License.                                      --
29 --                                                                          --
30 -- GNARL was developed by the GNARL team at Florida State University. It is --
31 -- now maintained by Ada Core Technologies, Inc. (http://www.gnat.com).     --
32 --                                                                          --
33 ------------------------------------------------------------------------------
34
35 --  This is a AIX (Native) version of this package
36
37 pragma Polling (Off);
38 --  Turn off polling, we do not want ATC polling to take place during
39 --  tasking operations. It causes infinite loops and other problems.
40
41 with Interfaces.C;
42
43 package body System.OS_Interface is
44
45    use Interfaces.C;
46
47    -----------------
48    -- To_Duration --
49    -----------------
50
51    function To_Duration (TS : timespec) return Duration is
52    begin
53       return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
54    end To_Duration;
55
56    function To_Duration (TV : struct_timeval) return Duration is
57    begin
58       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
59    end To_Duration;
60
61    -----------------
62    -- To_Timespec --
63    -----------------
64
65    function To_Timespec (D : Duration) return timespec is
66       S : time_t;
67       F : Duration;
68
69    begin
70       S := time_t (Long_Long_Integer (D));
71       F := D - Duration (S);
72
73       --  If F has negative value due to a round-up, adjust for positive F
74       --  value.
75
76       if F < 0.0 then
77          S := S - 1;
78          F := F + 1.0;
79       end if;
80
81       return timespec' (tv_sec => S,
82         tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
83    end To_Timespec;
84
85    ----------------
86    -- To_Timeval --
87    ----------------
88
89    function To_Timeval (D : Duration) return struct_timeval is
90       S : long;
91       F : Duration;
92
93    begin
94       S := long (Long_Long_Integer (D));
95       F := D - Duration (S);
96
97       --  If F has negative value due to a round-up, adjust for positive F
98       --  value.
99
100       if F < 0.0 then
101          S := S - 1;
102          F := F + 1.0;
103       end if;
104
105       return struct_timeval' (tv_sec => S,
106         tv_usec => long (Long_Long_Integer (F * 10#1#E6)));
107    end To_Timeval;
108
109    -------------------
110    -- clock_gettime --
111    -------------------
112
113    function clock_gettime
114      (clock_id : clockid_t;
115       tp       : access timespec)
116       return int
117    is
118       Result : int;
119       tv     : aliased struct_timeval;
120
121       function gettimeofday
122         (tv : access struct_timeval;
123          tz : System.Address := System.Null_Address) return int;
124       pragma Import (C, gettimeofday, "gettimeofday");
125
126    begin
127       Result := gettimeofday (tv'Unchecked_Access);
128       tp.all := To_Timespec (To_Duration (tv));
129       return Result;
130    end clock_gettime;
131
132    -----------------
133    -- sched_yield --
134    -----------------
135
136    --  AIX Thread does not have sched_yield;
137
138    function sched_yield return int is
139
140       procedure pthread_yield;
141       pragma Import (C, pthread_yield, "sched_yield");
142
143    begin
144       pthread_yield;
145       return 0;
146    end sched_yield;
147
148    function Get_Stack_Base (thread : pthread_t) return Address is
149    begin
150       return Null_Address;
151    end Get_Stack_Base;
152
153 end System.OS_Interface;