OSDN Git Service

* Makefile.in (reload1.o-warn): Remove.
[pf3gnuchains/gcc-fork.git] / gcc / ada / s-osinte-darwin.adb
1 ------------------------------------------------------------------------------
2 --                                                                          --
3 --                 GNAT 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 --           Copyright (C) 1999-2006 Free Software Foundation, Inc.         --
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- --
13 -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
14 -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
15 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
16 -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
17 -- for  more details.  You should have  received  a copy of the GNU General --
18 -- Public License  distributed with GNARL; see file COPYING.  If not, write --
19 -- to  the  Free Software Foundation,  51  Franklin  Street,  Fifth  Floor, --
20 -- Boston, MA 02110-1301, USA.                                              --
21 --                                                                          --
22 -- As a special exception,  if other files  instantiate  generics from this --
23 -- unit, or you link  this unit with other files  to produce an executable, --
24 -- this  unit  does not  by itself cause  the resulting  executable  to  be --
25 -- covered  by the  GNU  General  Public  License.  This exception does not --
26 -- however invalidate  any other reasons why  the executable file  might be --
27 -- covered by the  GNU Public License.                                      --
28 --                                                                          --
29 -- GNARL was developed by the GNARL team at Florida State University.       --
30 -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
31 --                                                                          --
32 ------------------------------------------------------------------------------
33
34 --  This is a Darwin Threads version of this package
35
36 pragma Polling (Off);
37 --  Turn off polling, we do not want ATC polling to take place during
38 --  tasking operations. It causes infinite loops and other problems.
39
40 package body System.OS_Interface is
41
42    use Interfaces.C;
43
44    -----------------
45    -- To_Duration --
46    -----------------
47
48    function To_Duration (TS : timespec) return Duration is
49    begin
50       return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
51    end To_Duration;
52
53    function To_Duration (TV : struct_timeval) return Duration is
54    begin
55       return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
56    end To_Duration;
57
58    ------------------------
59    -- To_Target_Priority --
60    ------------------------
61
62    function To_Target_Priority
63      (Prio : System.Any_Priority) return Interfaces.C.int
64    is
65    begin
66       return Interfaces.C.int (Prio);
67    end To_Target_Priority;
68
69    -----------------
70    -- To_Timespec --
71    -----------------
72
73    function To_Timespec (D : Duration) return timespec is
74       S : time_t;
75       F : Duration;
76
77    begin
78       S := time_t (Long_Long_Integer (D));
79       F := D - Duration (S);
80
81       --  If F has negative value due to a round-up, adjust for positive F
82       --  value.
83
84       if F < 0.0 then
85          S := S - 1;
86          F := F + 1.0;
87       end if;
88
89       return timespec'(tv_sec => S,
90         tv_nsec => int32_t (Long_Long_Integer (F * 10#1#E9)));
91    end To_Timespec;
92
93    ----------------
94    -- To_Timeval --
95    ----------------
96
97    function To_Timeval (D : Duration) return struct_timeval is
98       S : int32_t;
99       F : Duration;
100
101    begin
102       S := int32_t (D);
103       F := D - Duration (S);
104
105       --  If F has negative value due to a round-up, adjust for positive F
106       --  value.
107
108       if F < 0.0 then
109          S := S - 1;
110          F := F + 1.0;
111       end if;
112
113       return struct_timeval'
114                (Tv_Sec  => S,
115                 tv_usec => int32_t (Long_Long_Integer (F * 10#1#E6)));
116    end To_Timeval;
117
118    -------------------
119    -- clock_gettime --
120    -------------------
121
122    function clock_gettime
123      (clock_id : clockid_t;
124       tp       : access timespec) return int
125    is
126       pragma Unreferenced (clock_id);
127       Result : int;
128       tv     : aliased struct_timeval;
129
130       function gettimeofday
131         (tv : access struct_timeval;
132          tz : System.Address := System.Null_Address) return int;
133       pragma Import (C, gettimeofday, "gettimeofday");
134
135    begin
136       Result := gettimeofday (tv'Unchecked_Access);
137       tp.all := To_Timespec (To_Duration (tv));
138       return Result;
139    end clock_gettime;
140
141    -----------------
142    -- sched_yield --
143    -----------------
144
145    function sched_yield return int is
146       procedure sched_yield_base (arg : System.Address);
147       pragma Import (C, sched_yield_base, "pthread_yield_np");
148
149    begin
150       sched_yield_base (System.Null_Address);
151       return 0;
152    end sched_yield;
153
154    ------------------
155    -- pthread_init --
156    ------------------
157
158    procedure pthread_init is
159    begin
160       null;
161    end pthread_init;
162
163    ----------------
164    -- Stack_Base --
165    ----------------
166
167    function Get_Stack_Base (thread : pthread_t) return Address is
168       pragma Unreferenced (thread);
169    begin
170       return System.Null_Address;
171    end Get_Stack_Base;
172
173 end System.OS_Interface;