Source file
src/runtime/sys_darwin.go
Documentation: runtime
1
2
3
4
5 package runtime
6
7 import (
8 "internal/abi"
9 "unsafe"
10 )
11
12
13
14
15
16
17
18
19
20
21 func syscall_syscall(fn, a1, a2, a3 uintptr) (r1, r2, err uintptr) {
22 entersyscall()
23 libcCall(unsafe.Pointer(abi.FuncPCABI0(syscall)), unsafe.Pointer(&fn))
24 exitsyscall()
25 return
26 }
27 func syscall()
28
29
30
31
32 func syscall_syscallX(fn, a1, a2, a3 uintptr) (r1, r2, err uintptr) {
33 entersyscall()
34 libcCall(unsafe.Pointer(abi.FuncPCABI0(syscallX)), unsafe.Pointer(&fn))
35 exitsyscall()
36 return
37 }
38 func syscallX()
39
40
41
42
43 func syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) {
44 entersyscall()
45 libcCall(unsafe.Pointer(abi.FuncPCABI0(syscall6)), unsafe.Pointer(&fn))
46 exitsyscall()
47 return
48 }
49 func syscall6()
50
51
52
53
54 func syscall_syscall6X(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) {
55 entersyscall()
56 libcCall(unsafe.Pointer(abi.FuncPCABI0(syscall6X)), unsafe.Pointer(&fn))
57 exitsyscall()
58 return
59 }
60 func syscall6X()
61
62
63
64
65 func syscall_syscallPtr(fn, a1, a2, a3 uintptr) (r1, r2, err uintptr) {
66 entersyscall()
67 libcCall(unsafe.Pointer(abi.FuncPCABI0(syscallPtr)), unsafe.Pointer(&fn))
68 exitsyscall()
69 return
70 }
71 func syscallPtr()
72
73
74
75
76 func syscall_rawSyscall(fn, a1, a2, a3 uintptr) (r1, r2, err uintptr) {
77 libcCall(unsafe.Pointer(abi.FuncPCABI0(syscall)), unsafe.Pointer(&fn))
78 return
79 }
80
81
82
83
84 func syscall_rawSyscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) {
85 libcCall(unsafe.Pointer(abi.FuncPCABI0(syscall6)), unsafe.Pointer(&fn))
86 return
87 }
88
89
90
91
92
93
94 func crypto_x509_syscall(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1 uintptr) {
95 entersyscall()
96 libcCall(unsafe.Pointer(abi.FuncPCABI0(syscallNoErr)), unsafe.Pointer(&fn))
97 exitsyscall()
98 return
99 }
100 func syscallNoErr()
101
102
103
104
105
106
107 func pthread_attr_init(attr *pthreadattr) int32 {
108 return libcCall(unsafe.Pointer(abi.FuncPCABI0(pthread_attr_init_trampoline)), unsafe.Pointer(&attr))
109 }
110 func pthread_attr_init_trampoline()
111
112
113
114 func pthread_attr_getstacksize(attr *pthreadattr, size *uintptr) int32 {
115 return libcCall(unsafe.Pointer(abi.FuncPCABI0(pthread_attr_getstacksize_trampoline)), unsafe.Pointer(&attr))
116 }
117 func pthread_attr_getstacksize_trampoline()
118
119
120
121 func pthread_attr_setdetachstate(attr *pthreadattr, state int) int32 {
122 return libcCall(unsafe.Pointer(abi.FuncPCABI0(pthread_attr_setdetachstate_trampoline)), unsafe.Pointer(&attr))
123 }
124 func pthread_attr_setdetachstate_trampoline()
125
126
127
128 func pthread_create(attr *pthreadattr, start uintptr, arg unsafe.Pointer) int32 {
129 return libcCall(unsafe.Pointer(abi.FuncPCABI0(pthread_create_trampoline)), unsafe.Pointer(&attr))
130 }
131 func pthread_create_trampoline()
132
133
134
135 func raise(sig uint32) {
136 libcCall(unsafe.Pointer(abi.FuncPCABI0(raise_trampoline)), unsafe.Pointer(&sig))
137 }
138 func raise_trampoline()
139
140
141
142 func pthread_self() (t pthread) {
143 libcCall(unsafe.Pointer(abi.FuncPCABI0(pthread_self_trampoline)), unsafe.Pointer(&t))
144 return
145 }
146 func pthread_self_trampoline()
147
148
149
150 func pthread_kill(t pthread, sig uint32) {
151 libcCall(unsafe.Pointer(abi.FuncPCABI0(pthread_kill_trampoline)), unsafe.Pointer(&t))
152 return
153 }
154 func pthread_kill_trampoline()
155
156
157
158
159
160 func mmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off uint32) (unsafe.Pointer, int) {
161 args := struct {
162 addr unsafe.Pointer
163 n uintptr
164 prot, flags, fd int32
165 off uint32
166 ret1 unsafe.Pointer
167 ret2 int
168 }{addr, n, prot, flags, fd, off, nil, 0}
169 libcCall(unsafe.Pointer(abi.FuncPCABI0(mmap_trampoline)), unsafe.Pointer(&args))
170 return args.ret1, args.ret2
171 }
172 func mmap_trampoline()
173
174
175
176 func munmap(addr unsafe.Pointer, n uintptr) {
177 libcCall(unsafe.Pointer(abi.FuncPCABI0(munmap_trampoline)), unsafe.Pointer(&addr))
178 }
179 func munmap_trampoline()
180
181
182
183 func madvise(addr unsafe.Pointer, n uintptr, flags int32) {
184 libcCall(unsafe.Pointer(abi.FuncPCABI0(madvise_trampoline)), unsafe.Pointer(&addr))
185 }
186 func madvise_trampoline()
187
188
189
190 func mlock(addr unsafe.Pointer, n uintptr) {
191 libcCall(unsafe.Pointer(abi.FuncPCABI0(mlock_trampoline)), unsafe.Pointer(&addr))
192 }
193 func mlock_trampoline()
194
195
196
197 func read(fd int32, p unsafe.Pointer, n int32) int32 {
198 return libcCall(unsafe.Pointer(abi.FuncPCABI0(read_trampoline)), unsafe.Pointer(&fd))
199 }
200 func read_trampoline()
201
202 func pipe() (r, w int32, errno int32) {
203 var p [2]int32
204 errno = libcCall(unsafe.Pointer(abi.FuncPCABI0(pipe_trampoline)), noescape(unsafe.Pointer(&p)))
205 return p[0], p[1], errno
206 }
207 func pipe_trampoline()
208
209
210
211 func closefd(fd int32) int32 {
212 return libcCall(unsafe.Pointer(abi.FuncPCABI0(close_trampoline)), unsafe.Pointer(&fd))
213 }
214 func close_trampoline()
215
216
217
218
219
220
221 func exit(code int32) {
222 libcCall(unsafe.Pointer(abi.FuncPCABI0(exit_trampoline)), unsafe.Pointer(&code))
223 }
224 func exit_trampoline()
225
226
227
228 func usleep(usec uint32) {
229 libcCall(unsafe.Pointer(abi.FuncPCABI0(usleep_trampoline)), unsafe.Pointer(&usec))
230 }
231 func usleep_trampoline()
232
233
234
235 func usleep_no_g(usec uint32) {
236 asmcgocall_no_g(unsafe.Pointer(abi.FuncPCABI0(usleep_trampoline)), unsafe.Pointer(&usec))
237 }
238
239
240
241 func write1(fd uintptr, p unsafe.Pointer, n int32) int32 {
242 return libcCall(unsafe.Pointer(abi.FuncPCABI0(write_trampoline)), unsafe.Pointer(&fd))
243 }
244 func write_trampoline()
245
246
247
248 func open(name *byte, mode, perm int32) (ret int32) {
249 return libcCall(unsafe.Pointer(abi.FuncPCABI0(open_trampoline)), unsafe.Pointer(&name))
250 }
251 func open_trampoline()
252
253
254
255 func nanotime1() int64 {
256 var r struct {
257 t int64
258 numer, denom uint32
259 }
260 libcCall(unsafe.Pointer(abi.FuncPCABI0(nanotime_trampoline)), unsafe.Pointer(&r))
261
262
263
264 t := r.t
265 if r.numer != 1 {
266 t *= int64(r.numer)
267 }
268 if r.denom != 1 {
269 t /= int64(r.denom)
270 }
271 return t
272 }
273 func nanotime_trampoline()
274
275
276
277 func walltime() (int64, int32) {
278 var t timespec
279 libcCall(unsafe.Pointer(abi.FuncPCABI0(walltime_trampoline)), unsafe.Pointer(&t))
280 return t.tv_sec, int32(t.tv_nsec)
281 }
282 func walltime_trampoline()
283
284
285
286 func sigaction(sig uint32, new *usigactiont, old *usigactiont) {
287 libcCall(unsafe.Pointer(abi.FuncPCABI0(sigaction_trampoline)), unsafe.Pointer(&sig))
288 }
289 func sigaction_trampoline()
290
291
292
293 func sigprocmask(how uint32, new *sigset, old *sigset) {
294 libcCall(unsafe.Pointer(abi.FuncPCABI0(sigprocmask_trampoline)), unsafe.Pointer(&how))
295 }
296 func sigprocmask_trampoline()
297
298
299
300 func sigaltstack(new *stackt, old *stackt) {
301 if new != nil && new.ss_flags&_SS_DISABLE != 0 && new.ss_size == 0 {
302
303
304
305
306 new.ss_size = 32768
307 }
308 libcCall(unsafe.Pointer(abi.FuncPCABI0(sigaltstack_trampoline)), unsafe.Pointer(&new))
309 }
310 func sigaltstack_trampoline()
311
312
313
314 func raiseproc(sig uint32) {
315 libcCall(unsafe.Pointer(abi.FuncPCABI0(raiseproc_trampoline)), unsafe.Pointer(&sig))
316 }
317 func raiseproc_trampoline()
318
319
320
321 func setitimer(mode int32, new, old *itimerval) {
322 libcCall(unsafe.Pointer(abi.FuncPCABI0(setitimer_trampoline)), unsafe.Pointer(&mode))
323 }
324 func setitimer_trampoline()
325
326
327
328 func sysctl(mib *uint32, miblen uint32, oldp *byte, oldlenp *uintptr, newp *byte, newlen uintptr) int32 {
329 return libcCall(unsafe.Pointer(abi.FuncPCABI0(sysctl_trampoline)), unsafe.Pointer(&mib))
330 }
331 func sysctl_trampoline()
332
333
334
335 func sysctlbyname(name *byte, oldp *byte, oldlenp *uintptr, newp *byte, newlen uintptr) int32 {
336 return libcCall(unsafe.Pointer(abi.FuncPCABI0(sysctlbyname_trampoline)), unsafe.Pointer(&name))
337 }
338 func sysctlbyname_trampoline()
339
340
341
342 func fcntl(fd, cmd, arg int32) int32 {
343 return libcCall(unsafe.Pointer(abi.FuncPCABI0(fcntl_trampoline)), unsafe.Pointer(&fd))
344 }
345 func fcntl_trampoline()
346
347
348
349 func kqueue() int32 {
350 v := libcCall(unsafe.Pointer(abi.FuncPCABI0(kqueue_trampoline)), nil)
351 return v
352 }
353 func kqueue_trampoline()
354
355
356
357 func kevent(kq int32, ch *keventt, nch int32, ev *keventt, nev int32, ts *timespec) int32 {
358 return libcCall(unsafe.Pointer(abi.FuncPCABI0(kevent_trampoline)), unsafe.Pointer(&kq))
359 }
360 func kevent_trampoline()
361
362
363
364 func pthread_mutex_init(m *pthreadmutex, attr *pthreadmutexattr) int32 {
365 return libcCall(unsafe.Pointer(abi.FuncPCABI0(pthread_mutex_init_trampoline)), unsafe.Pointer(&m))
366 }
367 func pthread_mutex_init_trampoline()
368
369
370
371 func pthread_mutex_lock(m *pthreadmutex) int32 {
372 return libcCall(unsafe.Pointer(abi.FuncPCABI0(pthread_mutex_lock_trampoline)), unsafe.Pointer(&m))
373 }
374 func pthread_mutex_lock_trampoline()
375
376
377
378 func pthread_mutex_unlock(m *pthreadmutex) int32 {
379 return libcCall(unsafe.Pointer(abi.FuncPCABI0(pthread_mutex_unlock_trampoline)), unsafe.Pointer(&m))
380 }
381 func pthread_mutex_unlock_trampoline()
382
383
384
385 func pthread_cond_init(c *pthreadcond, attr *pthreadcondattr) int32 {
386 return libcCall(unsafe.Pointer(abi.FuncPCABI0(pthread_cond_init_trampoline)), unsafe.Pointer(&c))
387 }
388 func pthread_cond_init_trampoline()
389
390
391
392 func pthread_cond_wait(c *pthreadcond, m *pthreadmutex) int32 {
393 return libcCall(unsafe.Pointer(abi.FuncPCABI0(pthread_cond_wait_trampoline)), unsafe.Pointer(&c))
394 }
395 func pthread_cond_wait_trampoline()
396
397
398
399 func pthread_cond_timedwait_relative_np(c *pthreadcond, m *pthreadmutex, t *timespec) int32 {
400 return libcCall(unsafe.Pointer(abi.FuncPCABI0(pthread_cond_timedwait_relative_np_trampoline)), unsafe.Pointer(&c))
401 }
402 func pthread_cond_timedwait_relative_np_trampoline()
403
404
405
406 func pthread_cond_signal(c *pthreadcond) int32 {
407 return libcCall(unsafe.Pointer(abi.FuncPCABI0(pthread_cond_signal_trampoline)), unsafe.Pointer(&c))
408 }
409 func pthread_cond_signal_trampoline()
410
411
412 func exitThread(wait *uint32) {
413 }
414
415
416 func closeonexec(fd int32) {
417 fcntl(fd, _F_SETFD, _FD_CLOEXEC)
418 }
419
420
421 func setNonblock(fd int32) {
422 flags := fcntl(fd, _F_GETFL, 0)
423 fcntl(fd, _F_SETFL, flags|_O_NONBLOCK)
424 }
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
View as plain text