github.com/etecs-ru/go-sys-wineventlog@v0.0.0-20210227233244-4c3abb794018/unix/syscall_darwin.go (about) 1 // 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 // Darwin 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 13 package unix 14 15 import ( 16 "runtime" 17 "syscall" 18 "unsafe" 19 ) 20 21 // SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. 22 type SockaddrDatalink struct { 23 Len uint8 24 Family uint8 25 Index uint16 26 Type uint8 27 Nlen uint8 28 Alen uint8 29 Slen uint8 30 Data [12]int8 31 raw RawSockaddrDatalink 32 } 33 34 // SockaddrCtl implements the Sockaddr interface for AF_SYSTEM type sockets. 35 type SockaddrCtl struct { 36 ID uint32 37 Unit uint32 38 raw RawSockaddrCtl 39 } 40 41 func (sa *SockaddrCtl) sockaddr() (unsafe.Pointer, _Socklen, error) { 42 sa.raw.Sc_len = SizeofSockaddrCtl 43 sa.raw.Sc_family = AF_SYSTEM 44 sa.raw.Ss_sysaddr = AF_SYS_CONTROL 45 sa.raw.Sc_id = sa.ID 46 sa.raw.Sc_unit = sa.Unit 47 return unsafe.Pointer(&sa.raw), SizeofSockaddrCtl, nil 48 } 49 50 func anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { 51 switch rsa.Addr.Family { 52 case AF_SYSTEM: 53 pp := (*RawSockaddrCtl)(unsafe.Pointer(rsa)) 54 if pp.Ss_sysaddr == AF_SYS_CONTROL { 55 sa := new(SockaddrCtl) 56 sa.ID = pp.Sc_id 57 sa.Unit = pp.Sc_unit 58 return sa, nil 59 } 60 } 61 return nil, EAFNOSUPPORT 62 } 63 64 // Some external packages rely on SYS___SYSCTL being defined to implement their 65 // own sysctl wrappers. Provide it here, even though direct syscalls are no 66 // longer supported on darwin. 67 const SYS___SYSCTL = SYS_SYSCTL 68 69 // Translate "kern.hostname" to []_C_int{0,1,2,3}. 70 func nametomib(name string) (mib []_C_int, err error) { 71 const siz = unsafe.Sizeof(mib[0]) 72 73 // NOTE(rsc): It seems strange to set the buffer to have 74 // size CTL_MAXNAME+2 but use only CTL_MAXNAME 75 // as the size. I don't know why the +2 is here, but the 76 // kernel uses +2 for its own implementation of this function. 77 // I am scared that if we don't include the +2 here, the kernel 78 // will silently write 2 words farther than we specify 79 // and we'll get memory corruption. 80 var buf [CTL_MAXNAME + 2]_C_int 81 n := uintptr(CTL_MAXNAME) * siz 82 83 p := (*byte)(unsafe.Pointer(&buf[0])) 84 bytes, err := ByteSliceFromString(name) 85 if err != nil { 86 return nil, err 87 } 88 89 // Magic sysctl: "setting" 0.3 to a string name 90 // lets you read back the array of integers form. 91 if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil { 92 return nil, err 93 } 94 return buf[0 : n/siz], nil 95 } 96 97 func direntIno(buf []byte) (uint64, bool) { 98 return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino)) 99 } 100 101 func direntReclen(buf []byte) (uint64, bool) { 102 return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) 103 } 104 105 func direntNamlen(buf []byte) (uint64, bool) { 106 return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) 107 } 108 109 func PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) } 110 func PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) } 111 112 type attrList struct { 113 bitmapCount uint16 114 _ uint16 115 CommonAttr uint32 116 VolAttr uint32 117 DirAttr uint32 118 FileAttr uint32 119 Forkattr uint32 120 } 121 122 //sysnb pipe(p *[2]int32) (err error) 123 124 func Pipe(p []int) (err error) { 125 if len(p) != 2 { 126 return EINVAL 127 } 128 var x [2]int32 129 err = pipe(&x) 130 p[0] = int(x[0]) 131 p[1] = int(x[1]) 132 return 133 } 134 135 func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { 136 var _p0 unsafe.Pointer 137 var bufsize uintptr 138 if len(buf) > 0 { 139 _p0 = unsafe.Pointer(&buf[0]) 140 bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) 141 } 142 return getfsstat(_p0, bufsize, flags) 143 } 144 145 func xattrPointer(dest []byte) *byte { 146 // It's only when dest is set to NULL that the OS X implementations of 147 // getxattr() and listxattr() return the current sizes of the named attributes. 148 // An empty byte array is not sufficient. To maintain the same behaviour as the 149 // linux implementation, we wrap around the system calls and pass in NULL when 150 // dest is empty. 151 var destp *byte 152 if len(dest) > 0 { 153 destp = &dest[0] 154 } 155 return destp 156 } 157 158 //sys getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) 159 160 func Getxattr(path string, attr string, dest []byte) (sz int, err error) { 161 return getxattr(path, attr, xattrPointer(dest), len(dest), 0, 0) 162 } 163 164 func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) { 165 return getxattr(link, attr, xattrPointer(dest), len(dest), 0, XATTR_NOFOLLOW) 166 } 167 168 //sys fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) 169 170 func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { 171 return fgetxattr(fd, attr, xattrPointer(dest), len(dest), 0, 0) 172 } 173 174 //sys setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) 175 176 func Setxattr(path string, attr string, data []byte, flags int) (err error) { 177 // The parameters for the OS X implementation vary slightly compared to the 178 // linux system call, specifically the position parameter: 179 // 180 // linux: 181 // int setxattr( 182 // const char *path, 183 // const char *name, 184 // const void *value, 185 // size_t size, 186 // int flags 187 // ); 188 // 189 // darwin: 190 // int setxattr( 191 // const char *path, 192 // const char *name, 193 // void *value, 194 // size_t size, 195 // u_int32_t position, 196 // int options 197 // ); 198 // 199 // position specifies the offset within the extended attribute. In the 200 // current implementation, only the resource fork extended attribute makes 201 // use of this argument. For all others, position is reserved. We simply 202 // default to setting it to zero. 203 return setxattr(path, attr, xattrPointer(data), len(data), 0, flags) 204 } 205 206 func Lsetxattr(link string, attr string, data []byte, flags int) (err error) { 207 return setxattr(link, attr, xattrPointer(data), len(data), 0, flags|XATTR_NOFOLLOW) 208 } 209 210 //sys fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) 211 212 func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) { 213 return fsetxattr(fd, attr, xattrPointer(data), len(data), 0, 0) 214 } 215 216 //sys removexattr(path string, attr string, options int) (err error) 217 218 func Removexattr(path string, attr string) (err error) { 219 // We wrap around and explicitly zero out the options provided to the OS X 220 // implementation of removexattr, we do so for interoperability with the 221 // linux variant. 222 return removexattr(path, attr, 0) 223 } 224 225 func Lremovexattr(link string, attr string) (err error) { 226 return removexattr(link, attr, XATTR_NOFOLLOW) 227 } 228 229 //sys fremovexattr(fd int, attr string, options int) (err error) 230 231 func Fremovexattr(fd int, attr string) (err error) { 232 return fremovexattr(fd, attr, 0) 233 } 234 235 //sys listxattr(path string, dest *byte, size int, options int) (sz int, err error) 236 237 func Listxattr(path string, dest []byte) (sz int, err error) { 238 return listxattr(path, xattrPointer(dest), len(dest), 0) 239 } 240 241 func Llistxattr(link string, dest []byte) (sz int, err error) { 242 return listxattr(link, xattrPointer(dest), len(dest), XATTR_NOFOLLOW) 243 } 244 245 //sys flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) 246 247 func Flistxattr(fd int, dest []byte) (sz int, err error) { 248 return flistxattr(fd, xattrPointer(dest), len(dest), 0) 249 } 250 251 func setattrlistTimes(path string, times []Timespec, flags int) error { 252 _p0, err := BytePtrFromString(path) 253 if err != nil { 254 return err 255 } 256 257 var attrList attrList 258 attrList.bitmapCount = ATTR_BIT_MAP_COUNT 259 attrList.CommonAttr = ATTR_CMN_MODTIME | ATTR_CMN_ACCTIME 260 261 // order is mtime, atime: the opposite of Chtimes 262 attributes := [2]Timespec{times[1], times[0]} 263 options := 0 264 if flags&AT_SYMLINK_NOFOLLOW != 0 { 265 options |= FSOPT_NOFOLLOW 266 } 267 return setattrlist( 268 _p0, 269 unsafe.Pointer(&attrList), 270 unsafe.Pointer(&attributes), 271 unsafe.Sizeof(attributes), 272 options) 273 } 274 275 //sys setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) 276 277 func utimensat(dirfd int, path string, times *[2]Timespec, flags int) error { 278 // Darwin doesn't support SYS_UTIMENSAT 279 return ENOSYS 280 } 281 282 /* 283 * Wrapped 284 */ 285 286 //sys fcntl(fd int, cmd int, arg int) (val int, err error) 287 288 //sys kill(pid int, signum int, posix int) (err error) 289 290 func Kill(pid int, signum syscall.Signal) (err error) { return kill(pid, int(signum), 1) } 291 292 //sys ioctl(fd int, req uint, arg uintptr) (err error) 293 294 func IoctlCtlInfo(fd int, ctlInfo *CtlInfo) error { 295 err := ioctl(fd, CTLIOCGINFO, uintptr(unsafe.Pointer(ctlInfo))) 296 runtime.KeepAlive(ctlInfo) 297 return err 298 } 299 300 // IfreqMTU is struct ifreq used to get or set a network device's MTU. 301 type IfreqMTU struct { 302 Name [IFNAMSIZ]byte 303 MTU int32 304 } 305 306 // IoctlGetIfreqMTU performs the SIOCGIFMTU ioctl operation on fd to get the MTU 307 // of the network device specified by ifname. 308 func IoctlGetIfreqMTU(fd int, ifname string) (*IfreqMTU, error) { 309 var ifreq IfreqMTU 310 copy(ifreq.Name[:], ifname) 311 err := ioctl(fd, SIOCGIFMTU, uintptr(unsafe.Pointer(&ifreq))) 312 return &ifreq, err 313 } 314 315 // IoctlSetIfreqMTU performs the SIOCSIFMTU ioctl operation on fd to set the MTU 316 // of the network device specified by ifreq.Name. 317 func IoctlSetIfreqMTU(fd int, ifreq *IfreqMTU) error { 318 err := ioctl(fd, SIOCSIFMTU, uintptr(unsafe.Pointer(ifreq))) 319 runtime.KeepAlive(ifreq) 320 return err 321 } 322 323 //sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS_SYSCTL 324 325 func Uname(uname *Utsname) error { 326 mib := []_C_int{CTL_KERN, KERN_OSTYPE} 327 n := unsafe.Sizeof(uname.Sysname) 328 if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil { 329 return err 330 } 331 332 mib = []_C_int{CTL_KERN, KERN_HOSTNAME} 333 n = unsafe.Sizeof(uname.Nodename) 334 if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil { 335 return err 336 } 337 338 mib = []_C_int{CTL_KERN, KERN_OSRELEASE} 339 n = unsafe.Sizeof(uname.Release) 340 if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil { 341 return err 342 } 343 344 mib = []_C_int{CTL_KERN, KERN_VERSION} 345 n = unsafe.Sizeof(uname.Version) 346 if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil { 347 return err 348 } 349 350 // The version might have newlines or tabs in it, convert them to 351 // spaces. 352 for i, b := range uname.Version { 353 if b == '\n' || b == '\t' { 354 if i == len(uname.Version)-1 { 355 uname.Version[i] = 0 356 } else { 357 uname.Version[i] = ' ' 358 } 359 } 360 } 361 362 mib = []_C_int{CTL_HW, HW_MACHINE} 363 n = unsafe.Sizeof(uname.Machine) 364 if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil { 365 return err 366 } 367 368 return nil 369 } 370 371 func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { 372 if raceenabled { 373 raceReleaseMerge(unsafe.Pointer(&ioSync)) 374 } 375 var length = int64(count) 376 err = sendfile(infd, outfd, *offset, &length, nil, 0) 377 written = int(length) 378 return 379 } 380 381 // GetsockoptXucred is a getsockopt wrapper that returns an Xucred struct. 382 // The usual level and opt are SOL_LOCAL and LOCAL_PEERCRED, respectively. 383 func GetsockoptXucred(fd, level, opt int) (*Xucred, error) { 384 x := new(Xucred) 385 vallen := _Socklen(SizeofXucred) 386 err := getsockopt(fd, level, opt, unsafe.Pointer(x), &vallen) 387 return x, err 388 } 389 390 //sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) 391 392 /* 393 * Exposed directly 394 */ 395 //sys Access(path string, mode uint32) (err error) 396 //sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) 397 //sys Chdir(path string) (err error) 398 //sys Chflags(path string, flags int) (err error) 399 //sys Chmod(path string, mode uint32) (err error) 400 //sys Chown(path string, uid int, gid int) (err error) 401 //sys Chroot(path string) (err error) 402 //sys ClockGettime(clockid int32, time *Timespec) (err error) 403 //sys Close(fd int) (err error) 404 //sys Clonefile(src string, dst string, flags int) (err error) 405 //sys Clonefileat(srcDirfd int, src string, dstDirfd int, dst string, flags int) (err error) 406 //sys Dup(fd int) (nfd int, err error) 407 //sys Dup2(from int, to int) (err error) 408 //sys Exchangedata(path1 string, path2 string, options int) (err error) 409 //sys Exit(code int) 410 //sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) 411 //sys Fchdir(fd int) (err error) 412 //sys Fchflags(fd int, flags int) (err error) 413 //sys Fchmod(fd int, mode uint32) (err error) 414 //sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) 415 //sys Fchown(fd int, uid int, gid int) (err error) 416 //sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) 417 //sys Fclonefileat(srcDirfd int, dstDirfd int, dst string, flags int) (err error) 418 //sys Flock(fd int, how int) (err error) 419 //sys Fpathconf(fd int, name int) (val int, err error) 420 //sys Fsync(fd int) (err error) 421 //sys Ftruncate(fd int, length int64) (err error) 422 //sys Getcwd(buf []byte) (n int, err error) 423 //sys Getdtablesize() (size int) 424 //sysnb Getegid() (egid int) 425 //sysnb Geteuid() (uid int) 426 //sysnb Getgid() (gid int) 427 //sysnb Getpgid(pid int) (pgid int, err error) 428 //sysnb Getpgrp() (pgrp int) 429 //sysnb Getpid() (pid int) 430 //sysnb Getppid() (ppid int) 431 //sys Getpriority(which int, who int) (prio int, err error) 432 //sysnb Getrlimit(which int, lim *Rlimit) (err error) 433 //sysnb Getrusage(who int, rusage *Rusage) (err error) 434 //sysnb Getsid(pid int) (sid int, err error) 435 //sysnb Gettimeofday(tp *Timeval) (err error) 436 //sysnb Getuid() (uid int) 437 //sysnb Issetugid() (tainted bool) 438 //sys Kqueue() (fd int, err error) 439 //sys Lchown(path string, uid int, gid int) (err error) 440 //sys Link(path string, link string) (err error) 441 //sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) 442 //sys Listen(s int, backlog int) (err error) 443 //sys Mkdir(path string, mode uint32) (err error) 444 //sys Mkdirat(dirfd int, path string, mode uint32) (err error) 445 //sys Mkfifo(path string, mode uint32) (err error) 446 //sys Mknod(path string, mode uint32, dev int) (err error) 447 //sys Open(path string, mode int, perm uint32) (fd int, err error) 448 //sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) 449 //sys Pathconf(path string, name int) (val int, err error) 450 //sys Pread(fd int, p []byte, offset int64) (n int, err error) 451 //sys Pwrite(fd int, p []byte, offset int64) (n int, err error) 452 //sys read(fd int, p []byte) (n int, err error) 453 //sys Readlink(path string, buf []byte) (n int, err error) 454 //sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) 455 //sys Rename(from string, to string) (err error) 456 //sys Renameat(fromfd int, from string, tofd int, to string) (err error) 457 //sys Revoke(path string) (err error) 458 //sys Rmdir(path string) (err error) 459 //sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK 460 //sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) 461 //sys Setegid(egid int) (err error) 462 //sysnb Seteuid(euid int) (err error) 463 //sysnb Setgid(gid int) (err error) 464 //sys Setlogin(name string) (err error) 465 //sysnb Setpgid(pid int, pgid int) (err error) 466 //sys Setpriority(which int, who int, prio int) (err error) 467 //sys Setprivexec(flag int) (err error) 468 //sysnb Setregid(rgid int, egid int) (err error) 469 //sysnb Setreuid(ruid int, euid int) (err error) 470 //sysnb Setrlimit(which int, lim *Rlimit) (err error) 471 //sysnb Setsid() (pid int, err error) 472 //sysnb Settimeofday(tp *Timeval) (err error) 473 //sysnb Setuid(uid int) (err error) 474 //sys Symlink(path string, link string) (err error) 475 //sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) 476 //sys Sync() (err error) 477 //sys Truncate(path string, length int64) (err error) 478 //sys Umask(newmask int) (oldmask int) 479 //sys Undelete(path string) (err error) 480 //sys Unlink(path string) (err error) 481 //sys Unlinkat(dirfd int, path string, flags int) (err error) 482 //sys Unmount(path string, flags int) (err error) 483 //sys write(fd int, p []byte) (n int, err error) 484 //sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) 485 //sys munmap(addr uintptr, length uintptr) (err error) 486 //sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ 487 //sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE 488 489 /* 490 * Unimplemented 491 */ 492 // Profil 493 // Sigaction 494 // Sigprocmask 495 // Getlogin 496 // Sigpending 497 // Sigaltstack 498 // Ioctl 499 // Reboot 500 // Execve 501 // Vfork 502 // Sbrk 503 // Sstk 504 // Ovadvise 505 // Mincore 506 // Setitimer 507 // Swapon 508 // Select 509 // Sigsuspend 510 // Readv 511 // Writev 512 // Nfssvc 513 // Getfh 514 // Quotactl 515 // Mount 516 // Csops 517 // Waitid 518 // Add_profil 519 // Kdebug_trace 520 // Sigreturn 521 // Atsocket 522 // Kqueue_from_portset_np 523 // Kqueue_portset 524 // Getattrlist 525 // Setattrlist 526 // Getdirentriesattr 527 // Searchfs 528 // Delete 529 // Copyfile 530 // Watchevent 531 // Waitevent 532 // Modwatch 533 // Fsctl 534 // Initgroups 535 // Posix_spawn 536 // Nfsclnt 537 // Fhopen 538 // Minherit 539 // Semsys 540 // Msgsys 541 // Shmsys 542 // Semctl 543 // Semget 544 // Semop 545 // Msgctl 546 // Msgget 547 // Msgsnd 548 // Msgrcv 549 // Shmat 550 // Shmctl 551 // Shmdt 552 // Shmget 553 // Shm_open 554 // Shm_unlink 555 // Sem_open 556 // Sem_close 557 // Sem_unlink 558 // Sem_wait 559 // Sem_trywait 560 // Sem_post 561 // Sem_getvalue 562 // Sem_init 563 // Sem_destroy 564 // Open_extended 565 // Umask_extended 566 // Stat_extended 567 // Lstat_extended 568 // Fstat_extended 569 // Chmod_extended 570 // Fchmod_extended 571 // Access_extended 572 // Settid 573 // Gettid 574 // Setsgroups 575 // Getsgroups 576 // Setwgroups 577 // Getwgroups 578 // Mkfifo_extended 579 // Mkdir_extended 580 // Identitysvc 581 // Shared_region_check_np 582 // Shared_region_map_np 583 // __pthread_mutex_destroy 584 // __pthread_mutex_init 585 // __pthread_mutex_lock 586 // __pthread_mutex_trylock 587 // __pthread_mutex_unlock 588 // __pthread_cond_init 589 // __pthread_cond_destroy 590 // __pthread_cond_broadcast 591 // __pthread_cond_signal 592 // Setsid_with_pid 593 // __pthread_cond_timedwait 594 // Aio_fsync 595 // Aio_return 596 // Aio_suspend 597 // Aio_cancel 598 // Aio_error 599 // Aio_read 600 // Aio_write 601 // Lio_listio 602 // __pthread_cond_wait 603 // Iopolicysys 604 // __pthread_kill 605 // __pthread_sigmask 606 // __sigwait 607 // __disable_threadsignal 608 // __pthread_markcancel 609 // __pthread_canceled 610 // __semwait_signal 611 // Proc_info 612 // sendfile 613 // Stat64_extended 614 // Lstat64_extended 615 // Fstat64_extended 616 // __pthread_chdir 617 // __pthread_fchdir 618 // Audit 619 // Auditon 620 // Getauid 621 // Setauid 622 // Getaudit 623 // Setaudit 624 // Getaudit_addr 625 // Setaudit_addr 626 // Auditctl 627 // Bsdthread_create 628 // Bsdthread_terminate 629 // Stack_snapshot 630 // Bsdthread_register 631 // Workq_open 632 // Workq_ops 633 // __mac_execve 634 // __mac_syscall 635 // __mac_get_file 636 // __mac_set_file 637 // __mac_get_link 638 // __mac_set_link 639 // __mac_get_proc 640 // __mac_set_proc 641 // __mac_get_fd 642 // __mac_set_fd 643 // __mac_get_pid 644 // __mac_get_lcid 645 // __mac_get_lctx 646 // __mac_set_lctx 647 // Setlcid 648 // Read_nocancel 649 // Write_nocancel 650 // Open_nocancel 651 // Close_nocancel 652 // Wait4_nocancel 653 // Recvmsg_nocancel 654 // Sendmsg_nocancel 655 // Recvfrom_nocancel 656 // Accept_nocancel 657 // Fcntl_nocancel 658 // Select_nocancel 659 // Fsync_nocancel 660 // Connect_nocancel 661 // Sigsuspend_nocancel 662 // Readv_nocancel 663 // Writev_nocancel 664 // Sendto_nocancel 665 // Pread_nocancel 666 // Pwrite_nocancel 667 // Waitid_nocancel 668 // Poll_nocancel 669 // Msgsnd_nocancel 670 // Msgrcv_nocancel 671 // Sem_wait_nocancel 672 // Aio_suspend_nocancel 673 // __sigwait_nocancel 674 // __semwait_signal_nocancel 675 // __mac_mount 676 // __mac_get_mount 677 // __mac_getfsstat