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// 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 ( 16 "sync" 17 "unsafe" 18) 19 20const ( 21 SYS_FSTAT_FREEBSD12 = 551 // { int fstat(int fd, _Out_ struct stat *sb); } 22 SYS_FSTATAT_FREEBSD12 = 552 // { int fstatat(int fd, _In_z_ char *path, \ 23 SYS_GETDIRENTRIES_FREEBSD12 = 554 // { ssize_t getdirentries(int fd, \ 24 SYS_STATFS_FREEBSD12 = 555 // { int statfs(_In_z_ char *path, \ 25 SYS_FSTATFS_FREEBSD12 = 556 // { int fstatfs(int fd, \ 26 SYS_GETFSSTAT_FREEBSD12 = 557 // { int getfsstat( \ 27 SYS_MKNODAT_FREEBSD12 = 559 // { int mknodat(int fd, _In_z_ char *path, \ 28) 29 30// See https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/versions.html. 31var ( 32 osreldateOnce sync.Once 33 osreldate uint32 34) 35 36// INO64_FIRST from /usr/src/lib/libc/sys/compat-ino64.h 37const _ino64First = 1200031 38 39func supportsABI(ver uint32) bool { 40 osreldateOnce.Do(func() { osreldate, _ = SysctlUint32("kern.osreldate") }) 41 return osreldate >= ver 42} 43 44// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. 45type SockaddrDatalink struct { 46 Len uint8 47 Family uint8 48 Index uint16 49 Type uint8 50 Nlen uint8 51 Alen uint8 52 Slen uint8 53 Data [46]int8 54 raw RawSockaddrDatalink 55} 56 57func anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { 58 return nil, EAFNOSUPPORT 59} 60 61// Translate "kern.hostname" to []_C_int{0,1,2,3}. 62func nametomib(name string) (mib []_C_int, err error) { 63 const siz = unsafe.Sizeof(mib[0]) 64 65 // NOTE(rsc): It seems strange to set the buffer to have 66 // size CTL_MAXNAME+2 but use only CTL_MAXNAME 67 // as the size. I don't know why the +2 is here, but the 68 // kernel uses +2 for its own implementation of this function. 69 // I am scared that if we don't include the +2 here, the kernel 70 // will silently write 2 words farther than we specify 71 // and we'll get memory corruption. 72 var buf [CTL_MAXNAME + 2]_C_int 73 n := uintptr(CTL_MAXNAME) * siz 74 75 p := (*byte)(unsafe.Pointer(&buf[0])) 76 bytes, err := ByteSliceFromString(name) 77 if err != nil { 78 return nil, err 79 } 80 81 // Magic sysctl: "setting" 0.3 to a string name 82 // lets you read back the array of integers form. 83 if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil { 84 return nil, err 85 } 86 return buf[0 : n/siz], nil 87} 88 89func direntIno(buf []byte) (uint64, bool) { 90 return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) 91} 92 93func direntReclen(buf []byte) (uint64, bool) { 94 return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) 95} 96 97func direntNamlen(buf []byte) (uint64, bool) { 98 return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) 99} 100 101func Pipe(p []int) (err error) { 102 return Pipe2(p, 0) 103} 104 105//sysnb pipe2(p *[2]_C_int, flags int) (err error) 106 107func Pipe2(p []int, flags int) error { 108 if len(p) != 2 { 109 return EINVAL 110 } 111 var pp [2]_C_int 112 err := pipe2(&pp, flags) 113 p[0] = int(pp[0]) 114 p[1] = int(pp[1]) 115 return err 116} 117 118func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) { 119 var value IPMreqn 120 vallen := _Socklen(SizeofIPMreqn) 121 errno := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) 122 return &value, errno 123} 124 125func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) { 126 return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq)) 127} 128 129func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) { 130 var rsa RawSockaddrAny 131 var len _Socklen = SizeofSockaddrAny 132 nfd, err = accept4(fd, &rsa, &len, flags) 133 if err != nil { 134 return 135 } 136 if len > SizeofSockaddrAny { 137 panic("RawSockaddrAny too small") 138 } 139 sa, err = anyToSockaddr(fd, &rsa) 140 if err != nil { 141 Close(nfd) 142 nfd = 0 143 } 144 return 145} 146 147//sys Getcwd(buf []byte) (n int, err error) = SYS___GETCWD 148 149func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { 150 var ( 151 _p0 unsafe.Pointer 152 bufsize uintptr 153 oldBuf []statfs_freebsd11_t 154 needsConvert bool 155 ) 156 157 if len(buf) > 0 { 158 if supportsABI(_ino64First) { 159 _p0 = unsafe.Pointer(&buf[0]) 160 bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) 161 } else { 162 n := len(buf) 163 oldBuf = make([]statfs_freebsd11_t, n) 164 _p0 = unsafe.Pointer(&oldBuf[0]) 165 bufsize = unsafe.Sizeof(statfs_freebsd11_t{}) * uintptr(n) 166 needsConvert = true 167 } 168 } 169 var sysno uintptr = SYS_GETFSSTAT 170 if supportsABI(_ino64First) { 171 sysno = SYS_GETFSSTAT_FREEBSD12 172 } 173 r0, _, e1 := Syscall(sysno, uintptr(_p0), bufsize, uintptr(flags)) 174 n = int(r0) 175 if e1 != 0 { 176 err = e1 177 } 178 if e1 == 0 && needsConvert { 179 for i := range oldBuf { 180 buf[i].convertFrom(&oldBuf[i]) 181 } 182 } 183 return 184} 185 186func setattrlistTimes(path string, times []Timespec, flags int) error { 187 // used on Darwin for UtimesNano 188 return ENOSYS 189} 190 191//sys ioctl(fd int, req uint, arg uintptr) (err error) 192 193//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL 194 195func Uname(uname *Utsname) error { 196 mib := []_C_int{CTL_KERN, KERN_OSTYPE} 197 n := unsafe.Sizeof(uname.Sysname) 198 if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil { 199 return err 200 } 201 202 mib = []_C_int{CTL_KERN, KERN_HOSTNAME} 203 n = unsafe.Sizeof(uname.Nodename) 204 if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil { 205 return err 206 } 207 208 mib = []_C_int{CTL_KERN, KERN_OSRELEASE} 209 n = unsafe.Sizeof(uname.Release) 210 if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil { 211 return err 212 } 213 214 mib = []_C_int{CTL_KERN, KERN_VERSION} 215 n = unsafe.Sizeof(uname.Version) 216 if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil { 217 return err 218 } 219 220 // The version might have newlines or tabs in it, convert them to 221 // spaces. 222 for i, b := range uname.Version { 223 if b == '\n' || b == '\t' { 224 if i == len(uname.Version)-1 { 225 uname.Version[i] = 0 226 } else { 227 uname.Version[i] = ' ' 228 } 229 } 230 } 231 232 mib = []_C_int{CTL_HW, HW_MACHINE} 233 n = unsafe.Sizeof(uname.Machine) 234 if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil { 235 return err 236 } 237 238 return nil 239} 240 241func Stat(path string, st *Stat_t) (err error) { 242 var oldStat stat_freebsd11_t 243 if supportsABI(_ino64First) { 244 return fstatat_freebsd12(AT_FDCWD, path, st, 0) 245 } 246 err = stat(path, &oldStat) 247 if err != nil { 248 return err 249 } 250 251 st.convertFrom(&oldStat) 252 return nil 253} 254 255func Lstat(path string, st *Stat_t) (err error) { 256 var oldStat stat_freebsd11_t 257 if supportsABI(_ino64First) { 258 return fstatat_freebsd12(AT_FDCWD, path, st, AT_SYMLINK_NOFOLLOW) 259 } 260 err = lstat(path, &oldStat) 261 if err != nil { 262 return err 263 } 264 265 st.convertFrom(&oldStat) 266 return nil 267} 268 269func Fstat(fd int, st *Stat_t) (err error) { 270 var oldStat stat_freebsd11_t 271 if supportsABI(_ino64First) { 272 return fstat_freebsd12(fd, st) 273 } 274 err = fstat(fd, &oldStat) 275 if err != nil { 276 return err 277 } 278 279 st.convertFrom(&oldStat) 280 return nil 281} 282 283func Fstatat(fd int, path string, st *Stat_t, flags int) (err error) { 284 var oldStat stat_freebsd11_t 285 if supportsABI(_ino64First) { 286 return fstatat_freebsd12(fd, path, st, flags) 287 } 288 err = fstatat(fd, path, &oldStat, flags) 289 if err != nil { 290 return err 291 } 292 293 st.convertFrom(&oldStat) 294 return nil 295} 296 297func Statfs(path string, st *Statfs_t) (err error) { 298 var oldStatfs statfs_freebsd11_t 299 if supportsABI(_ino64First) { 300 return statfs_freebsd12(path, st) 301 } 302 err = statfs(path, &oldStatfs) 303 if err != nil { 304 return err 305 } 306 307 st.convertFrom(&oldStatfs) 308 return nil 309} 310 311func Fstatfs(fd int, st *Statfs_t) (err error) { 312 var oldStatfs statfs_freebsd11_t 313 if supportsABI(_ino64First) { 314 return fstatfs_freebsd12(fd, st) 315 } 316 err = fstatfs(fd, &oldStatfs) 317 if err != nil { 318 return err 319 } 320 321 st.convertFrom(&oldStatfs) 322 return nil 323} 324 325func Getdents(fd int, buf []byte) (n int, err error) { 326 return Getdirentries(fd, buf, nil) 327} 328 329func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { 330 if supportsABI(_ino64First) { 331 if basep == nil || unsafe.Sizeof(*basep) == 8 { 332 return getdirentries_freebsd12(fd, buf, (*uint64)(unsafe.Pointer(basep))) 333 } 334 // The freebsd12 syscall needs a 64-bit base. On 32-bit machines 335 // we can't just use the basep passed in. See #32498. 336 var base uint64 = uint64(*basep) 337 n, err = getdirentries_freebsd12(fd, buf, &base) 338 *basep = uintptr(base) 339 if base>>32 != 0 { 340 // We can't stuff the base back into a uintptr, so any 341 // future calls would be suspect. Generate an error. 342 // EIO is allowed by getdirentries. 343 err = EIO 344 } 345 return 346 } 347 348 // The old syscall entries are smaller than the new. Use 1/4 of the original 349 // buffer size rounded up to DIRBLKSIZ (see /usr/src/lib/libc/sys/getdirentries.c). 350 oldBufLen := roundup(len(buf)/4, _dirblksiz) 351 oldBuf := make([]byte, oldBufLen) 352 n, err = getdirentries(fd, oldBuf, basep) 353 if err == nil && n > 0 { 354 n = convertFromDirents11(buf, oldBuf[:n]) 355 } 356 return 357} 358 359func Mknod(path string, mode uint32, dev uint64) (err error) { 360 var oldDev int 361 if supportsABI(_ino64First) { 362 return mknodat_freebsd12(AT_FDCWD, path, mode, dev) 363 } 364 oldDev = int(dev) 365 return mknod(path, mode, oldDev) 366} 367 368func Mknodat(fd int, path string, mode uint32, dev uint64) (err error) { 369 var oldDev int 370 if supportsABI(_ino64First) { 371 return mknodat_freebsd12(fd, path, mode, dev) 372 } 373 oldDev = int(dev) 374 return mknodat(fd, path, mode, oldDev) 375} 376 377// round x to the nearest multiple of y, larger or equal to x. 378// 379// from /usr/include/sys/param.h Macros for counting and rounding. 380// #define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) 381func roundup(x, y int) int { 382 return ((x + y - 1) / y) * y 383} 384 385func (s *Stat_t) convertFrom(old *stat_freebsd11_t) { 386 *s = Stat_t{ 387 Dev: uint64(old.Dev), 388 Ino: uint64(old.Ino), 389 Nlink: uint64(old.Nlink), 390 Mode: old.Mode, 391 Uid: old.Uid, 392 Gid: old.Gid, 393 Rdev: uint64(old.Rdev), 394 Atim: old.Atim, 395 Mtim: old.Mtim, 396 Ctim: old.Ctim, 397 Btim: old.Btim, 398 Size: old.Size, 399 Blocks: old.Blocks, 400 Blksize: old.Blksize, 401 Flags: old.Flags, 402 Gen: uint64(old.Gen), 403 } 404} 405 406func (s *Statfs_t) convertFrom(old *statfs_freebsd11_t) { 407 *s = Statfs_t{ 408 Version: _statfsVersion, 409 Type: old.Type, 410 Flags: old.Flags, 411 Bsize: old.Bsize, 412 Iosize: old.Iosize, 413 Blocks: old.Blocks, 414 Bfree: old.Bfree, 415 Bavail: old.Bavail, 416 Files: old.Files, 417 Ffree: old.Ffree, 418 Syncwrites: old.Syncwrites, 419 Asyncwrites: old.Asyncwrites, 420 Syncreads: old.Syncreads, 421 Asyncreads: old.Asyncreads, 422 // Spare 423 Namemax: old.Namemax, 424 Owner: old.Owner, 425 Fsid: old.Fsid, 426 // Charspare 427 // Fstypename 428 // Mntfromname 429 // Mntonname 430 } 431 432 sl := old.Fstypename[:] 433 n := clen(*(*[]byte)(unsafe.Pointer(&sl))) 434 copy(s.Fstypename[:], old.Fstypename[:n]) 435 436 sl = old.Mntfromname[:] 437 n = clen(*(*[]byte)(unsafe.Pointer(&sl))) 438 copy(s.Mntfromname[:], old.Mntfromname[:n]) 439 440 sl = old.Mntonname[:] 441 n = clen(*(*[]byte)(unsafe.Pointer(&sl))) 442 copy(s.Mntonname[:], old.Mntonname[:n]) 443} 444 445func convertFromDirents11(buf []byte, old []byte) int { 446 const ( 447 fixedSize = int(unsafe.Offsetof(Dirent{}.Name)) 448 oldFixedSize = int(unsafe.Offsetof(dirent_freebsd11{}.Name)) 449 ) 450 451 dstPos := 0 452 srcPos := 0 453 for dstPos+fixedSize < len(buf) && srcPos+oldFixedSize < len(old) { 454 var dstDirent Dirent 455 var srcDirent dirent_freebsd11 456 457 // If multiple direntries are written, sometimes when we reach the final one, 458 // we may have cap of old less than size of dirent_freebsd11. 459 copy((*[unsafe.Sizeof(srcDirent)]byte)(unsafe.Pointer(&srcDirent))[:], old[srcPos:]) 460 461 reclen := roundup(fixedSize+int(srcDirent.Namlen)+1, 8) 462 if dstPos+reclen > len(buf) { 463 break 464 } 465 466 dstDirent.Fileno = uint64(srcDirent.Fileno) 467 dstDirent.Off = 0 468 dstDirent.Reclen = uint16(reclen) 469 dstDirent.Type = srcDirent.Type 470 dstDirent.Pad0 = 0 471 dstDirent.Namlen = uint16(srcDirent.Namlen) 472 dstDirent.Pad1 = 0 473 474 copy(dstDirent.Name[:], srcDirent.Name[:srcDirent.Namlen]) 475 copy(buf[dstPos:], (*[unsafe.Sizeof(dstDirent)]byte)(unsafe.Pointer(&dstDirent))[:]) 476 padding := buf[dstPos+fixedSize+int(dstDirent.Namlen) : dstPos+reclen] 477 for i := range padding { 478 padding[i] = 0 479 } 480 481 dstPos += int(dstDirent.Reclen) 482 srcPos += int(srcDirent.Reclen) 483 } 484 485 return dstPos 486} 487 488func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { 489 if raceenabled { 490 raceReleaseMerge(unsafe.Pointer(&ioSync)) 491 } 492 return sendfile(outfd, infd, offset, count) 493} 494 495//sys ptrace(request int, pid int, addr uintptr, data int) (err error) 496 497func PtraceAttach(pid int) (err error) { 498 return ptrace(PTRACE_ATTACH, pid, 0, 0) 499} 500 501func PtraceCont(pid int, signal int) (err error) { 502 return ptrace(PTRACE_CONT, pid, 1, signal) 503} 504 505func PtraceDetach(pid int) (err error) { 506 return ptrace(PTRACE_DETACH, pid, 1, 0) 507} 508 509func PtraceGetFpRegs(pid int, fpregsout *FpReg) (err error) { 510 return ptrace(PTRACE_GETFPREGS, pid, uintptr(unsafe.Pointer(fpregsout)), 0) 511} 512 513func PtraceGetRegs(pid int, regsout *Reg) (err error) { 514 return ptrace(PTRACE_GETREGS, pid, uintptr(unsafe.Pointer(regsout)), 0) 515} 516 517func PtraceLwpEvents(pid int, enable int) (err error) { 518 return ptrace(PTRACE_LWPEVENTS, pid, 0, enable) 519} 520 521func PtraceLwpInfo(pid int, info uintptr) (err error) { 522 return ptrace(PTRACE_LWPINFO, pid, info, int(unsafe.Sizeof(PtraceLwpInfoStruct{}))) 523} 524 525func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) { 526 return PtraceIO(PIOD_READ_D, pid, addr, out, SizeofLong) 527} 528 529func PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) { 530 return PtraceIO(PIOD_READ_I, pid, addr, out, SizeofLong) 531} 532 533func PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) { 534 return PtraceIO(PIOD_WRITE_D, pid, addr, data, SizeofLong) 535} 536 537func PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) { 538 return PtraceIO(PIOD_WRITE_I, pid, addr, data, SizeofLong) 539} 540 541func PtraceSetRegs(pid int, regs *Reg) (err error) { 542 return ptrace(PTRACE_SETREGS, pid, uintptr(unsafe.Pointer(regs)), 0) 543} 544 545func PtraceSingleStep(pid int) (err error) { 546 return ptrace(PTRACE_SINGLESTEP, pid, 1, 0) 547} 548 549/* 550 * Exposed directly 551 */ 552//sys Access(path string, mode uint32) (err error) 553//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) 554//sys CapEnter() (err error) 555//sys capRightsGet(version int, fd int, rightsp *CapRights) (err error) = SYS___CAP_RIGHTS_GET 556//sys capRightsLimit(fd int, rightsp *CapRights) (err error) 557//sys Chdir(path string) (err error) 558//sys Chflags(path string, flags int) (err error) 559//sys Chmod(path string, mode uint32) (err error) 560//sys Chown(path string, uid int, gid int) (err error) 561//sys Chroot(path string) (err error) 562//sys Close(fd int) (err error) 563//sys Dup(fd int) (nfd int, err error) 564//sys Dup2(from int, to int) (err error) 565//sys Exit(code int) 566//sys ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) 567//sys ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) 568//sys ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) 569//sys ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) 570//sys ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) 571//sys ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) 572//sys ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) 573//sys ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) 574//sys ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) 575//sys ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) 576//sys ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) 577//sys ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) 578//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE 579//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) 580//sys Fchdir(fd int) (err error) 581//sys Fchflags(fd int, flags int) (err error) 582//sys Fchmod(fd int, mode uint32) (err error) 583//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) 584//sys Fchown(fd int, uid int, gid int) (err error) 585//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) 586//sys Flock(fd int, how int) (err error) 587//sys Fpathconf(fd int, name int) (val int, err error) 588//sys fstat(fd int, stat *stat_freebsd11_t) (err error) 589//sys fstat_freebsd12(fd int, stat *Stat_t) (err error) 590//sys fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) 591//sys fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) 592//sys fstatfs(fd int, stat *statfs_freebsd11_t) (err error) 593//sys fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) 594//sys Fsync(fd int) (err error) 595//sys Ftruncate(fd int, length int64) (err error) 596//sys getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) 597//sys getdirentries_freebsd12(fd int, buf []byte, basep *uint64) (n int, err error) 598//sys Getdtablesize() (size int) 599//sysnb Getegid() (egid int) 600//sysnb Geteuid() (uid int) 601//sysnb Getgid() (gid int) 602//sysnb Getpgid(pid int) (pgid int, err error) 603//sysnb Getpgrp() (pgrp int) 604//sysnb Getpid() (pid int) 605//sysnb Getppid() (ppid int) 606//sys Getpriority(which int, who int) (prio int, err error) 607//sysnb Getrlimit(which int, lim *Rlimit) (err error) 608//sysnb Getrusage(who int, rusage *Rusage) (err error) 609//sysnb Getsid(pid int) (sid int, err error) 610//sysnb Gettimeofday(tv *Timeval) (err error) 611//sysnb Getuid() (uid int) 612//sys Issetugid() (tainted bool) 613//sys Kill(pid int, signum syscall.Signal) (err error) 614//sys Kqueue() (fd int, err error) 615//sys Lchown(path string, uid int, gid int) (err error) 616//sys Link(path string, link string) (err error) 617//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) 618//sys Listen(s int, backlog int) (err error) 619//sys lstat(path string, stat *stat_freebsd11_t) (err error) 620//sys Mkdir(path string, mode uint32) (err error) 621//sys Mkdirat(dirfd int, path string, mode uint32) (err error) 622//sys Mkfifo(path string, mode uint32) (err error) 623//sys mknod(path string, mode uint32, dev int) (err error) 624//sys mknodat(fd int, path string, mode uint32, dev int) (err error) 625//sys mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) 626//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) 627//sys Open(path string, mode int, perm uint32) (fd int, err error) 628//sys Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) 629//sys Pathconf(path string, name int) (val int, err error) 630//sys Pread(fd int, p []byte, offset int64) (n int, err error) 631//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) 632//sys read(fd int, p []byte) (n int, err error) 633//sys Readlink(path string, buf []byte) (n int, err error) 634//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) 635//sys Rename(from string, to string) (err error) 636//sys Renameat(fromfd int, from string, tofd int, to string) (err error) 637//sys Revoke(path string) (err error) 638//sys Rmdir(path string) (err error) 639//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK 640//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) 641//sysnb Setegid(egid int) (err error) 642//sysnb Seteuid(euid int) (err error) 643//sysnb Setgid(gid int) (err error) 644//sys Setlogin(name string) (err error) 645//sysnb Setpgid(pid int, pgid int) (err error) 646//sys Setpriority(which int, who int, prio int) (err error) 647//sysnb Setregid(rgid int, egid int) (err error) 648//sysnb Setreuid(ruid int, euid int) (err error) 649//sysnb Setresgid(rgid int, egid int, sgid int) (err error) 650//sysnb Setresuid(ruid int, euid int, suid int) (err error) 651//sysnb Setrlimit(which int, lim *Rlimit) (err error) 652//sysnb Setsid() (pid int, err error) 653//sysnb Settimeofday(tp *Timeval) (err error) 654//sysnb Setuid(uid int) (err error) 655//sys stat(path string, stat *stat_freebsd11_t) (err error) 656//sys statfs(path string, stat *statfs_freebsd11_t) (err error) 657//sys statfs_freebsd12(path string, stat *Statfs_t) (err error) 658//sys Symlink(path string, link string) (err error) 659//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) 660//sys Sync() (err error) 661//sys Truncate(path string, length int64) (err error) 662//sys Umask(newmask int) (oldmask int) 663//sys Undelete(path string) (err error) 664//sys Unlink(path string) (err error) 665//sys Unlinkat(dirfd int, path string, flags int) (err error) 666//sys Unmount(path string, flags int) (err error) 667//sys write(fd int, p []byte) (n int, err error) 668//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) 669//sys munmap(addr uintptr, length uintptr) (err error) 670//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ 671//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE 672//sys accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) 673//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) 674 675/* 676 * Unimplemented 677 */ 678// Profil 679// Sigaction 680// Sigprocmask 681// Getlogin 682// Sigpending 683// Sigaltstack 684// Ioctl 685// Reboot 686// Execve 687// Vfork 688// Sbrk 689// Sstk 690// Ovadvise 691// Mincore 692// Setitimer 693// Swapon 694// Select 695// Sigsuspend 696// Readv 697// Writev 698// Nfssvc 699// Getfh 700// Quotactl 701// Mount 702// Csops 703// Waitid 704// Add_profil 705// Kdebug_trace 706// Sigreturn 707// Atsocket 708// Kqueue_from_portset_np 709// Kqueue_portset 710// Getattrlist 711// Setattrlist 712// Getdents 713// Getdirentriesattr 714// Searchfs 715// Delete 716// Copyfile 717// Watchevent 718// Waitevent 719// Modwatch 720// Fsctl 721// Initgroups 722// Posix_spawn 723// Nfsclnt 724// Fhopen 725// Minherit 726// Semsys 727// Msgsys 728// Shmsys 729// Semctl 730// Semget 731// Semop 732// Msgctl 733// Msgget 734// Msgsnd 735// Msgrcv 736// Shmat 737// Shmctl 738// Shmdt 739// Shmget 740// Shm_open 741// Shm_unlink 742// Sem_open 743// Sem_close 744// Sem_unlink 745// Sem_wait 746// Sem_trywait 747// Sem_post 748// Sem_getvalue 749// Sem_init 750// Sem_destroy 751// Open_extended 752// Umask_extended 753// Stat_extended 754// Lstat_extended 755// Fstat_extended 756// Chmod_extended 757// Fchmod_extended 758// Access_extended 759// Settid 760// Gettid 761// Setsgroups 762// Getsgroups 763// Setwgroups 764// Getwgroups 765// Mkfifo_extended 766// Mkdir_extended 767// Identitysvc 768// Shared_region_check_np 769// Shared_region_map_np 770// __pthread_mutex_destroy 771// __pthread_mutex_init 772// __pthread_mutex_lock 773// __pthread_mutex_trylock 774// __pthread_mutex_unlock 775// __pthread_cond_init 776// __pthread_cond_destroy 777// __pthread_cond_broadcast 778// __pthread_cond_signal 779// Setsid_with_pid 780// __pthread_cond_timedwait 781// Aio_fsync 782// Aio_return 783// Aio_suspend 784// Aio_cancel 785// Aio_error 786// Aio_read 787// Aio_write 788// Lio_listio 789// __pthread_cond_wait 790// Iopolicysys 791// __pthread_kill 792// __pthread_sigmask 793// __sigwait 794// __disable_threadsignal 795// __pthread_markcancel 796// __pthread_canceled 797// __semwait_signal 798// Proc_info 799// Stat64_extended 800// Lstat64_extended 801// Fstat64_extended 802// __pthread_chdir 803// __pthread_fchdir 804// Audit 805// Auditon 806// Getauid 807// Setauid 808// Getaudit 809// Setaudit 810// Getaudit_addr 811// Setaudit_addr 812// Auditctl 813// Bsdthread_create 814// Bsdthread_terminate 815// Stack_snapshot 816// Bsdthread_register 817// Workq_open 818// Workq_ops 819// __mac_execve 820// __mac_syscall 821// __mac_get_file 822// __mac_set_file 823// __mac_get_link 824// __mac_set_link 825// __mac_get_proc 826// __mac_set_proc 827// __mac_get_fd 828// __mac_set_fd 829// __mac_get_pid 830// __mac_get_lcid 831// __mac_get_lctx 832// __mac_set_lctx 833// Setlcid 834// Read_nocancel 835// Write_nocancel 836// Open_nocancel 837// Close_nocancel 838// Wait4_nocancel 839// Recvmsg_nocancel 840// Sendmsg_nocancel 841// Recvfrom_nocancel 842// Accept_nocancel 843// Fcntl_nocancel 844// Select_nocancel 845// Fsync_nocancel 846// Connect_nocancel 847// Sigsuspend_nocancel 848// Readv_nocancel 849// Writev_nocancel 850// Sendto_nocancel 851// Pread_nocancel 852// Pwrite_nocancel 853// Waitid_nocancel 854// Poll_nocancel 855// Msgsnd_nocancel 856// Msgrcv_nocancel 857// Sem_wait_nocancel 858// Aio_suspend_nocancel 859// __sigwait_nocancel 860// __semwait_signal_nocancel 861// __mac_mount 862// __mac_get_mount 863// __mac_getfsstat 864