annotate gcc/ada/libgnarl/s-osinte__aix.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) 1997-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 AIX (Native) 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 tasking
kono
parents:
diff changeset
36 -- operations. It causes infinite loops and other problems.
kono
parents:
diff changeset
37
kono
parents:
diff changeset
38 package body System.OS_Interface is
kono
parents:
diff changeset
39
kono
parents:
diff changeset
40 use Interfaces.C;
kono
parents:
diff changeset
41
kono
parents:
diff changeset
42 -----------------
kono
parents:
diff changeset
43 -- To_Duration --
kono
parents:
diff changeset
44 -----------------
kono
parents:
diff changeset
45
kono
parents:
diff changeset
46 function To_Duration (TS : timespec) return Duration is
kono
parents:
diff changeset
47 begin
kono
parents:
diff changeset
48 return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
kono
parents:
diff changeset
49 end To_Duration;
kono
parents:
diff changeset
50
kono
parents:
diff changeset
51 ------------------------
kono
parents:
diff changeset
52 -- To_Target_Priority --
kono
parents:
diff changeset
53 ------------------------
kono
parents:
diff changeset
54
kono
parents:
diff changeset
55 function To_Target_Priority
kono
parents:
diff changeset
56 (Prio : System.Any_Priority) return Interfaces.C.int
kono
parents:
diff changeset
57 is
kono
parents:
diff changeset
58 Dispatching_Policy : Character;
kono
parents:
diff changeset
59 pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy");
kono
parents:
diff changeset
60
kono
parents:
diff changeset
61 Time_Slice_Val : Integer;
kono
parents:
diff changeset
62 pragma Import (C, Time_Slice_Val, "__gl_time_slice_val");
kono
parents:
diff changeset
63
kono
parents:
diff changeset
64 begin
kono
parents:
diff changeset
65 -- For the case SCHED_OTHER the only valid priority across all supported
kono
parents:
diff changeset
66 -- versions of AIX is 1 (note that the scheduling policy can be set
kono
parents:
diff changeset
67 -- with the pragma Task_Dispatching_Policy or setting the time slice
kono
parents:
diff changeset
68 -- value). Otherwise, for SCHED_RR and SCHED_FIFO, the system defines
kono
parents:
diff changeset
69 -- priorities in the range 1 .. 127. This means that we must map
kono
parents:
diff changeset
70 -- System.Any_Priority in the range 0 .. 126 to 1 .. 127.
kono
parents:
diff changeset
71
kono
parents:
diff changeset
72 if Dispatching_Policy = ' ' and then Time_Slice_Val < 0 then
kono
parents:
diff changeset
73 return 1;
kono
parents:
diff changeset
74 else
kono
parents:
diff changeset
75 return Interfaces.C.int (Prio) + 1;
kono
parents:
diff changeset
76 end if;
kono
parents:
diff changeset
77 end To_Target_Priority;
kono
parents:
diff changeset
78
kono
parents:
diff changeset
79 -----------------
kono
parents:
diff changeset
80 -- To_Timespec --
kono
parents:
diff changeset
81 -----------------
kono
parents:
diff changeset
82
kono
parents:
diff changeset
83 function To_Timespec (D : Duration) return timespec is
kono
parents:
diff changeset
84 S : time_t;
kono
parents:
diff changeset
85 F : Duration;
kono
parents:
diff changeset
86
kono
parents:
diff changeset
87 begin
kono
parents:
diff changeset
88 S := time_t (Long_Long_Integer (D));
kono
parents:
diff changeset
89 F := D - Duration (S);
kono
parents:
diff changeset
90
kono
parents:
diff changeset
91 -- If F is negative due to a round-up, adjust for positive F value
kono
parents:
diff changeset
92
kono
parents:
diff changeset
93 if F < 0.0 then
kono
parents:
diff changeset
94 S := S - 1;
kono
parents:
diff changeset
95 F := F + 1.0;
kono
parents:
diff changeset
96 end if;
kono
parents:
diff changeset
97
kono
parents:
diff changeset
98 return timespec'(tv_sec => S,
kono
parents:
diff changeset
99 tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
kono
parents:
diff changeset
100 end To_Timespec;
kono
parents:
diff changeset
101
kono
parents:
diff changeset
102 -----------------
kono
parents:
diff changeset
103 -- sched_yield --
kono
parents:
diff changeset
104 -----------------
kono
parents:
diff changeset
105
kono
parents:
diff changeset
106 -- AIX Thread does not have sched_yield;
kono
parents:
diff changeset
107
kono
parents:
diff changeset
108 function sched_yield return int is
kono
parents:
diff changeset
109 procedure pthread_yield;
kono
parents:
diff changeset
110 pragma Import (C, pthread_yield, "sched_yield");
kono
parents:
diff changeset
111 begin
kono
parents:
diff changeset
112 pthread_yield;
kono
parents:
diff changeset
113 return 0;
kono
parents:
diff changeset
114 end sched_yield;
kono
parents:
diff changeset
115
kono
parents:
diff changeset
116 --------------------
kono
parents:
diff changeset
117 -- Get_Stack_Base --
kono
parents:
diff changeset
118 --------------------
kono
parents:
diff changeset
119
kono
parents:
diff changeset
120 function Get_Stack_Base (thread : pthread_t) return Address is
kono
parents:
diff changeset
121 pragma Warnings (Off, thread);
kono
parents:
diff changeset
122 begin
kono
parents:
diff changeset
123 return Null_Address;
kono
parents:
diff changeset
124 end Get_Stack_Base;
kono
parents:
diff changeset
125
kono
parents:
diff changeset
126 --------------------------
kono
parents:
diff changeset
127 -- PTHREAD_PRIO_INHERIT --
kono
parents:
diff changeset
128 --------------------------
kono
parents:
diff changeset
129
kono
parents:
diff changeset
130 AIX_Version : Integer := 0;
kono
parents:
diff changeset
131 -- AIX version in the form xy for AIX version x.y (0 means not set)
kono
parents:
diff changeset
132
kono
parents:
diff changeset
133 SYS_NMLN : constant := 32;
kono
parents:
diff changeset
134 -- AIX system constant used to define utsname, see sys/utsname.h
kono
parents:
diff changeset
135
kono
parents:
diff changeset
136 subtype String_NMLN is String (1 .. SYS_NMLN);
kono
parents:
diff changeset
137
kono
parents:
diff changeset
138 type utsname is record
kono
parents:
diff changeset
139 sysname : String_NMLN;
kono
parents:
diff changeset
140 nodename : String_NMLN;
kono
parents:
diff changeset
141 release : String_NMLN;
kono
parents:
diff changeset
142 version : String_NMLN;
kono
parents:
diff changeset
143 machine : String_NMLN;
kono
parents:
diff changeset
144 procserial : String_NMLN;
kono
parents:
diff changeset
145 end record;
kono
parents:
diff changeset
146 pragma Convention (C, utsname);
kono
parents:
diff changeset
147
kono
parents:
diff changeset
148 procedure uname (name : out utsname);
kono
parents:
diff changeset
149 pragma Import (C, uname);
kono
parents:
diff changeset
150
kono
parents:
diff changeset
151 function PTHREAD_PRIO_INHERIT return int is
kono
parents:
diff changeset
152 name : utsname;
kono
parents:
diff changeset
153
kono
parents:
diff changeset
154 function Val (C : Character) return Integer;
kono
parents:
diff changeset
155 -- Transform a numeric character ('0' .. '9') to an integer
kono
parents:
diff changeset
156
kono
parents:
diff changeset
157 ---------
kono
parents:
diff changeset
158 -- Val --
kono
parents:
diff changeset
159 ---------
kono
parents:
diff changeset
160
kono
parents:
diff changeset
161 function Val (C : Character) return Integer is
kono
parents:
diff changeset
162 begin
kono
parents:
diff changeset
163 return Character'Pos (C) - Character'Pos ('0');
kono
parents:
diff changeset
164 end Val;
kono
parents:
diff changeset
165
kono
parents:
diff changeset
166 -- Start of processing for PTHREAD_PRIO_INHERIT
kono
parents:
diff changeset
167
kono
parents:
diff changeset
168 begin
kono
parents:
diff changeset
169 if AIX_Version = 0 then
kono
parents:
diff changeset
170
kono
parents:
diff changeset
171 -- Set AIX_Version
kono
parents:
diff changeset
172
kono
parents:
diff changeset
173 uname (name);
kono
parents:
diff changeset
174 AIX_Version := Val (name.version (1)) * 10 + Val (name.release (1));
kono
parents:
diff changeset
175 end if;
kono
parents:
diff changeset
176
kono
parents:
diff changeset
177 if AIX_Version < 53 then
kono
parents:
diff changeset
178
kono
parents:
diff changeset
179 -- Under AIX < 5.3, PTHREAD_PRIO_INHERIT is defined as 0 in pthread.h
kono
parents:
diff changeset
180
kono
parents:
diff changeset
181 return 0;
kono
parents:
diff changeset
182
kono
parents:
diff changeset
183 else
kono
parents:
diff changeset
184 -- Under AIX >= 5.3, PTHREAD_PRIO_INHERIT is defined as 3
kono
parents:
diff changeset
185
kono
parents:
diff changeset
186 return 3;
kono
parents:
diff changeset
187 end if;
kono
parents:
diff changeset
188 end PTHREAD_PRIO_INHERIT;
kono
parents:
diff changeset
189
kono
parents:
diff changeset
190 end System.OS_Interface;