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