annotate gcc/ada/libgnarl/s-osinte__darwin.adb @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children 1830386684a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 ------------------------------------------------------------------------------
kono
parents:
diff changeset
2 -- --
kono
parents:
diff changeset
3 -- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
kono
parents:
diff changeset
4 -- --
kono
parents:
diff changeset
5 -- S Y S T E M . O S _ I N T E R F A C E --
kono
parents:
diff changeset
6 -- --
kono
parents:
diff changeset
7 -- B o d y --
kono
parents:
diff changeset
8 -- --
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
9 -- Copyright (C) 1999-2018, Free Software Foundation, Inc. --
111
kono
parents:
diff changeset
10 -- --
kono
parents:
diff changeset
11 -- GNARL is free software; you can redistribute it and/or modify it under --
kono
parents:
diff changeset
12 -- terms of the GNU General Public License as published by the Free Soft- --
kono
parents:
diff changeset
13 -- ware Foundation; either version 3, or (at your option) any later ver- --
kono
parents:
diff changeset
14 -- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
kono
parents:
diff changeset
15 -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
kono
parents:
diff changeset
16 -- or FITNESS FOR A PARTICULAR PURPOSE. --
kono
parents:
diff changeset
17 -- --
kono
parents:
diff changeset
18 -- As a special exception under Section 7 of GPL version 3, you are granted --
kono
parents:
diff changeset
19 -- additional permissions described in the GCC Runtime Library Exception, --
kono
parents:
diff changeset
20 -- version 3.1, as published by the Free Software Foundation. --
kono
parents:
diff changeset
21 -- --
kono
parents:
diff changeset
22 -- You should have received a copy of the GNU General Public License and --
kono
parents:
diff changeset
23 -- a copy of the GCC Runtime Library Exception along with this program; --
kono
parents:
diff changeset
24 -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
kono
parents:
diff changeset
25 -- <http://www.gnu.org/licenses/>. --
kono
parents:
diff changeset
26 -- --
kono
parents:
diff changeset
27 -- GNARL was developed by the GNARL team at Florida State University. --
kono
parents:
diff changeset
28 -- Extensive contributions were provided by Ada Core Technologies, Inc. --
kono
parents:
diff changeset
29 -- --
kono
parents:
diff changeset
30 ------------------------------------------------------------------------------
kono
parents:
diff changeset
31
kono
parents:
diff changeset
32 -- This is a Darwin Threads version of this package
kono
parents:
diff changeset
33
kono
parents:
diff changeset
34 pragma Polling (Off);
kono
parents:
diff changeset
35 -- Turn off polling, we do not want ATC polling to take place during
kono
parents:
diff changeset
36 -- tasking operations. It causes infinite loops and other problems.
kono
parents:
diff changeset
37
kono
parents:
diff changeset
38 with Interfaces.C.Extensions;
kono
parents:
diff changeset
39
kono
parents:
diff changeset
40 package body System.OS_Interface is
kono
parents:
diff changeset
41 use Interfaces.C;
kono
parents:
diff changeset
42
kono
parents:
diff changeset
43 -----------------
kono
parents:
diff changeset
44 -- To_Duration --
kono
parents:
diff changeset
45 -----------------
kono
parents:
diff changeset
46
kono
parents:
diff changeset
47 function To_Duration (TS : timespec) return Duration is
kono
parents:
diff changeset
48 begin
kono
parents:
diff changeset
49 return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
kono
parents:
diff changeset
50 end To_Duration;
kono
parents:
diff changeset
51
kono
parents:
diff changeset
52 ------------------------
kono
parents:
diff changeset
53 -- To_Target_Priority --
kono
parents:
diff changeset
54 ------------------------
kono
parents:
diff changeset
55
kono
parents:
diff changeset
56 function To_Target_Priority
kono
parents:
diff changeset
57 (Prio : System.Any_Priority) return Interfaces.C.int
kono
parents:
diff changeset
58 is
kono
parents:
diff changeset
59 begin
kono
parents:
diff changeset
60 return Interfaces.C.int (Prio);
kono
parents:
diff changeset
61 end To_Target_Priority;
kono
parents:
diff changeset
62
kono
parents:
diff changeset
63 -----------------
kono
parents:
diff changeset
64 -- To_Timespec --
kono
parents:
diff changeset
65 -----------------
kono
parents:
diff changeset
66
kono
parents:
diff changeset
67 function To_Timespec (D : Duration) return timespec is
kono
parents:
diff changeset
68 S : time_t;
kono
parents:
diff changeset
69 F : Duration;
kono
parents:
diff changeset
70
kono
parents:
diff changeset
71 begin
kono
parents:
diff changeset
72 S := time_t (Long_Long_Integer (D));
kono
parents:
diff changeset
73 F := D - Duration (S);
kono
parents:
diff changeset
74
kono
parents:
diff changeset
75 -- If F has negative value due to a round-up, adjust for positive F
kono
parents:
diff changeset
76 -- value.
kono
parents:
diff changeset
77
kono
parents:
diff changeset
78 if F < 0.0 then
kono
parents:
diff changeset
79 S := S - 1;
kono
parents:
diff changeset
80 F := F + 1.0;
kono
parents:
diff changeset
81 end if;
kono
parents:
diff changeset
82
kono
parents:
diff changeset
83 return timespec'(tv_sec => S,
kono
parents:
diff changeset
84 tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
kono
parents:
diff changeset
85 end To_Timespec;
kono
parents:
diff changeset
86
kono
parents:
diff changeset
87 -------------------
kono
parents:
diff changeset
88 -- clock_gettime --
kono
parents:
diff changeset
89 -------------------
kono
parents:
diff changeset
90
kono
parents:
diff changeset
91 function clock_gettime
kono
parents:
diff changeset
92 (clock_id : clockid_t;
kono
parents:
diff changeset
93 tp : access timespec) return int
kono
parents:
diff changeset
94 is
kono
parents:
diff changeset
95 pragma Unreferenced (clock_id);
kono
parents:
diff changeset
96
kono
parents:
diff changeset
97 -- Darwin Threads don't have clock_gettime, so use gettimeofday
kono
parents:
diff changeset
98
kono
parents:
diff changeset
99 use Interfaces;
kono
parents:
diff changeset
100
kono
parents:
diff changeset
101 type timeval is array (1 .. 3) of C.long;
kono
parents:
diff changeset
102 -- The timeval array is sized to contain long_long sec and long usec.
kono
parents:
diff changeset
103 -- If long_long'Size = long'Size then it will be overly large but that
kono
parents:
diff changeset
104 -- won't effect the implementation since it's not accessed directly.
kono
parents:
diff changeset
105
kono
parents:
diff changeset
106 procedure timeval_to_duration
kono
parents:
diff changeset
107 (T : not null access timeval;
kono
parents:
diff changeset
108 sec : not null access C.Extensions.long_long;
kono
parents:
diff changeset
109 usec : not null access C.long);
kono
parents:
diff changeset
110 pragma Import (C, timeval_to_duration, "__gnat_timeval_to_duration");
kono
parents:
diff changeset
111
kono
parents:
diff changeset
112 Micro : constant := 10**6;
kono
parents:
diff changeset
113 sec : aliased C.Extensions.long_long;
kono
parents:
diff changeset
114 usec : aliased C.long;
kono
parents:
diff changeset
115 TV : aliased timeval;
kono
parents:
diff changeset
116 Result : int;
kono
parents:
diff changeset
117
kono
parents:
diff changeset
118 function gettimeofday
kono
parents:
diff changeset
119 (Tv : access timeval;
kono
parents:
diff changeset
120 Tz : System.Address := System.Null_Address) return int;
kono
parents:
diff changeset
121 pragma Import (C, gettimeofday, "gettimeofday");
kono
parents:
diff changeset
122
kono
parents:
diff changeset
123 begin
kono
parents:
diff changeset
124 Result := gettimeofday (TV'Access, System.Null_Address);
kono
parents:
diff changeset
125 pragma Assert (Result = 0);
kono
parents:
diff changeset
126 timeval_to_duration (TV'Access, sec'Access, usec'Access);
kono
parents:
diff changeset
127 tp.all := To_Timespec (Duration (sec) + Duration (usec) / Micro);
kono
parents:
diff changeset
128 return Result;
kono
parents:
diff changeset
129 end clock_gettime;
kono
parents:
diff changeset
130
kono
parents:
diff changeset
131 ------------------
kono
parents:
diff changeset
132 -- clock_getres --
kono
parents:
diff changeset
133 ------------------
kono
parents:
diff changeset
134
kono
parents:
diff changeset
135 function clock_getres
kono
parents:
diff changeset
136 (clock_id : clockid_t;
kono
parents:
diff changeset
137 res : access timespec) return int
kono
parents:
diff changeset
138 is
kono
parents:
diff changeset
139 pragma Unreferenced (clock_id);
kono
parents:
diff changeset
140
kono
parents:
diff changeset
141 -- Darwin Threads don't have clock_getres.
kono
parents:
diff changeset
142
kono
parents:
diff changeset
143 Nano : constant := 10**9;
kono
parents:
diff changeset
144 nsec : int := 0;
kono
parents:
diff changeset
145 Result : int := -1;
kono
parents:
diff changeset
146
kono
parents:
diff changeset
147 function clock_get_res return int;
kono
parents:
diff changeset
148 pragma Import (C, clock_get_res, "__gnat_clock_get_res");
kono
parents:
diff changeset
149
kono
parents:
diff changeset
150 begin
kono
parents:
diff changeset
151 nsec := clock_get_res;
kono
parents:
diff changeset
152 res.all := To_Timespec (Duration (0.0) + Duration (nsec) / Nano);
kono
parents:
diff changeset
153
kono
parents:
diff changeset
154 if nsec > 0 then
kono
parents:
diff changeset
155 Result := 0;
kono
parents:
diff changeset
156 end if;
kono
parents:
diff changeset
157
kono
parents:
diff changeset
158 return Result;
kono
parents:
diff changeset
159 end clock_getres;
kono
parents:
diff changeset
160
kono
parents:
diff changeset
161 -----------------
kono
parents:
diff changeset
162 -- sched_yield --
kono
parents:
diff changeset
163 -----------------
kono
parents:
diff changeset
164
kono
parents:
diff changeset
165 function sched_yield return int is
kono
parents:
diff changeset
166 procedure sched_yield_base (arg : System.Address);
kono
parents:
diff changeset
167 pragma Import (C, sched_yield_base, "pthread_yield_np");
kono
parents:
diff changeset
168
kono
parents:
diff changeset
169 begin
kono
parents:
diff changeset
170 sched_yield_base (System.Null_Address);
kono
parents:
diff changeset
171 return 0;
kono
parents:
diff changeset
172 end sched_yield;
kono
parents:
diff changeset
173
kono
parents:
diff changeset
174 ------------------
kono
parents:
diff changeset
175 -- pthread_init --
kono
parents:
diff changeset
176 ------------------
kono
parents:
diff changeset
177
kono
parents:
diff changeset
178 procedure pthread_init is
kono
parents:
diff changeset
179 begin
kono
parents:
diff changeset
180 null;
kono
parents:
diff changeset
181 end pthread_init;
kono
parents:
diff changeset
182
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
183 --------------------
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
184 -- Get_Stack_Base --
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
185 --------------------
111
kono
parents:
diff changeset
186
kono
parents:
diff changeset
187 function Get_Stack_Base (thread : pthread_t) return Address is
kono
parents:
diff changeset
188 pragma Unreferenced (thread);
kono
parents:
diff changeset
189 begin
kono
parents:
diff changeset
190 return System.Null_Address;
kono
parents:
diff changeset
191 end Get_Stack_Base;
kono
parents:
diff changeset
192
kono
parents:
diff changeset
193 end System.OS_Interface;