blob: d26e52eaefe19e248e0b94fc82d7c97abf24ce39 [file] [log] [blame]
David K. Bainbridge215e0242017-09-05 23:18:24 -07001// Copyright 2009,2010 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5// FreeBSD system calls.
6// This file is compiled as ordinary Go code,
7// but it is also input to mksyscall,
8// which parses the //sys lines and generates system call stubs.
9// Note that sometimes we use a lowercase //sys name and wrap
10// it in our own nicer implementation, either here or in
11// syscall_bsd.go or syscall_unix.go.
12
13package unix
14
15import "unsafe"
16
17type SockaddrDatalink struct {
18 Len uint8
19 Family uint8
20 Index uint16
21 Type uint8
22 Nlen uint8
23 Alen uint8
24 Slen uint8
25 Data [46]int8
26 raw RawSockaddrDatalink
27}
28
29// Translate "kern.hostname" to []_C_int{0,1,2,3}.
30func nametomib(name string) (mib []_C_int, err error) {
31 const siz = unsafe.Sizeof(mib[0])
32
33 // NOTE(rsc): It seems strange to set the buffer to have
34 // size CTL_MAXNAME+2 but use only CTL_MAXNAME
35 // as the size. I don't know why the +2 is here, but the
36 // kernel uses +2 for its own implementation of this function.
37 // I am scared that if we don't include the +2 here, the kernel
38 // will silently write 2 words farther than we specify
39 // and we'll get memory corruption.
40 var buf [CTL_MAXNAME + 2]_C_int
41 n := uintptr(CTL_MAXNAME) * siz
42
43 p := (*byte)(unsafe.Pointer(&buf[0]))
44 bytes, err := ByteSliceFromString(name)
45 if err != nil {
46 return nil, err
47 }
48
49 // Magic sysctl: "setting" 0.3 to a string name
50 // lets you read back the array of integers form.
51 if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil {
52 return nil, err
53 }
54 return buf[0 : n/siz], nil
55}
56
57func direntIno(buf []byte) (uint64, bool) {
58 return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))
59}
60
61func direntReclen(buf []byte) (uint64, bool) {
62 return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
63}
64
65func direntNamlen(buf []byte) (uint64, bool) {
66 return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
67}
68
69//sysnb pipe() (r int, w int, err error)
70
71func Pipe(p []int) (err error) {
72 if len(p) != 2 {
73 return EINVAL
74 }
75 p[0], p[1], err = pipe()
76 return
77}
78
79func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {
80 var value IPMreqn
81 vallen := _Socklen(SizeofIPMreqn)
82 errno := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
83 return &value, errno
84}
85
86func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) {
87 return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))
88}
89
90func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) {
91 var rsa RawSockaddrAny
92 var len _Socklen = SizeofSockaddrAny
93 nfd, err = accept4(fd, &rsa, &len, flags)
94 if err != nil {
95 return
96 }
97 if len > SizeofSockaddrAny {
98 panic("RawSockaddrAny too small")
99 }
100 sa, err = anyToSockaddr(&rsa)
101 if err != nil {
102 Close(nfd)
103 nfd = 0
104 }
105 return
106}
107
108func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
109 var _p0 unsafe.Pointer
110 var bufsize uintptr
111 if len(buf) > 0 {
112 _p0 = unsafe.Pointer(&buf[0])
113 bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
114 }
115 r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags))
116 n = int(r0)
117 if e1 != 0 {
118 err = e1
119 }
120 return
121}
122
123// Derive extattr namespace and attribute name
124
125func xattrnamespace(fullattr string) (ns int, attr string, err error) {
126 s := -1
127 for idx, val := range fullattr {
128 if val == '.' {
129 s = idx
130 break
131 }
132 }
133
134 if s == -1 {
135 return -1, "", ENOATTR
136 }
137
138 namespace := fullattr[0:s]
139 attr = fullattr[s+1:]
140
141 switch namespace {
142 case "user":
143 return EXTATTR_NAMESPACE_USER, attr, nil
144 case "system":
145 return EXTATTR_NAMESPACE_SYSTEM, attr, nil
146 default:
147 return -1, "", ENOATTR
148 }
149}
150
151func initxattrdest(dest []byte, idx int) (d unsafe.Pointer) {
152 if len(dest) > idx {
153 return unsafe.Pointer(&dest[idx])
154 } else {
155 return unsafe.Pointer(_zero)
156 }
157}
158
159// FreeBSD implements its own syscalls to handle extended attributes
160
161func Getxattr(file string, attr string, dest []byte) (sz int, err error) {
162 d := initxattrdest(dest, 0)
163 destsize := len(dest)
164
165 nsid, a, err := xattrnamespace(attr)
166 if err != nil {
167 return -1, err
168 }
169
170 return ExtattrGetFile(file, nsid, a, uintptr(d), destsize)
171}
172
173func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
174 d := initxattrdest(dest, 0)
175 destsize := len(dest)
176
177 nsid, a, err := xattrnamespace(attr)
178 if err != nil {
179 return -1, err
180 }
181
182 return ExtattrGetFd(fd, nsid, a, uintptr(d), destsize)
183}
184
185func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {
186 d := initxattrdest(dest, 0)
187 destsize := len(dest)
188
189 nsid, a, err := xattrnamespace(attr)
190 if err != nil {
191 return -1, err
192 }
193
194 return ExtattrGetLink(link, nsid, a, uintptr(d), destsize)
195}
196
197// flags are unused on FreeBSD
198
199func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) {
200 d := unsafe.Pointer(&data[0])
201 datasiz := len(data)
202
203 nsid, a, err := xattrnamespace(attr)
204 if err != nil {
205 return
206 }
207
208 _, err = ExtattrSetFd(fd, nsid, a, uintptr(d), datasiz)
209 return
210}
211
212func Setxattr(file string, attr string, data []byte, flags int) (err error) {
213 d := unsafe.Pointer(&data[0])
214 datasiz := len(data)
215
216 nsid, a, err := xattrnamespace(attr)
217 if err != nil {
218 return
219 }
220
221 _, err = ExtattrSetFile(file, nsid, a, uintptr(d), datasiz)
222 return
223}
224
225func Lsetxattr(link string, attr string, data []byte, flags int) (err error) {
226 d := unsafe.Pointer(&data[0])
227 datasiz := len(data)
228
229 nsid, a, err := xattrnamespace(attr)
230 if err != nil {
231 return
232 }
233
234 _, err = ExtattrSetLink(link, nsid, a, uintptr(d), datasiz)
235 return
236}
237
238func Removexattr(file string, attr string) (err error) {
239 nsid, a, err := xattrnamespace(attr)
240 if err != nil {
241 return
242 }
243
244 err = ExtattrDeleteFile(file, nsid, a)
245 return
246}
247
248func Fremovexattr(fd int, attr string) (err error) {
249 nsid, a, err := xattrnamespace(attr)
250 if err != nil {
251 return
252 }
253
254 err = ExtattrDeleteFd(fd, nsid, a)
255 return
256}
257
258func Lremovexattr(link string, attr string) (err error) {
259 nsid, a, err := xattrnamespace(attr)
260 if err != nil {
261 return
262 }
263
264 err = ExtattrDeleteLink(link, nsid, a)
265 return
266}
267
268func Listxattr(file string, dest []byte) (sz int, err error) {
269 d := initxattrdest(dest, 0)
270 destsiz := len(dest)
271
272 // FreeBSD won't allow you to list xattrs from multiple namespaces
273 s := 0
274 var e error
275 for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
276 stmp, e := ExtattrListFile(file, nsid, uintptr(d), destsiz)
277
278 /* Errors accessing system attrs are ignored so that
279 * we can implement the Linux-like behavior of omitting errors that
280 * we don't have read permissions on
281 *
282 * Linux will still error if we ask for user attributes on a file that
283 * we don't have read permissions on, so don't ignore those errors
284 */
285 if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
286 e = nil
287 continue
288 } else if e != nil {
289 return s, e
290 }
291
292 s += stmp
293 destsiz -= s
294 if destsiz < 0 {
295 destsiz = 0
296 }
297 d = initxattrdest(dest, s)
298 }
299
300 return s, e
301}
302
303func Flistxattr(fd int, dest []byte) (sz int, err error) {
304 d := initxattrdest(dest, 0)
305 destsiz := len(dest)
306
307 s := 0
308 var e error
309 for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
310 stmp, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz)
311 if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
312 e = nil
313 continue
314 } else if e != nil {
315 return s, e
316 }
317
318 s += stmp
319 destsiz -= s
320 if destsiz < 0 {
321 destsiz = 0
322 }
323 d = initxattrdest(dest, s)
324 }
325
326 return s, e
327}
328
329func Llistxattr(link string, dest []byte) (sz int, err error) {
330 d := initxattrdest(dest, 0)
331 destsiz := len(dest)
332
333 s := 0
334 var e error
335 for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
336 stmp, e := ExtattrListLink(link, nsid, uintptr(d), destsiz)
337 if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
338 e = nil
339 continue
340 } else if e != nil {
341 return s, e
342 }
343
344 s += stmp
345 destsiz -= s
346 if destsiz < 0 {
347 destsiz = 0
348 }
349 d = initxattrdest(dest, s)
350 }
351
352 return s, e
353}
354
355//sys ioctl(fd int, req uint, arg uintptr) (err error)
356
357// ioctl itself should not be exposed directly, but additional get/set
358// functions for specific types are permissible.
359
360// IoctlSetInt performs an ioctl operation which sets an integer value
361// on fd, using the specified request number.
362func IoctlSetInt(fd int, req uint, value int) error {
363 return ioctl(fd, req, uintptr(value))
364}
365
366func IoctlSetWinsize(fd int, req uint, value *Winsize) error {
367 return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
368}
369
370func IoctlSetTermios(fd int, req uint, value *Termios) error {
371 return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
372}
373
374// IoctlGetInt performs an ioctl operation which gets an integer value
375// from fd, using the specified request number.
376func IoctlGetInt(fd int, req uint) (int, error) {
377 var value int
378 err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
379 return value, err
380}
381
382func IoctlGetWinsize(fd int, req uint) (*Winsize, error) {
383 var value Winsize
384 err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
385 return &value, err
386}
387
388func IoctlGetTermios(fd int, req uint) (*Termios, error) {
389 var value Termios
390 err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
391 return &value, err
392}
393
394/*
395 * Exposed directly
396 */
397//sys Access(path string, mode uint32) (err error)
398//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error)
399//sys CapEnter() (err error)
400//sys capRightsGet(version int, fd int, rightsp *CapRights) (err error) = SYS___CAP_RIGHTS_GET
401//sys capRightsLimit(fd int, rightsp *CapRights) (err error)
402//sys Chdir(path string) (err error)
403//sys Chflags(path string, flags int) (err error)
404//sys Chmod(path string, mode uint32) (err error)
405//sys Chown(path string, uid int, gid int) (err error)
406//sys Chroot(path string) (err error)
407//sys Close(fd int) (err error)
408//sys Dup(fd int) (nfd int, err error)
409//sys Dup2(from int, to int) (err error)
410//sys Exit(code int)
411//sys ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
412//sys ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
413//sys ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error)
414//sys ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
415//sys ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
416//sys ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
417//sys ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error)
418//sys ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
419//sys ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
420//sys ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
421//sys ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error)
422//sys ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
423//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE
424//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
425//sys Fchdir(fd int) (err error)
426//sys Fchflags(fd int, flags int) (err error)
427//sys Fchmod(fd int, mode uint32) (err error)
428//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
429//sys Fchown(fd int, uid int, gid int) (err error)
430//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
431//sys Flock(fd int, how int) (err error)
432//sys Fpathconf(fd int, name int) (val int, err error)
433//sys Fstat(fd int, stat *Stat_t) (err error)
434//sys Fstatfs(fd int, stat *Statfs_t) (err error)
435//sys Fsync(fd int) (err error)
436//sys Ftruncate(fd int, length int64) (err error)
437//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error)
438//sys Getdtablesize() (size int)
439//sysnb Getegid() (egid int)
440//sysnb Geteuid() (uid int)
441//sysnb Getgid() (gid int)
442//sysnb Getpgid(pid int) (pgid int, err error)
443//sysnb Getpgrp() (pgrp int)
444//sysnb Getpid() (pid int)
445//sysnb Getppid() (ppid int)
446//sys Getpriority(which int, who int) (prio int, err error)
447//sysnb Getrlimit(which int, lim *Rlimit) (err error)
448//sysnb Getrusage(who int, rusage *Rusage) (err error)
449//sysnb Getsid(pid int) (sid int, err error)
450//sysnb Gettimeofday(tv *Timeval) (err error)
451//sysnb Getuid() (uid int)
452//sys Issetugid() (tainted bool)
453//sys Kill(pid int, signum syscall.Signal) (err error)
454//sys Kqueue() (fd int, err error)
455//sys Lchown(path string, uid int, gid int) (err error)
456//sys Link(path string, link string) (err error)
457//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
458//sys Listen(s int, backlog int) (err error)
459//sys Lstat(path string, stat *Stat_t) (err error)
460//sys Mkdir(path string, mode uint32) (err error)
461//sys Mkdirat(dirfd int, path string, mode uint32) (err error)
462//sys Mkfifo(path string, mode uint32) (err error)
463//sys Mknod(path string, mode uint32, dev int) (err error)
464//sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
465//sys Open(path string, mode int, perm uint32) (fd int, err error)
466//sys Openat(fdat int, path string, mode int, perm uint32) (fd int, err error)
467//sys Pathconf(path string, name int) (val int, err error)
468//sys Pread(fd int, p []byte, offset int64) (n int, err error)
469//sys Pwrite(fd int, p []byte, offset int64) (n int, err error)
470//sys read(fd int, p []byte) (n int, err error)
471//sys Readlink(path string, buf []byte) (n int, err error)
472//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error)
473//sys Rename(from string, to string) (err error)
474//sys Renameat(fromfd int, from string, tofd int, to string) (err error)
475//sys Revoke(path string) (err error)
476//sys Rmdir(path string) (err error)
477//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
478//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error)
479//sysnb Setegid(egid int) (err error)
480//sysnb Seteuid(euid int) (err error)
481//sysnb Setgid(gid int) (err error)
482//sys Setlogin(name string) (err error)
483//sysnb Setpgid(pid int, pgid int) (err error)
484//sys Setpriority(which int, who int, prio int) (err error)
485//sysnb Setregid(rgid int, egid int) (err error)
486//sysnb Setreuid(ruid int, euid int) (err error)
487//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
488//sysnb Setresuid(ruid int, euid int, suid int) (err error)
489//sysnb Setrlimit(which int, lim *Rlimit) (err error)
490//sysnb Setsid() (pid int, err error)
491//sysnb Settimeofday(tp *Timeval) (err error)
492//sysnb Setuid(uid int) (err error)
493//sys Stat(path string, stat *Stat_t) (err error)
494//sys Statfs(path string, stat *Statfs_t) (err error)
495//sys Symlink(path string, link string) (err error)
496//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
497//sys Sync() (err error)
498//sys Truncate(path string, length int64) (err error)
499//sys Umask(newmask int) (oldmask int)
500//sys Undelete(path string) (err error)
501//sys Unlink(path string) (err error)
502//sys Unlinkat(dirfd int, path string, flags int) (err error)
503//sys Unmount(path string, flags int) (err error)
504//sys write(fd int, p []byte) (n int, err error)
505//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
506//sys munmap(addr uintptr, length uintptr) (err error)
507//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ
508//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE
509//sys accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error)
510//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)
511
512/*
513 * Unimplemented
514 */
515// Profil
516// Sigaction
517// Sigprocmask
518// Getlogin
519// Sigpending
520// Sigaltstack
521// Ioctl
522// Reboot
523// Execve
524// Vfork
525// Sbrk
526// Sstk
527// Ovadvise
528// Mincore
529// Setitimer
530// Swapon
531// Select
532// Sigsuspend
533// Readv
534// Writev
535// Nfssvc
536// Getfh
537// Quotactl
538// Mount
539// Csops
540// Waitid
541// Add_profil
542// Kdebug_trace
543// Sigreturn
544// Atsocket
545// Kqueue_from_portset_np
546// Kqueue_portset
547// Getattrlist
548// Setattrlist
549// Getdirentriesattr
550// Searchfs
551// Delete
552// Copyfile
553// Poll
554// Watchevent
555// Waitevent
556// Modwatch
557// Getxattr
558// Fgetxattr
559// Setxattr
560// Fsetxattr
561// Removexattr
562// Fremovexattr
563// Listxattr
564// Flistxattr
565// Fsctl
566// Initgroups
567// Posix_spawn
568// Nfsclnt
569// Fhopen
570// Minherit
571// Semsys
572// Msgsys
573// Shmsys
574// Semctl
575// Semget
576// Semop
577// Msgctl
578// Msgget
579// Msgsnd
580// Msgrcv
581// Shmat
582// Shmctl
583// Shmdt
584// Shmget
585// Shm_open
586// Shm_unlink
587// Sem_open
588// Sem_close
589// Sem_unlink
590// Sem_wait
591// Sem_trywait
592// Sem_post
593// Sem_getvalue
594// Sem_init
595// Sem_destroy
596// Open_extended
597// Umask_extended
598// Stat_extended
599// Lstat_extended
600// Fstat_extended
601// Chmod_extended
602// Fchmod_extended
603// Access_extended
604// Settid
605// Gettid
606// Setsgroups
607// Getsgroups
608// Setwgroups
609// Getwgroups
610// Mkfifo_extended
611// Mkdir_extended
612// Identitysvc
613// Shared_region_check_np
614// Shared_region_map_np
615// __pthread_mutex_destroy
616// __pthread_mutex_init
617// __pthread_mutex_lock
618// __pthread_mutex_trylock
619// __pthread_mutex_unlock
620// __pthread_cond_init
621// __pthread_cond_destroy
622// __pthread_cond_broadcast
623// __pthread_cond_signal
624// Setsid_with_pid
625// __pthread_cond_timedwait
626// Aio_fsync
627// Aio_return
628// Aio_suspend
629// Aio_cancel
630// Aio_error
631// Aio_read
632// Aio_write
633// Lio_listio
634// __pthread_cond_wait
635// Iopolicysys
636// __pthread_kill
637// __pthread_sigmask
638// __sigwait
639// __disable_threadsignal
640// __pthread_markcancel
641// __pthread_canceled
642// __semwait_signal
643// Proc_info
644// Stat64_extended
645// Lstat64_extended
646// Fstat64_extended
647// __pthread_chdir
648// __pthread_fchdir
649// Audit
650// Auditon
651// Getauid
652// Setauid
653// Getaudit
654// Setaudit
655// Getaudit_addr
656// Setaudit_addr
657// Auditctl
658// Bsdthread_create
659// Bsdthread_terminate
660// Stack_snapshot
661// Bsdthread_register
662// Workq_open
663// Workq_ops
664// __mac_execve
665// __mac_syscall
666// __mac_get_file
667// __mac_set_file
668// __mac_get_link
669// __mac_set_link
670// __mac_get_proc
671// __mac_set_proc
672// __mac_get_fd
673// __mac_set_fd
674// __mac_get_pid
675// __mac_get_lcid
676// __mac_get_lctx
677// __mac_set_lctx
678// Setlcid
679// Read_nocancel
680// Write_nocancel
681// Open_nocancel
682// Close_nocancel
683// Wait4_nocancel
684// Recvmsg_nocancel
685// Sendmsg_nocancel
686// Recvfrom_nocancel
687// Accept_nocancel
688// Fcntl_nocancel
689// Select_nocancel
690// Fsync_nocancel
691// Connect_nocancel
692// Sigsuspend_nocancel
693// Readv_nocancel
694// Writev_nocancel
695// Sendto_nocancel
696// Pread_nocancel
697// Pwrite_nocancel
698// Waitid_nocancel
699// Poll_nocancel
700// Msgsnd_nocancel
701// Msgrcv_nocancel
702// Sem_wait_nocancel
703// Aio_suspend_nocancel
704// __sigwait_nocancel
705// __semwait_signal_nocancel
706// __mac_mount
707// __mac_get_mount
708// __mac_getfsstat