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