feat(telemetry): instrument inference duration and frame age
This commit is contained in:
		
							
								
								
									
										2
									
								
								vendor/golang.org/x/sys/unix/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/sys/unix/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
_obj/
 | 
			
		||||
unix.test
 | 
			
		||||
							
								
								
									
										184
									
								
								vendor/golang.org/x/sys/unix/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										184
									
								
								vendor/golang.org/x/sys/unix/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,184 @@
 | 
			
		||||
# Building `sys/unix`
 | 
			
		||||
 | 
			
		||||
The sys/unix package provides access to the raw system call interface of the
 | 
			
		||||
underlying operating system. See: https://godoc.org/golang.org/x/sys/unix
 | 
			
		||||
 | 
			
		||||
Porting Go to a new architecture/OS combination or adding syscalls, types, or
 | 
			
		||||
constants to an existing architecture/OS pair requires some manual effort;
 | 
			
		||||
however, there are tools that automate much of the process.
 | 
			
		||||
 | 
			
		||||
## Build Systems
 | 
			
		||||
 | 
			
		||||
There are currently two ways we generate the necessary files. We are currently
 | 
			
		||||
migrating the build system to use containers so the builds are reproducible.
 | 
			
		||||
This is being done on an OS-by-OS basis. Please update this documentation as
 | 
			
		||||
components of the build system change.
 | 
			
		||||
 | 
			
		||||
### Old Build System (currently for `GOOS != "linux"`)
 | 
			
		||||
 | 
			
		||||
The old build system generates the Go files based on the C header files
 | 
			
		||||
present on your system. This means that files
 | 
			
		||||
for a given GOOS/GOARCH pair must be generated on a system with that OS and
 | 
			
		||||
architecture. This also means that the generated code can differ from system
 | 
			
		||||
to system, based on differences in the header files.
 | 
			
		||||
 | 
			
		||||
To avoid this, if you are using the old build system, only generate the Go
 | 
			
		||||
files on an installation with unmodified header files. It is also important to
 | 
			
		||||
keep track of which version of the OS the files were generated from (ex.
 | 
			
		||||
Darwin 14 vs Darwin 15). This makes it easier to track the progress of changes
 | 
			
		||||
and have each OS upgrade correspond to a single change.
 | 
			
		||||
 | 
			
		||||
To build the files for your current OS and architecture, make sure GOOS and
 | 
			
		||||
GOARCH are set correctly and run `mkall.sh`. This will generate the files for
 | 
			
		||||
your specific system. Running `mkall.sh -n` shows the commands that will be run.
 | 
			
		||||
 | 
			
		||||
Requirements: bash, go
 | 
			
		||||
 | 
			
		||||
### New Build System (currently for `GOOS == "linux"`)
 | 
			
		||||
 | 
			
		||||
The new build system uses a Docker container to generate the go files directly
 | 
			
		||||
from source checkouts of the kernel and various system libraries. This means
 | 
			
		||||
that on any platform that supports Docker, all the files using the new build
 | 
			
		||||
system can be generated at once, and generated files will not change based on
 | 
			
		||||
what the person running the scripts has installed on their computer.
 | 
			
		||||
 | 
			
		||||
The OS specific files for the new build system are located in the `${GOOS}`
 | 
			
		||||
directory, and the build is coordinated by the `${GOOS}/mkall.go` program. When
 | 
			
		||||
the kernel or system library updates, modify the Dockerfile at
 | 
			
		||||
`${GOOS}/Dockerfile` to checkout the new release of the source.
 | 
			
		||||
 | 
			
		||||
To build all the files under the new build system, you must be on an amd64/Linux
 | 
			
		||||
system and have your GOOS and GOARCH set accordingly. Running `mkall.sh` will
 | 
			
		||||
then generate all of the files for all of the GOOS/GOARCH pairs in the new build
 | 
			
		||||
system. Running `mkall.sh -n` shows the commands that will be run.
 | 
			
		||||
 | 
			
		||||
Requirements: bash, go, docker
 | 
			
		||||
 | 
			
		||||
## Component files
 | 
			
		||||
 | 
			
		||||
This section describes the various files used in the code generation process.
 | 
			
		||||
It also contains instructions on how to modify these files to add a new
 | 
			
		||||
architecture/OS or to add additional syscalls, types, or constants. Note that
 | 
			
		||||
if you are using the new build system, the scripts/programs cannot be called normally.
 | 
			
		||||
They must be called from within the docker container.
 | 
			
		||||
 | 
			
		||||
### asm files
 | 
			
		||||
 | 
			
		||||
The hand-written assembly file at `asm_${GOOS}_${GOARCH}.s` implements system
 | 
			
		||||
call dispatch. There are three entry points:
 | 
			
		||||
```
 | 
			
		||||
  func Syscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr)
 | 
			
		||||
  func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)
 | 
			
		||||
  func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr)
 | 
			
		||||
```
 | 
			
		||||
The first and second are the standard ones; they differ only in how many
 | 
			
		||||
arguments can be passed to the kernel. The third is for low-level use by the
 | 
			
		||||
ForkExec wrapper. Unlike the first two, it does not call into the scheduler to
 | 
			
		||||
let it know that a system call is running.
 | 
			
		||||
 | 
			
		||||
When porting Go to an new architecture/OS, this file must be implemented for
 | 
			
		||||
each GOOS/GOARCH pair.
 | 
			
		||||
 | 
			
		||||
### mksysnum
 | 
			
		||||
 | 
			
		||||
Mksysnum is a Go program located at `${GOOS}/mksysnum.go` (or `mksysnum_${GOOS}.go`
 | 
			
		||||
for the old system). This program takes in a list of header files containing the
 | 
			
		||||
syscall number declarations and parses them to produce the corresponding list of
 | 
			
		||||
Go numeric constants. See `zsysnum_${GOOS}_${GOARCH}.go` for the generated
 | 
			
		||||
constants.
 | 
			
		||||
 | 
			
		||||
Adding new syscall numbers is mostly done by running the build on a sufficiently
 | 
			
		||||
new installation of the target OS (or updating the source checkouts for the
 | 
			
		||||
new build system). However, depending on the OS, you may need to update the
 | 
			
		||||
parsing in mksysnum.
 | 
			
		||||
 | 
			
		||||
### mksyscall.go
 | 
			
		||||
 | 
			
		||||
The `syscall.go`, `syscall_${GOOS}.go`, `syscall_${GOOS}_${GOARCH}.go` are
 | 
			
		||||
hand-written Go files which implement system calls (for unix, the specific OS,
 | 
			
		||||
or the specific OS/Architecture pair respectively) that need special handling
 | 
			
		||||
and list `//sys` comments giving prototypes for ones that can be generated.
 | 
			
		||||
 | 
			
		||||
The mksyscall.go program takes the `//sys` and `//sysnb` comments and converts
 | 
			
		||||
them into syscalls. This requires the name of the prototype in the comment to
 | 
			
		||||
match a syscall number in the `zsysnum_${GOOS}_${GOARCH}.go` file. The function
 | 
			
		||||
prototype can be exported (capitalized) or not.
 | 
			
		||||
 | 
			
		||||
Adding a new syscall often just requires adding a new `//sys` function prototype
 | 
			
		||||
with the desired arguments and a capitalized name so it is exported. However, if
 | 
			
		||||
you want the interface to the syscall to be different, often one will make an
 | 
			
		||||
unexported `//sys` prototype, an then write a custom wrapper in
 | 
			
		||||
`syscall_${GOOS}.go`.
 | 
			
		||||
 | 
			
		||||
### types files
 | 
			
		||||
 | 
			
		||||
For each OS, there is a hand-written Go file at `${GOOS}/types.go` (or
 | 
			
		||||
`types_${GOOS}.go` on the old system). This file includes standard C headers and
 | 
			
		||||
creates Go type aliases to the corresponding C types. The file is then fed
 | 
			
		||||
through godef to get the Go compatible definitions. Finally, the generated code
 | 
			
		||||
is fed though mkpost.go to format the code correctly and remove any hidden or
 | 
			
		||||
private identifiers. This cleaned-up code is written to
 | 
			
		||||
`ztypes_${GOOS}_${GOARCH}.go`.
 | 
			
		||||
 | 
			
		||||
The hardest part about preparing this file is figuring out which headers to
 | 
			
		||||
include and which symbols need to be `#define`d to get the actual data
 | 
			
		||||
structures that pass through to the kernel system calls. Some C libraries
 | 
			
		||||
preset alternate versions for binary compatibility and translate them on the
 | 
			
		||||
way in and out of system calls, but there is almost always a `#define` that can
 | 
			
		||||
get the real ones.
 | 
			
		||||
See `types_darwin.go` and `linux/types.go` for examples.
 | 
			
		||||
 | 
			
		||||
To add a new type, add in the necessary include statement at the top of the
 | 
			
		||||
file (if it is not already there) and add in a type alias line. Note that if
 | 
			
		||||
your type is significantly different on different architectures, you may need
 | 
			
		||||
some `#if/#elif` macros in your include statements.
 | 
			
		||||
 | 
			
		||||
### mkerrors.sh
 | 
			
		||||
 | 
			
		||||
This script is used to generate the system's various constants. This doesn't
 | 
			
		||||
just include the error numbers and error strings, but also the signal numbers
 | 
			
		||||
an a wide variety of miscellaneous constants. The constants come from the list
 | 
			
		||||
of include files in the `includes_${uname}` variable. A regex then picks out
 | 
			
		||||
the desired `#define` statements, and generates the corresponding Go constants.
 | 
			
		||||
The error numbers and strings are generated from `#include <errno.h>`, and the
 | 
			
		||||
signal numbers and strings are generated from `#include <signal.h>`. All of
 | 
			
		||||
these constants are written to `zerrors_${GOOS}_${GOARCH}.go` via a C program,
 | 
			
		||||
`_errors.c`, which prints out all the constants.
 | 
			
		||||
 | 
			
		||||
To add a constant, add the header that includes it to the appropriate variable.
 | 
			
		||||
Then, edit the regex (if necessary) to match the desired constant. Avoid making
 | 
			
		||||
the regex too broad to avoid matching unintended constants.
 | 
			
		||||
 | 
			
		||||
### mkmerge.go
 | 
			
		||||
 | 
			
		||||
This program is used to extract duplicate const, func, and type declarations
 | 
			
		||||
from the generated architecture-specific files listed below, and merge these
 | 
			
		||||
into a common file for each OS.
 | 
			
		||||
 | 
			
		||||
The merge is performed in the following steps:
 | 
			
		||||
1. Construct the set of common code that is idential in all architecture-specific files.
 | 
			
		||||
2. Write this common code to the merged file.
 | 
			
		||||
3. Remove the common code from all architecture-specific files.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Generated files
 | 
			
		||||
 | 
			
		||||
### `zerrors_${GOOS}_${GOARCH}.go`
 | 
			
		||||
 | 
			
		||||
A file containing all of the system's generated error numbers, error strings,
 | 
			
		||||
signal numbers, and constants. Generated by `mkerrors.sh` (see above).
 | 
			
		||||
 | 
			
		||||
### `zsyscall_${GOOS}_${GOARCH}.go`
 | 
			
		||||
 | 
			
		||||
A file containing all the generated syscalls for a specific GOOS and GOARCH.
 | 
			
		||||
Generated by `mksyscall.go` (see above).
 | 
			
		||||
 | 
			
		||||
### `zsysnum_${GOOS}_${GOARCH}.go`
 | 
			
		||||
 | 
			
		||||
A list of numeric constants for all the syscall number of the specific GOOS
 | 
			
		||||
and GOARCH. Generated by mksysnum (see above).
 | 
			
		||||
 | 
			
		||||
### `ztypes_${GOOS}_${GOARCH}.go`
 | 
			
		||||
 | 
			
		||||
A file containing Go types for passing into (or returning from) syscalls.
 | 
			
		||||
Generated by godefs and the types file (see above).
 | 
			
		||||
							
								
								
									
										86
									
								
								vendor/golang.org/x/sys/unix/affinity_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								vendor/golang.org/x/sys/unix/affinity_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,86 @@
 | 
			
		||||
// Copyright 2018 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
// CPU affinity functions
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"math/bits"
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const cpuSetSize = _CPU_SETSIZE / _NCPUBITS
 | 
			
		||||
 | 
			
		||||
// CPUSet represents a CPU affinity mask.
 | 
			
		||||
type CPUSet [cpuSetSize]cpuMask
 | 
			
		||||
 | 
			
		||||
func schedAffinity(trap uintptr, pid int, set *CPUSet) error {
 | 
			
		||||
	_, _, e := RawSyscall(trap, uintptr(pid), uintptr(unsafe.Sizeof(*set)), uintptr(unsafe.Pointer(set)))
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		return errnoErr(e)
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SchedGetaffinity gets the CPU affinity mask of the thread specified by pid.
 | 
			
		||||
// If pid is 0 the calling thread is used.
 | 
			
		||||
func SchedGetaffinity(pid int, set *CPUSet) error {
 | 
			
		||||
	return schedAffinity(SYS_SCHED_GETAFFINITY, pid, set)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SchedSetaffinity sets the CPU affinity mask of the thread specified by pid.
 | 
			
		||||
// If pid is 0 the calling thread is used.
 | 
			
		||||
func SchedSetaffinity(pid int, set *CPUSet) error {
 | 
			
		||||
	return schedAffinity(SYS_SCHED_SETAFFINITY, pid, set)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Zero clears the set s, so that it contains no CPUs.
 | 
			
		||||
func (s *CPUSet) Zero() {
 | 
			
		||||
	for i := range s {
 | 
			
		||||
		s[i] = 0
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func cpuBitsIndex(cpu int) int {
 | 
			
		||||
	return cpu / _NCPUBITS
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func cpuBitsMask(cpu int) cpuMask {
 | 
			
		||||
	return cpuMask(1 << (uint(cpu) % _NCPUBITS))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Set adds cpu to the set s.
 | 
			
		||||
func (s *CPUSet) Set(cpu int) {
 | 
			
		||||
	i := cpuBitsIndex(cpu)
 | 
			
		||||
	if i < len(s) {
 | 
			
		||||
		s[i] |= cpuBitsMask(cpu)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Clear removes cpu from the set s.
 | 
			
		||||
func (s *CPUSet) Clear(cpu int) {
 | 
			
		||||
	i := cpuBitsIndex(cpu)
 | 
			
		||||
	if i < len(s) {
 | 
			
		||||
		s[i] &^= cpuBitsMask(cpu)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsSet reports whether cpu is in the set s.
 | 
			
		||||
func (s *CPUSet) IsSet(cpu int) bool {
 | 
			
		||||
	i := cpuBitsIndex(cpu)
 | 
			
		||||
	if i < len(s) {
 | 
			
		||||
		return s[i]&cpuBitsMask(cpu) != 0
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Count returns the number of CPUs in the set s.
 | 
			
		||||
func (s *CPUSet) Count() int {
 | 
			
		||||
	c := 0
 | 
			
		||||
	for _, b := range s {
 | 
			
		||||
		c += bits.OnesCount64(uint64(b))
 | 
			
		||||
	}
 | 
			
		||||
	return c
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										15
									
								
								vendor/golang.org/x/sys/unix/aliases.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								vendor/golang.org/x/sys/unix/aliases.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
// Copyright 2018 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos) && go1.9
 | 
			
		||||
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos
 | 
			
		||||
// +build go1.9
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import "syscall"
 | 
			
		||||
 | 
			
		||||
type Signal = syscall.Signal
 | 
			
		||||
type Errno = syscall.Errno
 | 
			
		||||
type SysProcAttr = syscall.SysProcAttr
 | 
			
		||||
							
								
								
									
										18
									
								
								vendor/golang.org/x/sys/unix/asm_aix_ppc64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								vendor/golang.org/x/sys/unix/asm_aix_ppc64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
// Copyright 2018 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build gc
 | 
			
		||||
// +build gc
 | 
			
		||||
 | 
			
		||||
#include "textflag.h"
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// System calls for ppc64, AIX are implemented in runtime/syscall_aix.go
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
TEXT ·syscall6(SB),NOSPLIT,$0-88
 | 
			
		||||
	JMP	syscall·syscall6(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·rawSyscall6(SB),NOSPLIT,$0-88
 | 
			
		||||
	JMP	syscall·rawSyscall6(SB)
 | 
			
		||||
							
								
								
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_bsd_386.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_bsd_386.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
// Copyright 2021 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build (darwin || freebsd || netbsd || openbsd) && gc
 | 
			
		||||
// +build darwin freebsd netbsd openbsd
 | 
			
		||||
// +build gc
 | 
			
		||||
 | 
			
		||||
#include "textflag.h"
 | 
			
		||||
 | 
			
		||||
// System call support for 386 BSD
 | 
			
		||||
 | 
			
		||||
// Just jump to package syscall's implementation for all these functions.
 | 
			
		||||
// The runtime may know about them.
 | 
			
		||||
 | 
			
		||||
TEXT	·Syscall(SB),NOSPLIT,$0-28
 | 
			
		||||
	JMP	syscall·Syscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT	·Syscall6(SB),NOSPLIT,$0-40
 | 
			
		||||
	JMP	syscall·Syscall6(SB)
 | 
			
		||||
 | 
			
		||||
TEXT	·Syscall9(SB),NOSPLIT,$0-52
 | 
			
		||||
	JMP	syscall·Syscall9(SB)
 | 
			
		||||
 | 
			
		||||
TEXT	·RawSyscall(SB),NOSPLIT,$0-28
 | 
			
		||||
	JMP	syscall·RawSyscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT	·RawSyscall6(SB),NOSPLIT,$0-40
 | 
			
		||||
	JMP	syscall·RawSyscall6(SB)
 | 
			
		||||
							
								
								
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_bsd_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_bsd_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
// Copyright 2021 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build (darwin || dragonfly || freebsd || netbsd || openbsd) && gc
 | 
			
		||||
// +build darwin dragonfly freebsd netbsd openbsd
 | 
			
		||||
// +build gc
 | 
			
		||||
 | 
			
		||||
#include "textflag.h"
 | 
			
		||||
 | 
			
		||||
// System call support for AMD64 BSD
 | 
			
		||||
 | 
			
		||||
// Just jump to package syscall's implementation for all these functions.
 | 
			
		||||
// The runtime may know about them.
 | 
			
		||||
 | 
			
		||||
TEXT	·Syscall(SB),NOSPLIT,$0-56
 | 
			
		||||
	JMP	syscall·Syscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT	·Syscall6(SB),NOSPLIT,$0-80
 | 
			
		||||
	JMP	syscall·Syscall6(SB)
 | 
			
		||||
 | 
			
		||||
TEXT	·Syscall9(SB),NOSPLIT,$0-104
 | 
			
		||||
	JMP	syscall·Syscall9(SB)
 | 
			
		||||
 | 
			
		||||
TEXT	·RawSyscall(SB),NOSPLIT,$0-56
 | 
			
		||||
	JMP	syscall·RawSyscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT	·RawSyscall6(SB),NOSPLIT,$0-80
 | 
			
		||||
	JMP	syscall·RawSyscall6(SB)
 | 
			
		||||
							
								
								
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_bsd_arm.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_bsd_arm.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
// Copyright 2021 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build (darwin || freebsd || netbsd || openbsd) && gc
 | 
			
		||||
// +build darwin freebsd netbsd openbsd
 | 
			
		||||
// +build gc
 | 
			
		||||
 | 
			
		||||
#include "textflag.h"
 | 
			
		||||
 | 
			
		||||
// System call support for ARM BSD
 | 
			
		||||
 | 
			
		||||
// Just jump to package syscall's implementation for all these functions.
 | 
			
		||||
// The runtime may know about them.
 | 
			
		||||
 | 
			
		||||
TEXT	·Syscall(SB),NOSPLIT,$0-28
 | 
			
		||||
	B	syscall·Syscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT	·Syscall6(SB),NOSPLIT,$0-40
 | 
			
		||||
	B	syscall·Syscall6(SB)
 | 
			
		||||
 | 
			
		||||
TEXT	·Syscall9(SB),NOSPLIT,$0-52
 | 
			
		||||
	B	syscall·Syscall9(SB)
 | 
			
		||||
 | 
			
		||||
TEXT	·RawSyscall(SB),NOSPLIT,$0-28
 | 
			
		||||
	B	syscall·RawSyscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT	·RawSyscall6(SB),NOSPLIT,$0-40
 | 
			
		||||
	B	syscall·RawSyscall6(SB)
 | 
			
		||||
							
								
								
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_bsd_arm64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_bsd_arm64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
// Copyright 2021 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build (darwin || freebsd || netbsd || openbsd) && gc
 | 
			
		||||
// +build darwin freebsd netbsd openbsd
 | 
			
		||||
// +build gc
 | 
			
		||||
 | 
			
		||||
#include "textflag.h"
 | 
			
		||||
 | 
			
		||||
// System call support for ARM64 BSD
 | 
			
		||||
 | 
			
		||||
// Just jump to package syscall's implementation for all these functions.
 | 
			
		||||
// The runtime may know about them.
 | 
			
		||||
 | 
			
		||||
TEXT	·Syscall(SB),NOSPLIT,$0-56
 | 
			
		||||
	JMP	syscall·Syscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT	·Syscall6(SB),NOSPLIT,$0-80
 | 
			
		||||
	JMP	syscall·Syscall6(SB)
 | 
			
		||||
 | 
			
		||||
TEXT	·Syscall9(SB),NOSPLIT,$0-104
 | 
			
		||||
	JMP	syscall·Syscall9(SB)
 | 
			
		||||
 | 
			
		||||
TEXT	·RawSyscall(SB),NOSPLIT,$0-56
 | 
			
		||||
	JMP	syscall·RawSyscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT	·RawSyscall6(SB),NOSPLIT,$0-80
 | 
			
		||||
	JMP	syscall·RawSyscall6(SB)
 | 
			
		||||
							
								
								
									
										66
									
								
								vendor/golang.org/x/sys/unix/asm_linux_386.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								vendor/golang.org/x/sys/unix/asm_linux_386.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,66 @@
 | 
			
		||||
// Copyright 2009 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build gc
 | 
			
		||||
// +build gc
 | 
			
		||||
 | 
			
		||||
#include "textflag.h"
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// System calls for 386, Linux
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
// See ../runtime/sys_linux_386.s for the reason why we always use int 0x80
 | 
			
		||||
// instead of the glibc-specific "CALL 0x10(GS)".
 | 
			
		||||
#define INVOKE_SYSCALL	INT	$0x80
 | 
			
		||||
 | 
			
		||||
// Just jump to package syscall's implementation for all these functions.
 | 
			
		||||
// The runtime may know about them.
 | 
			
		||||
 | 
			
		||||
TEXT ·Syscall(SB),NOSPLIT,$0-28
 | 
			
		||||
	JMP	syscall·Syscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·Syscall6(SB),NOSPLIT,$0-40
 | 
			
		||||
	JMP	syscall·Syscall6(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·SyscallNoError(SB),NOSPLIT,$0-24
 | 
			
		||||
	CALL	runtime·entersyscall(SB)
 | 
			
		||||
	MOVL	trap+0(FP), AX  // syscall entry
 | 
			
		||||
	MOVL	a1+4(FP), BX
 | 
			
		||||
	MOVL	a2+8(FP), CX
 | 
			
		||||
	MOVL	a3+12(FP), DX
 | 
			
		||||
	MOVL	$0, SI
 | 
			
		||||
	MOVL	$0, DI
 | 
			
		||||
	INVOKE_SYSCALL
 | 
			
		||||
	MOVL	AX, r1+16(FP)
 | 
			
		||||
	MOVL	DX, r2+20(FP)
 | 
			
		||||
	CALL	runtime·exitsyscall(SB)
 | 
			
		||||
	RET
 | 
			
		||||
 | 
			
		||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-28
 | 
			
		||||
	JMP	syscall·RawSyscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
 | 
			
		||||
	JMP	syscall·RawSyscall6(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24
 | 
			
		||||
	MOVL	trap+0(FP), AX  // syscall entry
 | 
			
		||||
	MOVL	a1+4(FP), BX
 | 
			
		||||
	MOVL	a2+8(FP), CX
 | 
			
		||||
	MOVL	a3+12(FP), DX
 | 
			
		||||
	MOVL	$0, SI
 | 
			
		||||
	MOVL	$0, DI
 | 
			
		||||
	INVOKE_SYSCALL
 | 
			
		||||
	MOVL	AX, r1+16(FP)
 | 
			
		||||
	MOVL	DX, r2+20(FP)
 | 
			
		||||
	RET
 | 
			
		||||
 | 
			
		||||
TEXT ·socketcall(SB),NOSPLIT,$0-36
 | 
			
		||||
	JMP	syscall·socketcall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·rawsocketcall(SB),NOSPLIT,$0-36
 | 
			
		||||
	JMP	syscall·rawsocketcall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·seek(SB),NOSPLIT,$0-28
 | 
			
		||||
	JMP	syscall·seek(SB)
 | 
			
		||||
							
								
								
									
										58
									
								
								vendor/golang.org/x/sys/unix/asm_linux_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								vendor/golang.org/x/sys/unix/asm_linux_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
// Copyright 2009 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build gc
 | 
			
		||||
// +build gc
 | 
			
		||||
 | 
			
		||||
#include "textflag.h"
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// System calls for AMD64, Linux
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
// Just jump to package syscall's implementation for all these functions.
 | 
			
		||||
// The runtime may know about them.
 | 
			
		||||
 | 
			
		||||
TEXT ·Syscall(SB),NOSPLIT,$0-56
 | 
			
		||||
	JMP	syscall·Syscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·Syscall6(SB),NOSPLIT,$0-80
 | 
			
		||||
	JMP	syscall·Syscall6(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
 | 
			
		||||
	CALL	runtime·entersyscall(SB)
 | 
			
		||||
	MOVQ	a1+8(FP), DI
 | 
			
		||||
	MOVQ	a2+16(FP), SI
 | 
			
		||||
	MOVQ	a3+24(FP), DX
 | 
			
		||||
	MOVQ	$0, R10
 | 
			
		||||
	MOVQ	$0, R8
 | 
			
		||||
	MOVQ	$0, R9
 | 
			
		||||
	MOVQ	trap+0(FP), AX	// syscall entry
 | 
			
		||||
	SYSCALL
 | 
			
		||||
	MOVQ	AX, r1+32(FP)
 | 
			
		||||
	MOVQ	DX, r2+40(FP)
 | 
			
		||||
	CALL	runtime·exitsyscall(SB)
 | 
			
		||||
	RET
 | 
			
		||||
 | 
			
		||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
 | 
			
		||||
	JMP	syscall·RawSyscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
 | 
			
		||||
	JMP	syscall·RawSyscall6(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
 | 
			
		||||
	MOVQ	a1+8(FP), DI
 | 
			
		||||
	MOVQ	a2+16(FP), SI
 | 
			
		||||
	MOVQ	a3+24(FP), DX
 | 
			
		||||
	MOVQ	$0, R10
 | 
			
		||||
	MOVQ	$0, R8
 | 
			
		||||
	MOVQ	$0, R9
 | 
			
		||||
	MOVQ	trap+0(FP), AX	// syscall entry
 | 
			
		||||
	SYSCALL
 | 
			
		||||
	MOVQ	AX, r1+32(FP)
 | 
			
		||||
	MOVQ	DX, r2+40(FP)
 | 
			
		||||
	RET
 | 
			
		||||
 | 
			
		||||
TEXT ·gettimeofday(SB),NOSPLIT,$0-16
 | 
			
		||||
	JMP	syscall·gettimeofday(SB)
 | 
			
		||||
							
								
								
									
										57
									
								
								vendor/golang.org/x/sys/unix/asm_linux_arm.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								vendor/golang.org/x/sys/unix/asm_linux_arm.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
// Copyright 2009 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build gc
 | 
			
		||||
// +build gc
 | 
			
		||||
 | 
			
		||||
#include "textflag.h"
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// System calls for arm, Linux
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
// Just jump to package syscall's implementation for all these functions.
 | 
			
		||||
// The runtime may know about them.
 | 
			
		||||
 | 
			
		||||
TEXT ·Syscall(SB),NOSPLIT,$0-28
 | 
			
		||||
	B	syscall·Syscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·Syscall6(SB),NOSPLIT,$0-40
 | 
			
		||||
	B	syscall·Syscall6(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·SyscallNoError(SB),NOSPLIT,$0-24
 | 
			
		||||
	BL	runtime·entersyscall(SB)
 | 
			
		||||
	MOVW	trap+0(FP), R7
 | 
			
		||||
	MOVW	a1+4(FP), R0
 | 
			
		||||
	MOVW	a2+8(FP), R1
 | 
			
		||||
	MOVW	a3+12(FP), R2
 | 
			
		||||
	MOVW	$0, R3
 | 
			
		||||
	MOVW	$0, R4
 | 
			
		||||
	MOVW	$0, R5
 | 
			
		||||
	SWI	$0
 | 
			
		||||
	MOVW	R0, r1+16(FP)
 | 
			
		||||
	MOVW	$0, R0
 | 
			
		||||
	MOVW	R0, r2+20(FP)
 | 
			
		||||
	BL	runtime·exitsyscall(SB)
 | 
			
		||||
	RET
 | 
			
		||||
 | 
			
		||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-28
 | 
			
		||||
	B	syscall·RawSyscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
 | 
			
		||||
	B	syscall·RawSyscall6(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24
 | 
			
		||||
	MOVW	trap+0(FP), R7	// syscall entry
 | 
			
		||||
	MOVW	a1+4(FP), R0
 | 
			
		||||
	MOVW	a2+8(FP), R1
 | 
			
		||||
	MOVW	a3+12(FP), R2
 | 
			
		||||
	SWI	$0
 | 
			
		||||
	MOVW	R0, r1+16(FP)
 | 
			
		||||
	MOVW	$0, R0
 | 
			
		||||
	MOVW	R0, r2+20(FP)
 | 
			
		||||
	RET
 | 
			
		||||
 | 
			
		||||
TEXT ·seek(SB),NOSPLIT,$0-28
 | 
			
		||||
	B	syscall·seek(SB)
 | 
			
		||||
							
								
								
									
										53
									
								
								vendor/golang.org/x/sys/unix/asm_linux_arm64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								vendor/golang.org/x/sys/unix/asm_linux_arm64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,53 @@
 | 
			
		||||
// Copyright 2015 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build linux && arm64 && gc
 | 
			
		||||
// +build linux
 | 
			
		||||
// +build arm64
 | 
			
		||||
// +build gc
 | 
			
		||||
 | 
			
		||||
#include "textflag.h"
 | 
			
		||||
 | 
			
		||||
// Just jump to package syscall's implementation for all these functions.
 | 
			
		||||
// The runtime may know about them.
 | 
			
		||||
 | 
			
		||||
TEXT ·Syscall(SB),NOSPLIT,$0-56
 | 
			
		||||
	B	syscall·Syscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·Syscall6(SB),NOSPLIT,$0-80
 | 
			
		||||
	B	syscall·Syscall6(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
 | 
			
		||||
	BL	runtime·entersyscall(SB)
 | 
			
		||||
	MOVD	a1+8(FP), R0
 | 
			
		||||
	MOVD	a2+16(FP), R1
 | 
			
		||||
	MOVD	a3+24(FP), R2
 | 
			
		||||
	MOVD	$0, R3
 | 
			
		||||
	MOVD	$0, R4
 | 
			
		||||
	MOVD	$0, R5
 | 
			
		||||
	MOVD	trap+0(FP), R8	// syscall entry
 | 
			
		||||
	SVC
 | 
			
		||||
	MOVD	R0, r1+32(FP)	// r1
 | 
			
		||||
	MOVD	R1, r2+40(FP)	// r2
 | 
			
		||||
	BL	runtime·exitsyscall(SB)
 | 
			
		||||
	RET
 | 
			
		||||
 | 
			
		||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
 | 
			
		||||
	B	syscall·RawSyscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
 | 
			
		||||
	B	syscall·RawSyscall6(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
 | 
			
		||||
	MOVD	a1+8(FP), R0
 | 
			
		||||
	MOVD	a2+16(FP), R1
 | 
			
		||||
	MOVD	a3+24(FP), R2
 | 
			
		||||
	MOVD	$0, R3
 | 
			
		||||
	MOVD	$0, R4
 | 
			
		||||
	MOVD	$0, R5
 | 
			
		||||
	MOVD	trap+0(FP), R8	// syscall entry
 | 
			
		||||
	SVC
 | 
			
		||||
	MOVD	R0, r1+32(FP)
 | 
			
		||||
	MOVD	R1, r2+40(FP)
 | 
			
		||||
	RET
 | 
			
		||||
							
								
								
									
										57
									
								
								vendor/golang.org/x/sys/unix/asm_linux_mips64x.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								vendor/golang.org/x/sys/unix/asm_linux_mips64x.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
// Copyright 2015 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build linux && (mips64 || mips64le) && gc
 | 
			
		||||
// +build linux
 | 
			
		||||
// +build mips64 mips64le
 | 
			
		||||
// +build gc
 | 
			
		||||
 | 
			
		||||
#include "textflag.h"
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// System calls for mips64, Linux
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
// Just jump to package syscall's implementation for all these functions.
 | 
			
		||||
// The runtime may know about them.
 | 
			
		||||
 | 
			
		||||
TEXT ·Syscall(SB),NOSPLIT,$0-56
 | 
			
		||||
	JMP	syscall·Syscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·Syscall6(SB),NOSPLIT,$0-80
 | 
			
		||||
	JMP	syscall·Syscall6(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
 | 
			
		||||
	JAL	runtime·entersyscall(SB)
 | 
			
		||||
	MOVV	a1+8(FP), R4
 | 
			
		||||
	MOVV	a2+16(FP), R5
 | 
			
		||||
	MOVV	a3+24(FP), R6
 | 
			
		||||
	MOVV	R0, R7
 | 
			
		||||
	MOVV	R0, R8
 | 
			
		||||
	MOVV	R0, R9
 | 
			
		||||
	MOVV	trap+0(FP), R2	// syscall entry
 | 
			
		||||
	SYSCALL
 | 
			
		||||
	MOVV	R2, r1+32(FP)
 | 
			
		||||
	MOVV	R3, r2+40(FP)
 | 
			
		||||
	JAL	runtime·exitsyscall(SB)
 | 
			
		||||
	RET
 | 
			
		||||
 | 
			
		||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
 | 
			
		||||
	JMP	syscall·RawSyscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
 | 
			
		||||
	JMP	syscall·RawSyscall6(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
 | 
			
		||||
	MOVV	a1+8(FP), R4
 | 
			
		||||
	MOVV	a2+16(FP), R5
 | 
			
		||||
	MOVV	a3+24(FP), R6
 | 
			
		||||
	MOVV	R0, R7
 | 
			
		||||
	MOVV	R0, R8
 | 
			
		||||
	MOVV	R0, R9
 | 
			
		||||
	MOVV	trap+0(FP), R2	// syscall entry
 | 
			
		||||
	SYSCALL
 | 
			
		||||
	MOVV	R2, r1+32(FP)
 | 
			
		||||
	MOVV	R3, r2+40(FP)
 | 
			
		||||
	RET
 | 
			
		||||
							
								
								
									
										55
									
								
								vendor/golang.org/x/sys/unix/asm_linux_mipsx.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								vendor/golang.org/x/sys/unix/asm_linux_mipsx.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
// Copyright 2016 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build linux && (mips || mipsle) && gc
 | 
			
		||||
// +build linux
 | 
			
		||||
// +build mips mipsle
 | 
			
		||||
// +build gc
 | 
			
		||||
 | 
			
		||||
#include "textflag.h"
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// System calls for mips, Linux
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
// Just jump to package syscall's implementation for all these functions.
 | 
			
		||||
// The runtime may know about them.
 | 
			
		||||
 | 
			
		||||
TEXT ·Syscall(SB),NOSPLIT,$0-28
 | 
			
		||||
	JMP syscall·Syscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·Syscall6(SB),NOSPLIT,$0-40
 | 
			
		||||
	JMP syscall·Syscall6(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·Syscall9(SB),NOSPLIT,$0-52
 | 
			
		||||
	JMP syscall·Syscall9(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·SyscallNoError(SB),NOSPLIT,$0-24
 | 
			
		||||
	JAL	runtime·entersyscall(SB)
 | 
			
		||||
	MOVW	a1+4(FP), R4
 | 
			
		||||
	MOVW	a2+8(FP), R5
 | 
			
		||||
	MOVW	a3+12(FP), R6
 | 
			
		||||
	MOVW	R0, R7
 | 
			
		||||
	MOVW	trap+0(FP), R2	// syscall entry
 | 
			
		||||
	SYSCALL
 | 
			
		||||
	MOVW	R2, r1+16(FP)	// r1
 | 
			
		||||
	MOVW	R3, r2+20(FP)	// r2
 | 
			
		||||
	JAL	runtime·exitsyscall(SB)
 | 
			
		||||
	RET
 | 
			
		||||
 | 
			
		||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-28
 | 
			
		||||
	JMP syscall·RawSyscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
 | 
			
		||||
	JMP syscall·RawSyscall6(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24
 | 
			
		||||
	MOVW	a1+4(FP), R4
 | 
			
		||||
	MOVW	a2+8(FP), R5
 | 
			
		||||
	MOVW	a3+12(FP), R6
 | 
			
		||||
	MOVW	trap+0(FP), R2	// syscall entry
 | 
			
		||||
	SYSCALL
 | 
			
		||||
	MOVW	R2, r1+16(FP)
 | 
			
		||||
	MOVW	R3, r2+20(FP)
 | 
			
		||||
	RET
 | 
			
		||||
							
								
								
									
										45
									
								
								vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
// Copyright 2014 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build linux && (ppc64 || ppc64le) && gc
 | 
			
		||||
// +build linux
 | 
			
		||||
// +build ppc64 ppc64le
 | 
			
		||||
// +build gc
 | 
			
		||||
 | 
			
		||||
#include "textflag.h"
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// System calls for ppc64, Linux
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
// Just jump to package syscall's implementation for all these functions.
 | 
			
		||||
// The runtime may know about them.
 | 
			
		||||
 | 
			
		||||
TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
 | 
			
		||||
	BL	runtime·entersyscall(SB)
 | 
			
		||||
	MOVD	a1+8(FP), R3
 | 
			
		||||
	MOVD	a2+16(FP), R4
 | 
			
		||||
	MOVD	a3+24(FP), R5
 | 
			
		||||
	MOVD	R0, R6
 | 
			
		||||
	MOVD	R0, R7
 | 
			
		||||
	MOVD	R0, R8
 | 
			
		||||
	MOVD	trap+0(FP), R9	// syscall entry
 | 
			
		||||
	SYSCALL R9
 | 
			
		||||
	MOVD	R3, r1+32(FP)
 | 
			
		||||
	MOVD	R4, r2+40(FP)
 | 
			
		||||
	BL	runtime·exitsyscall(SB)
 | 
			
		||||
	RET
 | 
			
		||||
 | 
			
		||||
TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
 | 
			
		||||
	MOVD	a1+8(FP), R3
 | 
			
		||||
	MOVD	a2+16(FP), R4
 | 
			
		||||
	MOVD	a3+24(FP), R5
 | 
			
		||||
	MOVD	R0, R6
 | 
			
		||||
	MOVD	R0, R7
 | 
			
		||||
	MOVD	R0, R8
 | 
			
		||||
	MOVD	trap+0(FP), R9	// syscall entry
 | 
			
		||||
	SYSCALL R9
 | 
			
		||||
	MOVD	R3, r1+32(FP)
 | 
			
		||||
	MOVD	R4, r2+40(FP)
 | 
			
		||||
	RET
 | 
			
		||||
							
								
								
									
										49
									
								
								vendor/golang.org/x/sys/unix/asm_linux_riscv64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								vendor/golang.org/x/sys/unix/asm_linux_riscv64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
// Copyright 2019 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build riscv64 && gc
 | 
			
		||||
// +build riscv64
 | 
			
		||||
// +build gc
 | 
			
		||||
 | 
			
		||||
#include "textflag.h"
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// System calls for linux/riscv64.
 | 
			
		||||
//
 | 
			
		||||
// Where available, just jump to package syscall's implementation of
 | 
			
		||||
// these functions.
 | 
			
		||||
 | 
			
		||||
TEXT ·Syscall(SB),NOSPLIT,$0-56
 | 
			
		||||
	JMP	syscall·Syscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·Syscall6(SB),NOSPLIT,$0-80
 | 
			
		||||
	JMP	syscall·Syscall6(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
 | 
			
		||||
	CALL	runtime·entersyscall(SB)
 | 
			
		||||
	MOV	a1+8(FP), A0
 | 
			
		||||
	MOV	a2+16(FP), A1
 | 
			
		||||
	MOV	a3+24(FP), A2
 | 
			
		||||
	MOV	trap+0(FP), A7	// syscall entry
 | 
			
		||||
	ECALL
 | 
			
		||||
	MOV	A0, r1+32(FP)	// r1
 | 
			
		||||
	MOV	A1, r2+40(FP)	// r2
 | 
			
		||||
	CALL	runtime·exitsyscall(SB)
 | 
			
		||||
	RET
 | 
			
		||||
 | 
			
		||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
 | 
			
		||||
	JMP	syscall·RawSyscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
 | 
			
		||||
	JMP	syscall·RawSyscall6(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
 | 
			
		||||
	MOV	a1+8(FP), A0
 | 
			
		||||
	MOV	a2+16(FP), A1
 | 
			
		||||
	MOV	a3+24(FP), A2
 | 
			
		||||
	MOV	trap+0(FP), A7	// syscall entry
 | 
			
		||||
	ECALL
 | 
			
		||||
	MOV	A0, r1+32(FP)
 | 
			
		||||
	MOV	A1, r2+40(FP)
 | 
			
		||||
	RET
 | 
			
		||||
							
								
								
									
										57
									
								
								vendor/golang.org/x/sys/unix/asm_linux_s390x.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								vendor/golang.org/x/sys/unix/asm_linux_s390x.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
// Copyright 2016 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build linux && s390x && gc
 | 
			
		||||
// +build linux
 | 
			
		||||
// +build s390x
 | 
			
		||||
// +build gc
 | 
			
		||||
 | 
			
		||||
#include "textflag.h"
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// System calls for s390x, Linux
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
// Just jump to package syscall's implementation for all these functions.
 | 
			
		||||
// The runtime may know about them.
 | 
			
		||||
 | 
			
		||||
TEXT ·Syscall(SB),NOSPLIT,$0-56
 | 
			
		||||
	BR	syscall·Syscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·Syscall6(SB),NOSPLIT,$0-80
 | 
			
		||||
	BR	syscall·Syscall6(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
 | 
			
		||||
	BL	runtime·entersyscall(SB)
 | 
			
		||||
	MOVD	a1+8(FP), R2
 | 
			
		||||
	MOVD	a2+16(FP), R3
 | 
			
		||||
	MOVD	a3+24(FP), R4
 | 
			
		||||
	MOVD	$0, R5
 | 
			
		||||
	MOVD	$0, R6
 | 
			
		||||
	MOVD	$0, R7
 | 
			
		||||
	MOVD	trap+0(FP), R1	// syscall entry
 | 
			
		||||
	SYSCALL
 | 
			
		||||
	MOVD	R2, r1+32(FP)
 | 
			
		||||
	MOVD	R3, r2+40(FP)
 | 
			
		||||
	BL	runtime·exitsyscall(SB)
 | 
			
		||||
	RET
 | 
			
		||||
 | 
			
		||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
 | 
			
		||||
	BR	syscall·RawSyscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
 | 
			
		||||
	BR	syscall·RawSyscall6(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
 | 
			
		||||
	MOVD	a1+8(FP), R2
 | 
			
		||||
	MOVD	a2+16(FP), R3
 | 
			
		||||
	MOVD	a3+24(FP), R4
 | 
			
		||||
	MOVD	$0, R5
 | 
			
		||||
	MOVD	$0, R6
 | 
			
		||||
	MOVD	$0, R7
 | 
			
		||||
	MOVD	trap+0(FP), R1	// syscall entry
 | 
			
		||||
	SYSCALL
 | 
			
		||||
	MOVD	R2, r1+32(FP)
 | 
			
		||||
	MOVD	R3, r2+40(FP)
 | 
			
		||||
	RET
 | 
			
		||||
							
								
								
									
										30
									
								
								vendor/golang.org/x/sys/unix/asm_openbsd_mips64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								vendor/golang.org/x/sys/unix/asm_openbsd_mips64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
// Copyright 2019 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build gc
 | 
			
		||||
// +build gc
 | 
			
		||||
 | 
			
		||||
#include "textflag.h"
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// System call support for mips64, OpenBSD
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
// Just jump to package syscall's implementation for all these functions.
 | 
			
		||||
// The runtime may know about them.
 | 
			
		||||
 | 
			
		||||
TEXT	·Syscall(SB),NOSPLIT,$0-56
 | 
			
		||||
	JMP	syscall·Syscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT	·Syscall6(SB),NOSPLIT,$0-80
 | 
			
		||||
	JMP	syscall·Syscall6(SB)
 | 
			
		||||
 | 
			
		||||
TEXT	·Syscall9(SB),NOSPLIT,$0-104
 | 
			
		||||
	JMP	syscall·Syscall9(SB)
 | 
			
		||||
 | 
			
		||||
TEXT	·RawSyscall(SB),NOSPLIT,$0-56
 | 
			
		||||
	JMP	syscall·RawSyscall(SB)
 | 
			
		||||
 | 
			
		||||
TEXT	·RawSyscall6(SB),NOSPLIT,$0-80
 | 
			
		||||
	JMP	syscall·RawSyscall6(SB)
 | 
			
		||||
							
								
								
									
										18
									
								
								vendor/golang.org/x/sys/unix/asm_solaris_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								vendor/golang.org/x/sys/unix/asm_solaris_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
// Copyright 2014 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build gc
 | 
			
		||||
// +build gc
 | 
			
		||||
 | 
			
		||||
#include "textflag.h"
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// System calls for amd64, Solaris are implemented in runtime/syscall_solaris.go
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
TEXT ·sysvicall6(SB),NOSPLIT,$0-88
 | 
			
		||||
	JMP	syscall·sysvicall6(SB)
 | 
			
		||||
 | 
			
		||||
TEXT ·rawSysvicall6(SB),NOSPLIT,$0-88
 | 
			
		||||
	JMP	syscall·rawSysvicall6(SB)
 | 
			
		||||
							
								
								
									
										426
									
								
								vendor/golang.org/x/sys/unix/asm_zos_s390x.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										426
									
								
								vendor/golang.org/x/sys/unix/asm_zos_s390x.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,426 @@
 | 
			
		||||
// Copyright 2020 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build zos && s390x && gc
 | 
			
		||||
// +build zos
 | 
			
		||||
// +build s390x
 | 
			
		||||
// +build gc
 | 
			
		||||
 | 
			
		||||
#include "textflag.h"
 | 
			
		||||
 | 
			
		||||
#define PSALAA            1208(R0)
 | 
			
		||||
#define GTAB64(x)           80(x)
 | 
			
		||||
#define LCA64(x)            88(x)
 | 
			
		||||
#define CAA(x)               8(x)
 | 
			
		||||
#define EDCHPXV(x)        1016(x)       // in the CAA
 | 
			
		||||
#define SAVSTACK_ASYNC(x)  336(x)       // in the LCA
 | 
			
		||||
 | 
			
		||||
// SS_*, where x=SAVSTACK_ASYNC
 | 
			
		||||
#define SS_LE(x)             0(x)
 | 
			
		||||
#define SS_GO(x)             8(x)
 | 
			
		||||
#define SS_ERRNO(x)         16(x)
 | 
			
		||||
#define SS_ERRNOJR(x)       20(x)
 | 
			
		||||
 | 
			
		||||
#define LE_CALL BYTE $0x0D; BYTE $0x76; // BL R7, R6
 | 
			
		||||
 | 
			
		||||
TEXT ·clearErrno(SB),NOSPLIT,$0-0
 | 
			
		||||
	BL	addrerrno<>(SB)
 | 
			
		||||
	MOVD	$0, 0(R3)
 | 
			
		||||
	RET
 | 
			
		||||
 | 
			
		||||
// Returns the address of errno in R3.
 | 
			
		||||
TEXT addrerrno<>(SB),NOSPLIT|NOFRAME,$0-0
 | 
			
		||||
	// Get library control area (LCA).
 | 
			
		||||
	MOVW	PSALAA, R8
 | 
			
		||||
	MOVD	LCA64(R8), R8
 | 
			
		||||
 | 
			
		||||
	// Get __errno FuncDesc.
 | 
			
		||||
	MOVD	CAA(R8), R9
 | 
			
		||||
	MOVD	EDCHPXV(R9), R9
 | 
			
		||||
	ADD	$(0x156*16), R9
 | 
			
		||||
	LMG	0(R9), R5, R6
 | 
			
		||||
 | 
			
		||||
	// Switch to saved LE stack.
 | 
			
		||||
	MOVD	SAVSTACK_ASYNC(R8), R9
 | 
			
		||||
	MOVD	0(R9), R4
 | 
			
		||||
	MOVD	$0, 0(R9)
 | 
			
		||||
 | 
			
		||||
	// Call __errno function.
 | 
			
		||||
	LE_CALL
 | 
			
		||||
	NOPH
 | 
			
		||||
 | 
			
		||||
	// Switch back to Go stack.
 | 
			
		||||
	XOR	R0, R0      // Restore R0 to $0.
 | 
			
		||||
	MOVD	R4, 0(R9)   // Save stack pointer.
 | 
			
		||||
	RET
 | 
			
		||||
 | 
			
		||||
TEXT ·syscall_syscall(SB),NOSPLIT,$0-56
 | 
			
		||||
	BL	runtime·entersyscall(SB)
 | 
			
		||||
	MOVD	a1+8(FP), R1
 | 
			
		||||
	MOVD	a2+16(FP), R2
 | 
			
		||||
	MOVD	a3+24(FP), R3
 | 
			
		||||
 | 
			
		||||
	// Get library control area (LCA).
 | 
			
		||||
	MOVW	PSALAA, R8
 | 
			
		||||
	MOVD	LCA64(R8), R8
 | 
			
		||||
 | 
			
		||||
	// Get function.
 | 
			
		||||
	MOVD	CAA(R8), R9
 | 
			
		||||
	MOVD	EDCHPXV(R9), R9
 | 
			
		||||
	MOVD	trap+0(FP), R5
 | 
			
		||||
	SLD	$4, R5
 | 
			
		||||
	ADD	R5, R9
 | 
			
		||||
	LMG	0(R9), R5, R6
 | 
			
		||||
 | 
			
		||||
	// Restore LE stack.
 | 
			
		||||
	MOVD	SAVSTACK_ASYNC(R8), R9
 | 
			
		||||
	MOVD	0(R9), R4
 | 
			
		||||
	MOVD	$0, 0(R9)
 | 
			
		||||
 | 
			
		||||
	// Call function.
 | 
			
		||||
	LE_CALL
 | 
			
		||||
	NOPH
 | 
			
		||||
	XOR	R0, R0      // Restore R0 to $0.
 | 
			
		||||
	MOVD	R4, 0(R9)   // Save stack pointer.
 | 
			
		||||
 | 
			
		||||
	MOVD	R3, r1+32(FP)
 | 
			
		||||
	MOVD	R0, r2+40(FP)
 | 
			
		||||
	MOVD	R0, err+48(FP)
 | 
			
		||||
	MOVW	R3, R4
 | 
			
		||||
	CMP	R4, $-1
 | 
			
		||||
	BNE	done
 | 
			
		||||
	BL	addrerrno<>(SB)
 | 
			
		||||
	MOVWZ	0(R3), R3
 | 
			
		||||
	MOVD	R3, err+48(FP)
 | 
			
		||||
done:
 | 
			
		||||
	BL	runtime·exitsyscall(SB)
 | 
			
		||||
	RET
 | 
			
		||||
 | 
			
		||||
TEXT ·syscall_rawsyscall(SB),NOSPLIT,$0-56
 | 
			
		||||
	MOVD	a1+8(FP), R1
 | 
			
		||||
	MOVD	a2+16(FP), R2
 | 
			
		||||
	MOVD	a3+24(FP), R3
 | 
			
		||||
 | 
			
		||||
	// Get library control area (LCA).
 | 
			
		||||
	MOVW	PSALAA, R8
 | 
			
		||||
	MOVD	LCA64(R8), R8
 | 
			
		||||
 | 
			
		||||
	// Get function.
 | 
			
		||||
	MOVD	CAA(R8), R9
 | 
			
		||||
	MOVD	EDCHPXV(R9), R9
 | 
			
		||||
	MOVD	trap+0(FP), R5
 | 
			
		||||
	SLD	$4, R5
 | 
			
		||||
	ADD	R5, R9
 | 
			
		||||
	LMG	0(R9), R5, R6
 | 
			
		||||
 | 
			
		||||
	// Restore LE stack.
 | 
			
		||||
	MOVD	SAVSTACK_ASYNC(R8), R9
 | 
			
		||||
	MOVD	0(R9), R4
 | 
			
		||||
	MOVD	$0, 0(R9)
 | 
			
		||||
 | 
			
		||||
	// Call function.
 | 
			
		||||
	LE_CALL
 | 
			
		||||
	NOPH
 | 
			
		||||
	XOR	R0, R0      // Restore R0 to $0.
 | 
			
		||||
	MOVD	R4, 0(R9)   // Save stack pointer.
 | 
			
		||||
 | 
			
		||||
	MOVD	R3, r1+32(FP)
 | 
			
		||||
	MOVD	R0, r2+40(FP)
 | 
			
		||||
	MOVD	R0, err+48(FP)
 | 
			
		||||
	MOVW	R3, R4
 | 
			
		||||
	CMP	R4, $-1
 | 
			
		||||
	BNE	done
 | 
			
		||||
	BL	addrerrno<>(SB)
 | 
			
		||||
	MOVWZ	0(R3), R3
 | 
			
		||||
	MOVD	R3, err+48(FP)
 | 
			
		||||
done:
 | 
			
		||||
	RET
 | 
			
		||||
 | 
			
		||||
TEXT ·syscall_syscall6(SB),NOSPLIT,$0-80
 | 
			
		||||
	BL	runtime·entersyscall(SB)
 | 
			
		||||
	MOVD	a1+8(FP), R1
 | 
			
		||||
	MOVD	a2+16(FP), R2
 | 
			
		||||
	MOVD	a3+24(FP), R3
 | 
			
		||||
 | 
			
		||||
	// Get library control area (LCA).
 | 
			
		||||
	MOVW	PSALAA, R8
 | 
			
		||||
	MOVD	LCA64(R8), R8
 | 
			
		||||
 | 
			
		||||
	// Get function.
 | 
			
		||||
	MOVD	CAA(R8), R9
 | 
			
		||||
	MOVD	EDCHPXV(R9), R9
 | 
			
		||||
	MOVD	trap+0(FP), R5
 | 
			
		||||
	SLD	$4, R5
 | 
			
		||||
	ADD	R5, R9
 | 
			
		||||
	LMG	0(R9), R5, R6
 | 
			
		||||
 | 
			
		||||
	// Restore LE stack.
 | 
			
		||||
	MOVD	SAVSTACK_ASYNC(R8), R9
 | 
			
		||||
	MOVD	0(R9), R4
 | 
			
		||||
	MOVD	$0, 0(R9)
 | 
			
		||||
 | 
			
		||||
	// Fill in parameter list.
 | 
			
		||||
	MOVD	a4+32(FP), R12
 | 
			
		||||
	MOVD	R12, (2176+24)(R4)
 | 
			
		||||
	MOVD	a5+40(FP), R12
 | 
			
		||||
	MOVD	R12, (2176+32)(R4)
 | 
			
		||||
	MOVD	a6+48(FP), R12
 | 
			
		||||
	MOVD	R12, (2176+40)(R4)
 | 
			
		||||
 | 
			
		||||
	// Call function.
 | 
			
		||||
	LE_CALL
 | 
			
		||||
	NOPH
 | 
			
		||||
	XOR	R0, R0      // Restore R0 to $0.
 | 
			
		||||
	MOVD	R4, 0(R9)   // Save stack pointer.
 | 
			
		||||
 | 
			
		||||
	MOVD	R3, r1+56(FP)
 | 
			
		||||
	MOVD	R0, r2+64(FP)
 | 
			
		||||
	MOVD	R0, err+72(FP)
 | 
			
		||||
	MOVW	R3, R4
 | 
			
		||||
	CMP	R4, $-1
 | 
			
		||||
	BNE	done
 | 
			
		||||
	BL	addrerrno<>(SB)
 | 
			
		||||
	MOVWZ	0(R3), R3
 | 
			
		||||
	MOVD	R3, err+72(FP)
 | 
			
		||||
done:
 | 
			
		||||
	BL	runtime·exitsyscall(SB)
 | 
			
		||||
	RET
 | 
			
		||||
 | 
			
		||||
TEXT ·syscall_rawsyscall6(SB),NOSPLIT,$0-80
 | 
			
		||||
	MOVD	a1+8(FP), R1
 | 
			
		||||
	MOVD	a2+16(FP), R2
 | 
			
		||||
	MOVD	a3+24(FP), R3
 | 
			
		||||
 | 
			
		||||
	// Get library control area (LCA).
 | 
			
		||||
	MOVW	PSALAA, R8
 | 
			
		||||
	MOVD	LCA64(R8), R8
 | 
			
		||||
 | 
			
		||||
	// Get function.
 | 
			
		||||
	MOVD	CAA(R8), R9
 | 
			
		||||
	MOVD	EDCHPXV(R9), R9
 | 
			
		||||
	MOVD	trap+0(FP), R5
 | 
			
		||||
	SLD	$4, R5
 | 
			
		||||
	ADD	R5, R9
 | 
			
		||||
	LMG	0(R9), R5, R6
 | 
			
		||||
 | 
			
		||||
	// Restore LE stack.
 | 
			
		||||
	MOVD	SAVSTACK_ASYNC(R8), R9
 | 
			
		||||
	MOVD	0(R9), R4
 | 
			
		||||
	MOVD	$0, 0(R9)
 | 
			
		||||
 | 
			
		||||
	// Fill in parameter list.
 | 
			
		||||
	MOVD	a4+32(FP), R12
 | 
			
		||||
	MOVD	R12, (2176+24)(R4)
 | 
			
		||||
	MOVD	a5+40(FP), R12
 | 
			
		||||
	MOVD	R12, (2176+32)(R4)
 | 
			
		||||
	MOVD	a6+48(FP), R12
 | 
			
		||||
	MOVD	R12, (2176+40)(R4)
 | 
			
		||||
 | 
			
		||||
	// Call function.
 | 
			
		||||
	LE_CALL
 | 
			
		||||
	NOPH
 | 
			
		||||
	XOR	R0, R0      // Restore R0 to $0.
 | 
			
		||||
	MOVD	R4, 0(R9)   // Save stack pointer.
 | 
			
		||||
 | 
			
		||||
	MOVD	R3, r1+56(FP)
 | 
			
		||||
	MOVD	R0, r2+64(FP)
 | 
			
		||||
	MOVD	R0, err+72(FP)
 | 
			
		||||
	MOVW	R3, R4
 | 
			
		||||
	CMP	R4, $-1
 | 
			
		||||
	BNE	done
 | 
			
		||||
	BL	·rrno<>(SB)
 | 
			
		||||
	MOVWZ	0(R3), R3
 | 
			
		||||
	MOVD	R3, err+72(FP)
 | 
			
		||||
done:
 | 
			
		||||
	RET
 | 
			
		||||
 | 
			
		||||
TEXT ·syscall_syscall9(SB),NOSPLIT,$0
 | 
			
		||||
	BL	runtime·entersyscall(SB)
 | 
			
		||||
	MOVD	a1+8(FP), R1
 | 
			
		||||
	MOVD	a2+16(FP), R2
 | 
			
		||||
	MOVD	a3+24(FP), R3
 | 
			
		||||
 | 
			
		||||
	// Get library control area (LCA).
 | 
			
		||||
	MOVW	PSALAA, R8
 | 
			
		||||
	MOVD	LCA64(R8), R8
 | 
			
		||||
 | 
			
		||||
	// Get function.
 | 
			
		||||
	MOVD	CAA(R8), R9
 | 
			
		||||
	MOVD	EDCHPXV(R9), R9
 | 
			
		||||
	MOVD	trap+0(FP), R5
 | 
			
		||||
	SLD	$4, R5
 | 
			
		||||
	ADD	R5, R9
 | 
			
		||||
	LMG	0(R9), R5, R6
 | 
			
		||||
 | 
			
		||||
	// Restore LE stack.
 | 
			
		||||
	MOVD	SAVSTACK_ASYNC(R8), R9
 | 
			
		||||
	MOVD	0(R9), R4
 | 
			
		||||
	MOVD	$0, 0(R9)
 | 
			
		||||
 | 
			
		||||
	// Fill in parameter list.
 | 
			
		||||
	MOVD	a4+32(FP), R12
 | 
			
		||||
	MOVD	R12, (2176+24)(R4)
 | 
			
		||||
	MOVD	a5+40(FP), R12
 | 
			
		||||
	MOVD	R12, (2176+32)(R4)
 | 
			
		||||
	MOVD	a6+48(FP), R12
 | 
			
		||||
	MOVD	R12, (2176+40)(R4)
 | 
			
		||||
	MOVD	a7+56(FP), R12
 | 
			
		||||
	MOVD	R12, (2176+48)(R4)
 | 
			
		||||
	MOVD	a8+64(FP), R12
 | 
			
		||||
	MOVD	R12, (2176+56)(R4)
 | 
			
		||||
	MOVD	a9+72(FP), R12
 | 
			
		||||
	MOVD	R12, (2176+64)(R4)
 | 
			
		||||
 | 
			
		||||
	// Call function.
 | 
			
		||||
	LE_CALL
 | 
			
		||||
	NOPH
 | 
			
		||||
	XOR	R0, R0      // Restore R0 to $0.
 | 
			
		||||
	MOVD	R4, 0(R9)   // Save stack pointer.
 | 
			
		||||
 | 
			
		||||
	MOVD	R3, r1+80(FP)
 | 
			
		||||
	MOVD	R0, r2+88(FP)
 | 
			
		||||
	MOVD	R0, err+96(FP)
 | 
			
		||||
	MOVW	R3, R4
 | 
			
		||||
	CMP	R4, $-1
 | 
			
		||||
	BNE	done
 | 
			
		||||
	BL	addrerrno<>(SB)
 | 
			
		||||
	MOVWZ	0(R3), R3
 | 
			
		||||
	MOVD	R3, err+96(FP)
 | 
			
		||||
done:
 | 
			
		||||
        BL	runtime·exitsyscall(SB)
 | 
			
		||||
        RET
 | 
			
		||||
 | 
			
		||||
TEXT ·syscall_rawsyscall9(SB),NOSPLIT,$0
 | 
			
		||||
	MOVD	a1+8(FP), R1
 | 
			
		||||
	MOVD	a2+16(FP), R2
 | 
			
		||||
	MOVD	a3+24(FP), R3
 | 
			
		||||
 | 
			
		||||
	// Get library control area (LCA).
 | 
			
		||||
	MOVW	PSALAA, R8
 | 
			
		||||
	MOVD	LCA64(R8), R8
 | 
			
		||||
 | 
			
		||||
	// Get function.
 | 
			
		||||
	MOVD	CAA(R8), R9
 | 
			
		||||
	MOVD	EDCHPXV(R9), R9
 | 
			
		||||
	MOVD	trap+0(FP), R5
 | 
			
		||||
	SLD	$4, R5
 | 
			
		||||
	ADD	R5, R9
 | 
			
		||||
	LMG	0(R9), R5, R6
 | 
			
		||||
 | 
			
		||||
	// Restore LE stack.
 | 
			
		||||
	MOVD	SAVSTACK_ASYNC(R8), R9
 | 
			
		||||
	MOVD	0(R9), R4
 | 
			
		||||
	MOVD	$0, 0(R9)
 | 
			
		||||
 | 
			
		||||
	// Fill in parameter list.
 | 
			
		||||
	MOVD	a4+32(FP), R12
 | 
			
		||||
	MOVD	R12, (2176+24)(R4)
 | 
			
		||||
	MOVD	a5+40(FP), R12
 | 
			
		||||
	MOVD	R12, (2176+32)(R4)
 | 
			
		||||
	MOVD	a6+48(FP), R12
 | 
			
		||||
	MOVD	R12, (2176+40)(R4)
 | 
			
		||||
	MOVD	a7+56(FP), R12
 | 
			
		||||
	MOVD	R12, (2176+48)(R4)
 | 
			
		||||
	MOVD	a8+64(FP), R12
 | 
			
		||||
	MOVD	R12, (2176+56)(R4)
 | 
			
		||||
	MOVD	a9+72(FP), R12
 | 
			
		||||
	MOVD	R12, (2176+64)(R4)
 | 
			
		||||
 | 
			
		||||
	// Call function.
 | 
			
		||||
	LE_CALL
 | 
			
		||||
	NOPH
 | 
			
		||||
	XOR	R0, R0      // Restore R0 to $0.
 | 
			
		||||
	MOVD	R4, 0(R9)   // Save stack pointer.
 | 
			
		||||
 | 
			
		||||
	MOVD	R3, r1+80(FP)
 | 
			
		||||
	MOVD	R0, r2+88(FP)
 | 
			
		||||
	MOVD	R0, err+96(FP)
 | 
			
		||||
	MOVW	R3, R4
 | 
			
		||||
	CMP	R4, $-1
 | 
			
		||||
	BNE	done
 | 
			
		||||
	BL	addrerrno<>(SB)
 | 
			
		||||
	MOVWZ	0(R3), R3
 | 
			
		||||
	MOVD	R3, err+96(FP)
 | 
			
		||||
done:
 | 
			
		||||
	RET
 | 
			
		||||
 | 
			
		||||
// func svcCall(fnptr unsafe.Pointer, argv *unsafe.Pointer, dsa *uint64)
 | 
			
		||||
TEXT ·svcCall(SB),NOSPLIT,$0
 | 
			
		||||
	BL	runtime·save_g(SB)   // Save g and stack pointer
 | 
			
		||||
	MOVW	PSALAA, R8
 | 
			
		||||
	MOVD	LCA64(R8), R8
 | 
			
		||||
	MOVD	SAVSTACK_ASYNC(R8), R9
 | 
			
		||||
	MOVD	R15, 0(R9)
 | 
			
		||||
 | 
			
		||||
	MOVD	argv+8(FP), R1       // Move function arguments into registers
 | 
			
		||||
	MOVD	dsa+16(FP), g
 | 
			
		||||
	MOVD	fnptr+0(FP), R15
 | 
			
		||||
 | 
			
		||||
	BYTE	$0x0D                // Branch to function
 | 
			
		||||
	BYTE	$0xEF
 | 
			
		||||
 | 
			
		||||
	BL	runtime·load_g(SB)   // Restore g and stack pointer
 | 
			
		||||
	MOVW	PSALAA, R8
 | 
			
		||||
	MOVD	LCA64(R8), R8
 | 
			
		||||
	MOVD	SAVSTACK_ASYNC(R8), R9
 | 
			
		||||
	MOVD	0(R9), R15
 | 
			
		||||
 | 
			
		||||
	RET
 | 
			
		||||
 | 
			
		||||
// func svcLoad(name *byte) unsafe.Pointer
 | 
			
		||||
TEXT ·svcLoad(SB),NOSPLIT,$0
 | 
			
		||||
	MOVD	R15, R2          // Save go stack pointer
 | 
			
		||||
	MOVD	name+0(FP), R0   // Move SVC args into registers
 | 
			
		||||
	MOVD	$0x80000000, R1
 | 
			
		||||
	MOVD	$0, R15
 | 
			
		||||
	BYTE	$0x0A            // SVC 08 LOAD
 | 
			
		||||
	BYTE	$0x08
 | 
			
		||||
	MOVW	R15, R3          // Save return code from SVC
 | 
			
		||||
	MOVD	R2, R15          // Restore go stack pointer
 | 
			
		||||
	CMP	R3, $0           // Check SVC return code
 | 
			
		||||
	BNE	error
 | 
			
		||||
 | 
			
		||||
	MOVD	$-2, R3          // Reset last bit of entry point to zero
 | 
			
		||||
	AND	R0, R3
 | 
			
		||||
	MOVD	R3, addr+8(FP)   // Return entry point returned by SVC
 | 
			
		||||
	CMP	R0, R3           // Check if last bit of entry point was set
 | 
			
		||||
	BNE	done
 | 
			
		||||
 | 
			
		||||
	MOVD	R15, R2          // Save go stack pointer
 | 
			
		||||
	MOVD	$0, R15          // Move SVC args into registers (entry point still in r0 from SVC 08)
 | 
			
		||||
	BYTE	$0x0A            // SVC 09 DELETE
 | 
			
		||||
	BYTE	$0x09
 | 
			
		||||
	MOVD	R2, R15          // Restore go stack pointer
 | 
			
		||||
 | 
			
		||||
error:
 | 
			
		||||
	MOVD	$0, addr+8(FP)   // Return 0 on failure
 | 
			
		||||
done:
 | 
			
		||||
	XOR	R0, R0           // Reset r0 to 0
 | 
			
		||||
	RET
 | 
			
		||||
 | 
			
		||||
// func svcUnload(name *byte, fnptr unsafe.Pointer) int64
 | 
			
		||||
TEXT ·svcUnload(SB),NOSPLIT,$0
 | 
			
		||||
	MOVD	R15, R2          // Save go stack pointer
 | 
			
		||||
	MOVD	name+0(FP), R0   // Move SVC args into registers
 | 
			
		||||
	MOVD	addr+8(FP), R15
 | 
			
		||||
	BYTE	$0x0A            // SVC 09
 | 
			
		||||
	BYTE	$0x09
 | 
			
		||||
	XOR	R0, R0           // Reset r0 to 0
 | 
			
		||||
	MOVD	R15, R1          // Save SVC return code
 | 
			
		||||
	MOVD	R2, R15          // Restore go stack pointer
 | 
			
		||||
	MOVD	R1, rc+0(FP)     // Return SVC return code
 | 
			
		||||
	RET
 | 
			
		||||
 | 
			
		||||
// func gettid() uint64
 | 
			
		||||
TEXT ·gettid(SB), NOSPLIT, $0
 | 
			
		||||
	// Get library control area (LCA).
 | 
			
		||||
	MOVW PSALAA, R8
 | 
			
		||||
	MOVD LCA64(R8), R8
 | 
			
		||||
 | 
			
		||||
	// Get CEECAATHDID
 | 
			
		||||
	MOVD CAA(R8), R9
 | 
			
		||||
	MOVD 0x3D0(R9), R9
 | 
			
		||||
	MOVD R9, ret+0(FP)
 | 
			
		||||
 | 
			
		||||
	RET
 | 
			
		||||
							
								
								
									
										36
									
								
								vendor/golang.org/x/sys/unix/bluetooth_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								vendor/golang.org/x/sys/unix/bluetooth_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
// Copyright 2016 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
// Bluetooth sockets and messages
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
// Bluetooth Protocols
 | 
			
		||||
const (
 | 
			
		||||
	BTPROTO_L2CAP  = 0
 | 
			
		||||
	BTPROTO_HCI    = 1
 | 
			
		||||
	BTPROTO_SCO    = 2
 | 
			
		||||
	BTPROTO_RFCOMM = 3
 | 
			
		||||
	BTPROTO_BNEP   = 4
 | 
			
		||||
	BTPROTO_CMTP   = 5
 | 
			
		||||
	BTPROTO_HIDP   = 6
 | 
			
		||||
	BTPROTO_AVDTP  = 7
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	HCI_CHANNEL_RAW     = 0
 | 
			
		||||
	HCI_CHANNEL_USER    = 1
 | 
			
		||||
	HCI_CHANNEL_MONITOR = 2
 | 
			
		||||
	HCI_CHANNEL_CONTROL = 3
 | 
			
		||||
	HCI_CHANNEL_LOGGING = 4
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Socketoption Level
 | 
			
		||||
const (
 | 
			
		||||
	SOL_BLUETOOTH = 0x112
 | 
			
		||||
	SOL_HCI       = 0x0
 | 
			
		||||
	SOL_L2CAP     = 0x6
 | 
			
		||||
	SOL_RFCOMM    = 0x12
 | 
			
		||||
	SOL_SCO       = 0x11
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										196
									
								
								vendor/golang.org/x/sys/unix/cap_freebsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										196
									
								
								vendor/golang.org/x/sys/unix/cap_freebsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,196 @@
 | 
			
		||||
// Copyright 2017 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build freebsd
 | 
			
		||||
// +build freebsd
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Go implementation of C mostly found in /usr/src/sys/kern/subr_capability.c
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	// This is the version of CapRights this package understands. See C implementation for parallels.
 | 
			
		||||
	capRightsGoVersion = CAP_RIGHTS_VERSION_00
 | 
			
		||||
	capArSizeMin       = CAP_RIGHTS_VERSION_00 + 2
 | 
			
		||||
	capArSizeMax       = capRightsGoVersion + 2
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	bit2idx = []int{
 | 
			
		||||
		-1, 0, 1, -1, 2, -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1,
 | 
			
		||||
		4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func capidxbit(right uint64) int {
 | 
			
		||||
	return int((right >> 57) & 0x1f)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func rightToIndex(right uint64) (int, error) {
 | 
			
		||||
	idx := capidxbit(right)
 | 
			
		||||
	if idx < 0 || idx >= len(bit2idx) {
 | 
			
		||||
		return -2, fmt.Errorf("index for right 0x%x out of range", right)
 | 
			
		||||
	}
 | 
			
		||||
	return bit2idx[idx], nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func caprver(right uint64) int {
 | 
			
		||||
	return int(right >> 62)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func capver(rights *CapRights) int {
 | 
			
		||||
	return caprver(rights.Rights[0])
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func caparsize(rights *CapRights) int {
 | 
			
		||||
	return capver(rights) + 2
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CapRightsSet sets the permissions in setrights in rights.
 | 
			
		||||
func CapRightsSet(rights *CapRights, setrights []uint64) error {
 | 
			
		||||
	// This is essentially a copy of cap_rights_vset()
 | 
			
		||||
	if capver(rights) != CAP_RIGHTS_VERSION_00 {
 | 
			
		||||
		return fmt.Errorf("bad rights version %d", capver(rights))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	n := caparsize(rights)
 | 
			
		||||
	if n < capArSizeMin || n > capArSizeMax {
 | 
			
		||||
		return errors.New("bad rights size")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, right := range setrights {
 | 
			
		||||
		if caprver(right) != CAP_RIGHTS_VERSION_00 {
 | 
			
		||||
			return errors.New("bad right version")
 | 
			
		||||
		}
 | 
			
		||||
		i, err := rightToIndex(right)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		if i >= n {
 | 
			
		||||
			return errors.New("index overflow")
 | 
			
		||||
		}
 | 
			
		||||
		if capidxbit(rights.Rights[i]) != capidxbit(right) {
 | 
			
		||||
			return errors.New("index mismatch")
 | 
			
		||||
		}
 | 
			
		||||
		rights.Rights[i] |= right
 | 
			
		||||
		if capidxbit(rights.Rights[i]) != capidxbit(right) {
 | 
			
		||||
			return errors.New("index mismatch (after assign)")
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CapRightsClear clears the permissions in clearrights from rights.
 | 
			
		||||
func CapRightsClear(rights *CapRights, clearrights []uint64) error {
 | 
			
		||||
	// This is essentially a copy of cap_rights_vclear()
 | 
			
		||||
	if capver(rights) != CAP_RIGHTS_VERSION_00 {
 | 
			
		||||
		return fmt.Errorf("bad rights version %d", capver(rights))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	n := caparsize(rights)
 | 
			
		||||
	if n < capArSizeMin || n > capArSizeMax {
 | 
			
		||||
		return errors.New("bad rights size")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, right := range clearrights {
 | 
			
		||||
		if caprver(right) != CAP_RIGHTS_VERSION_00 {
 | 
			
		||||
			return errors.New("bad right version")
 | 
			
		||||
		}
 | 
			
		||||
		i, err := rightToIndex(right)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		if i >= n {
 | 
			
		||||
			return errors.New("index overflow")
 | 
			
		||||
		}
 | 
			
		||||
		if capidxbit(rights.Rights[i]) != capidxbit(right) {
 | 
			
		||||
			return errors.New("index mismatch")
 | 
			
		||||
		}
 | 
			
		||||
		rights.Rights[i] &= ^(right & 0x01FFFFFFFFFFFFFF)
 | 
			
		||||
		if capidxbit(rights.Rights[i]) != capidxbit(right) {
 | 
			
		||||
			return errors.New("index mismatch (after assign)")
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CapRightsIsSet checks whether all the permissions in setrights are present in rights.
 | 
			
		||||
func CapRightsIsSet(rights *CapRights, setrights []uint64) (bool, error) {
 | 
			
		||||
	// This is essentially a copy of cap_rights_is_vset()
 | 
			
		||||
	if capver(rights) != CAP_RIGHTS_VERSION_00 {
 | 
			
		||||
		return false, fmt.Errorf("bad rights version %d", capver(rights))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	n := caparsize(rights)
 | 
			
		||||
	if n < capArSizeMin || n > capArSizeMax {
 | 
			
		||||
		return false, errors.New("bad rights size")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, right := range setrights {
 | 
			
		||||
		if caprver(right) != CAP_RIGHTS_VERSION_00 {
 | 
			
		||||
			return false, errors.New("bad right version")
 | 
			
		||||
		}
 | 
			
		||||
		i, err := rightToIndex(right)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return false, err
 | 
			
		||||
		}
 | 
			
		||||
		if i >= n {
 | 
			
		||||
			return false, errors.New("index overflow")
 | 
			
		||||
		}
 | 
			
		||||
		if capidxbit(rights.Rights[i]) != capidxbit(right) {
 | 
			
		||||
			return false, errors.New("index mismatch")
 | 
			
		||||
		}
 | 
			
		||||
		if (rights.Rights[i] & right) != right {
 | 
			
		||||
			return false, nil
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return true, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func capright(idx uint64, bit uint64) uint64 {
 | 
			
		||||
	return ((1 << (57 + idx)) | bit)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CapRightsInit returns a pointer to an initialised CapRights structure filled with rights.
 | 
			
		||||
// See man cap_rights_init(3) and rights(4).
 | 
			
		||||
func CapRightsInit(rights []uint64) (*CapRights, error) {
 | 
			
		||||
	var r CapRights
 | 
			
		||||
	r.Rights[0] = (capRightsGoVersion << 62) | capright(0, 0)
 | 
			
		||||
	r.Rights[1] = capright(1, 0)
 | 
			
		||||
 | 
			
		||||
	err := CapRightsSet(&r, rights)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return &r, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CapRightsLimit reduces the operations permitted on fd to at most those contained in rights.
 | 
			
		||||
// The capability rights on fd can never be increased by CapRightsLimit.
 | 
			
		||||
// See man cap_rights_limit(2) and rights(4).
 | 
			
		||||
func CapRightsLimit(fd uintptr, rights *CapRights) error {
 | 
			
		||||
	return capRightsLimit(int(fd), rights)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CapRightsGet returns a CapRights structure containing the operations permitted on fd.
 | 
			
		||||
// See man cap_rights_get(3) and rights(4).
 | 
			
		||||
func CapRightsGet(fd uintptr) (*CapRights, error) {
 | 
			
		||||
	r, err := CapRightsInit(nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	err = capRightsGet(capRightsGoVersion, int(fd), r)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return r, nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								vendor/golang.org/x/sys/unix/constants.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								vendor/golang.org/x/sys/unix/constants.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
// Copyright 2015 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos
 | 
			
		||||
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	R_OK = 0x4
 | 
			
		||||
	W_OK = 0x2
 | 
			
		||||
	X_OK = 0x1
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										27
									
								
								vendor/golang.org/x/sys/unix/dev_aix_ppc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								vendor/golang.org/x/sys/unix/dev_aix_ppc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
// Copyright 2018 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build aix && ppc
 | 
			
		||||
// +build aix,ppc
 | 
			
		||||
 | 
			
		||||
// Functions to access/create device major and minor numbers matching the
 | 
			
		||||
// encoding used by AIX.
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
// Major returns the major component of a Linux device number.
 | 
			
		||||
func Major(dev uint64) uint32 {
 | 
			
		||||
	return uint32((dev >> 16) & 0xffff)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Minor returns the minor component of a Linux device number.
 | 
			
		||||
func Minor(dev uint64) uint32 {
 | 
			
		||||
	return uint32(dev & 0xffff)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Mkdev returns a Linux device number generated from the given major and minor
 | 
			
		||||
// components.
 | 
			
		||||
func Mkdev(major, minor uint32) uint64 {
 | 
			
		||||
	return uint64(((major) << 16) | (minor))
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										29
									
								
								vendor/golang.org/x/sys/unix/dev_aix_ppc64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/golang.org/x/sys/unix/dev_aix_ppc64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
// Copyright 2018 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build aix && ppc64
 | 
			
		||||
// +build aix,ppc64
 | 
			
		||||
 | 
			
		||||
// Functions to access/create device major and minor numbers matching the
 | 
			
		||||
// encoding used AIX.
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
// Major returns the major component of a Linux device number.
 | 
			
		||||
func Major(dev uint64) uint32 {
 | 
			
		||||
	return uint32((dev & 0x3fffffff00000000) >> 32)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Minor returns the minor component of a Linux device number.
 | 
			
		||||
func Minor(dev uint64) uint32 {
 | 
			
		||||
	return uint32((dev & 0x00000000ffffffff) >> 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Mkdev returns a Linux device number generated from the given major and minor
 | 
			
		||||
// components.
 | 
			
		||||
func Mkdev(major, minor uint32) uint64 {
 | 
			
		||||
	var DEVNO64 uint64
 | 
			
		||||
	DEVNO64 = 0x8000000000000000
 | 
			
		||||
	return ((uint64(major) << 32) | (uint64(minor) & 0x00000000FFFFFFFF) | DEVNO64)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										24
									
								
								vendor/golang.org/x/sys/unix/dev_darwin.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								vendor/golang.org/x/sys/unix/dev_darwin.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
// Copyright 2017 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
// Functions to access/create device major and minor numbers matching the
 | 
			
		||||
// encoding used in Darwin's sys/types.h header.
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
// Major returns the major component of a Darwin device number.
 | 
			
		||||
func Major(dev uint64) uint32 {
 | 
			
		||||
	return uint32((dev >> 24) & 0xff)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Minor returns the minor component of a Darwin device number.
 | 
			
		||||
func Minor(dev uint64) uint32 {
 | 
			
		||||
	return uint32(dev & 0xffffff)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Mkdev returns a Darwin device number generated from the given major and minor
 | 
			
		||||
// components.
 | 
			
		||||
func Mkdev(major, minor uint32) uint64 {
 | 
			
		||||
	return (uint64(major) << 24) | uint64(minor)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										30
									
								
								vendor/golang.org/x/sys/unix/dev_dragonfly.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								vendor/golang.org/x/sys/unix/dev_dragonfly.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
// Copyright 2017 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
// Functions to access/create device major and minor numbers matching the
 | 
			
		||||
// encoding used in Dragonfly's sys/types.h header.
 | 
			
		||||
//
 | 
			
		||||
// The information below is extracted and adapted from sys/types.h:
 | 
			
		||||
//
 | 
			
		||||
// Minor gives a cookie instead of an index since in order to avoid changing the
 | 
			
		||||
// meanings of bits 0-15 or wasting time and space shifting bits 16-31 for
 | 
			
		||||
// devices that don't use them.
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
// Major returns the major component of a DragonFlyBSD device number.
 | 
			
		||||
func Major(dev uint64) uint32 {
 | 
			
		||||
	return uint32((dev >> 8) & 0xff)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Minor returns the minor component of a DragonFlyBSD device number.
 | 
			
		||||
func Minor(dev uint64) uint32 {
 | 
			
		||||
	return uint32(dev & 0xffff00ff)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Mkdev returns a DragonFlyBSD device number generated from the given major and
 | 
			
		||||
// minor components.
 | 
			
		||||
func Mkdev(major, minor uint32) uint64 {
 | 
			
		||||
	return (uint64(major) << 8) | uint64(minor)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										30
									
								
								vendor/golang.org/x/sys/unix/dev_freebsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								vendor/golang.org/x/sys/unix/dev_freebsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
// Copyright 2017 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
// Functions to access/create device major and minor numbers matching the
 | 
			
		||||
// encoding used in FreeBSD's sys/types.h header.
 | 
			
		||||
//
 | 
			
		||||
// The information below is extracted and adapted from sys/types.h:
 | 
			
		||||
//
 | 
			
		||||
// Minor gives a cookie instead of an index since in order to avoid changing the
 | 
			
		||||
// meanings of bits 0-15 or wasting time and space shifting bits 16-31 for
 | 
			
		||||
// devices that don't use them.
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
// Major returns the major component of a FreeBSD device number.
 | 
			
		||||
func Major(dev uint64) uint32 {
 | 
			
		||||
	return uint32((dev >> 8) & 0xff)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Minor returns the minor component of a FreeBSD device number.
 | 
			
		||||
func Minor(dev uint64) uint32 {
 | 
			
		||||
	return uint32(dev & 0xffff00ff)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Mkdev returns a FreeBSD device number generated from the given major and
 | 
			
		||||
// minor components.
 | 
			
		||||
func Mkdev(major, minor uint32) uint64 {
 | 
			
		||||
	return (uint64(major) << 8) | uint64(minor)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										42
									
								
								vendor/golang.org/x/sys/unix/dev_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								vendor/golang.org/x/sys/unix/dev_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
// Copyright 2017 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
// Functions to access/create device major and minor numbers matching the
 | 
			
		||||
// encoding used by the Linux kernel and glibc.
 | 
			
		||||
//
 | 
			
		||||
// The information below is extracted and adapted from bits/sysmacros.h in the
 | 
			
		||||
// glibc sources:
 | 
			
		||||
//
 | 
			
		||||
// dev_t in glibc is 64-bit, with 32-bit major and minor numbers. glibc's
 | 
			
		||||
// default encoding is MMMM Mmmm mmmM MMmm, where M is a hex digit of the major
 | 
			
		||||
// number and m is a hex digit of the minor number. This is backward compatible
 | 
			
		||||
// with legacy systems where dev_t is 16 bits wide, encoded as MMmm. It is also
 | 
			
		||||
// backward compatible with the Linux kernel, which for some architectures uses
 | 
			
		||||
// 32-bit dev_t, encoded as mmmM MMmm.
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
// Major returns the major component of a Linux device number.
 | 
			
		||||
func Major(dev uint64) uint32 {
 | 
			
		||||
	major := uint32((dev & 0x00000000000fff00) >> 8)
 | 
			
		||||
	major |= uint32((dev & 0xfffff00000000000) >> 32)
 | 
			
		||||
	return major
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Minor returns the minor component of a Linux device number.
 | 
			
		||||
func Minor(dev uint64) uint32 {
 | 
			
		||||
	minor := uint32((dev & 0x00000000000000ff) >> 0)
 | 
			
		||||
	minor |= uint32((dev & 0x00000ffffff00000) >> 12)
 | 
			
		||||
	return minor
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Mkdev returns a Linux device number generated from the given major and minor
 | 
			
		||||
// components.
 | 
			
		||||
func Mkdev(major, minor uint32) uint64 {
 | 
			
		||||
	dev := (uint64(major) & 0x00000fff) << 8
 | 
			
		||||
	dev |= (uint64(major) & 0xfffff000) << 32
 | 
			
		||||
	dev |= (uint64(minor) & 0x000000ff) << 0
 | 
			
		||||
	dev |= (uint64(minor) & 0xffffff00) << 12
 | 
			
		||||
	return dev
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										29
									
								
								vendor/golang.org/x/sys/unix/dev_netbsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/golang.org/x/sys/unix/dev_netbsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
// Copyright 2017 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
// Functions to access/create device major and minor numbers matching the
 | 
			
		||||
// encoding used in NetBSD's sys/types.h header.
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
// Major returns the major component of a NetBSD device number.
 | 
			
		||||
func Major(dev uint64) uint32 {
 | 
			
		||||
	return uint32((dev & 0x000fff00) >> 8)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Minor returns the minor component of a NetBSD device number.
 | 
			
		||||
func Minor(dev uint64) uint32 {
 | 
			
		||||
	minor := uint32((dev & 0x000000ff) >> 0)
 | 
			
		||||
	minor |= uint32((dev & 0xfff00000) >> 12)
 | 
			
		||||
	return minor
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Mkdev returns a NetBSD device number generated from the given major and minor
 | 
			
		||||
// components.
 | 
			
		||||
func Mkdev(major, minor uint32) uint64 {
 | 
			
		||||
	dev := (uint64(major) << 8) & 0x000fff00
 | 
			
		||||
	dev |= (uint64(minor) << 12) & 0xfff00000
 | 
			
		||||
	dev |= (uint64(minor) << 0) & 0x000000ff
 | 
			
		||||
	return dev
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										29
									
								
								vendor/golang.org/x/sys/unix/dev_openbsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/golang.org/x/sys/unix/dev_openbsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
// Copyright 2017 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
// Functions to access/create device major and minor numbers matching the
 | 
			
		||||
// encoding used in OpenBSD's sys/types.h header.
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
// Major returns the major component of an OpenBSD device number.
 | 
			
		||||
func Major(dev uint64) uint32 {
 | 
			
		||||
	return uint32((dev & 0x0000ff00) >> 8)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Minor returns the minor component of an OpenBSD device number.
 | 
			
		||||
func Minor(dev uint64) uint32 {
 | 
			
		||||
	minor := uint32((dev & 0x000000ff) >> 0)
 | 
			
		||||
	minor |= uint32((dev & 0xffff0000) >> 8)
 | 
			
		||||
	return minor
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Mkdev returns an OpenBSD device number generated from the given major and minor
 | 
			
		||||
// components.
 | 
			
		||||
func Mkdev(major, minor uint32) uint64 {
 | 
			
		||||
	dev := (uint64(major) << 8) & 0x0000ff00
 | 
			
		||||
	dev |= (uint64(minor) << 8) & 0xffff0000
 | 
			
		||||
	dev |= (uint64(minor) << 0) & 0x000000ff
 | 
			
		||||
	return dev
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										29
									
								
								vendor/golang.org/x/sys/unix/dev_zos.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/golang.org/x/sys/unix/dev_zos.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
// Copyright 2020 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build zos && s390x
 | 
			
		||||
// +build zos,s390x
 | 
			
		||||
 | 
			
		||||
// Functions to access/create device major and minor numbers matching the
 | 
			
		||||
// encoding used by z/OS.
 | 
			
		||||
//
 | 
			
		||||
// The information below is extracted and adapted from <sys/stat.h> macros.
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
// Major returns the major component of a z/OS device number.
 | 
			
		||||
func Major(dev uint64) uint32 {
 | 
			
		||||
	return uint32((dev >> 16) & 0x0000FFFF)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Minor returns the minor component of a z/OS device number.
 | 
			
		||||
func Minor(dev uint64) uint32 {
 | 
			
		||||
	return uint32(dev & 0x0000FFFF)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Mkdev returns a z/OS device number generated from the given major and minor
 | 
			
		||||
// components.
 | 
			
		||||
func Mkdev(major, minor uint32) uint64 {
 | 
			
		||||
	return (uint64(major) << 16) | uint64(minor)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										103
									
								
								vendor/golang.org/x/sys/unix/dirent.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								vendor/golang.org/x/sys/unix/dirent.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,103 @@
 | 
			
		||||
// Copyright 2009 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris
 | 
			
		||||
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import "unsafe"
 | 
			
		||||
 | 
			
		||||
// readInt returns the size-bytes unsigned integer in native byte order at offset off.
 | 
			
		||||
func readInt(b []byte, off, size uintptr) (u uint64, ok bool) {
 | 
			
		||||
	if len(b) < int(off+size) {
 | 
			
		||||
		return 0, false
 | 
			
		||||
	}
 | 
			
		||||
	if isBigEndian {
 | 
			
		||||
		return readIntBE(b[off:], size), true
 | 
			
		||||
	}
 | 
			
		||||
	return readIntLE(b[off:], size), true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func readIntBE(b []byte, size uintptr) uint64 {
 | 
			
		||||
	switch size {
 | 
			
		||||
	case 1:
 | 
			
		||||
		return uint64(b[0])
 | 
			
		||||
	case 2:
 | 
			
		||||
		_ = b[1] // bounds check hint to compiler; see golang.org/issue/14808
 | 
			
		||||
		return uint64(b[1]) | uint64(b[0])<<8
 | 
			
		||||
	case 4:
 | 
			
		||||
		_ = b[3] // bounds check hint to compiler; see golang.org/issue/14808
 | 
			
		||||
		return uint64(b[3]) | uint64(b[2])<<8 | uint64(b[1])<<16 | uint64(b[0])<<24
 | 
			
		||||
	case 8:
 | 
			
		||||
		_ = b[7] // bounds check hint to compiler; see golang.org/issue/14808
 | 
			
		||||
		return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 |
 | 
			
		||||
			uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56
 | 
			
		||||
	default:
 | 
			
		||||
		panic("syscall: readInt with unsupported size")
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func readIntLE(b []byte, size uintptr) uint64 {
 | 
			
		||||
	switch size {
 | 
			
		||||
	case 1:
 | 
			
		||||
		return uint64(b[0])
 | 
			
		||||
	case 2:
 | 
			
		||||
		_ = b[1] // bounds check hint to compiler; see golang.org/issue/14808
 | 
			
		||||
		return uint64(b[0]) | uint64(b[1])<<8
 | 
			
		||||
	case 4:
 | 
			
		||||
		_ = b[3] // bounds check hint to compiler; see golang.org/issue/14808
 | 
			
		||||
		return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24
 | 
			
		||||
	case 8:
 | 
			
		||||
		_ = b[7] // bounds check hint to compiler; see golang.org/issue/14808
 | 
			
		||||
		return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |
 | 
			
		||||
			uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
 | 
			
		||||
	default:
 | 
			
		||||
		panic("syscall: readInt with unsupported size")
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ParseDirent parses up to max directory entries in buf,
 | 
			
		||||
// appending the names to names. It returns the number of
 | 
			
		||||
// bytes consumed from buf, the number of entries added
 | 
			
		||||
// to names, and the new names slice.
 | 
			
		||||
func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) {
 | 
			
		||||
	origlen := len(buf)
 | 
			
		||||
	count = 0
 | 
			
		||||
	for max != 0 && len(buf) > 0 {
 | 
			
		||||
		reclen, ok := direntReclen(buf)
 | 
			
		||||
		if !ok || reclen > uint64(len(buf)) {
 | 
			
		||||
			return origlen, count, names
 | 
			
		||||
		}
 | 
			
		||||
		rec := buf[:reclen]
 | 
			
		||||
		buf = buf[reclen:]
 | 
			
		||||
		ino, ok := direntIno(rec)
 | 
			
		||||
		if !ok {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		if ino == 0 { // File absent in directory.
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		const namoff = uint64(unsafe.Offsetof(Dirent{}.Name))
 | 
			
		||||
		namlen, ok := direntNamlen(rec)
 | 
			
		||||
		if !ok || namoff+namlen > uint64(len(rec)) {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		name := rec[namoff : namoff+namlen]
 | 
			
		||||
		for i, c := range name {
 | 
			
		||||
			if c == 0 {
 | 
			
		||||
				name = name[:i]
 | 
			
		||||
				break
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		// Check for useless names before allocating a string.
 | 
			
		||||
		if string(name) == "." || string(name) == ".." {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		max--
 | 
			
		||||
		count++
 | 
			
		||||
		names = append(names, string(name))
 | 
			
		||||
	}
 | 
			
		||||
	return origlen - len(buf), count, names
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										10
									
								
								vendor/golang.org/x/sys/unix/endian_big.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								vendor/golang.org/x/sys/unix/endian_big.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
// Copyright 2016 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
//
 | 
			
		||||
//go:build armbe || arm64be || m68k || mips || mips64 || mips64p32 || ppc || ppc64 || s390 || s390x || shbe || sparc || sparc64
 | 
			
		||||
// +build armbe arm64be m68k mips mips64 mips64p32 ppc ppc64 s390 s390x shbe sparc sparc64
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
const isBigEndian = true
 | 
			
		||||
							
								
								
									
										10
									
								
								vendor/golang.org/x/sys/unix/endian_little.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								vendor/golang.org/x/sys/unix/endian_little.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
// Copyright 2016 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
//
 | 
			
		||||
//go:build 386 || amd64 || amd64p32 || alpha || arm || arm64 || mipsle || mips64le || mips64p32le || nios2 || ppc64le || riscv || riscv64 || sh
 | 
			
		||||
// +build 386 amd64 amd64p32 alpha arm arm64 mipsle mips64le mips64p32le nios2 ppc64le riscv riscv64 sh
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
const isBigEndian = false
 | 
			
		||||
							
								
								
									
										32
									
								
								vendor/golang.org/x/sys/unix/env_unix.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								vendor/golang.org/x/sys/unix/env_unix.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
// Copyright 2010 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos
 | 
			
		||||
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos
 | 
			
		||||
 | 
			
		||||
// Unix environment variables.
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import "syscall"
 | 
			
		||||
 | 
			
		||||
func Getenv(key string) (value string, found bool) {
 | 
			
		||||
	return syscall.Getenv(key)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Setenv(key, value string) error {
 | 
			
		||||
	return syscall.Setenv(key, value)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Clearenv() {
 | 
			
		||||
	syscall.Clearenv()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Environ() []string {
 | 
			
		||||
	return syscall.Environ()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Unsetenv(key string) error {
 | 
			
		||||
	return syscall.Unsetenv(key)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										221
									
								
								vendor/golang.org/x/sys/unix/epoll_zos.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										221
									
								
								vendor/golang.org/x/sys/unix/epoll_zos.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,221 @@
 | 
			
		||||
// Copyright 2020 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build zos && s390x
 | 
			
		||||
// +build zos,s390x
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"sync"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// This file simulates epoll on z/OS using poll.
 | 
			
		||||
 | 
			
		||||
// Analogous to epoll_event on Linux.
 | 
			
		||||
// TODO(neeilan): Pad is because the Linux kernel expects a 96-bit struct. We never pass this to the kernel; remove?
 | 
			
		||||
type EpollEvent struct {
 | 
			
		||||
	Events uint32
 | 
			
		||||
	Fd     int32
 | 
			
		||||
	Pad    int32
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	EPOLLERR      = 0x8
 | 
			
		||||
	EPOLLHUP      = 0x10
 | 
			
		||||
	EPOLLIN       = 0x1
 | 
			
		||||
	EPOLLMSG      = 0x400
 | 
			
		||||
	EPOLLOUT      = 0x4
 | 
			
		||||
	EPOLLPRI      = 0x2
 | 
			
		||||
	EPOLLRDBAND   = 0x80
 | 
			
		||||
	EPOLLRDNORM   = 0x40
 | 
			
		||||
	EPOLLWRBAND   = 0x200
 | 
			
		||||
	EPOLLWRNORM   = 0x100
 | 
			
		||||
	EPOLL_CTL_ADD = 0x1
 | 
			
		||||
	EPOLL_CTL_DEL = 0x2
 | 
			
		||||
	EPOLL_CTL_MOD = 0x3
 | 
			
		||||
	// The following constants are part of the epoll API, but represent
 | 
			
		||||
	// currently unsupported functionality on z/OS.
 | 
			
		||||
	// EPOLL_CLOEXEC  = 0x80000
 | 
			
		||||
	// EPOLLET        = 0x80000000
 | 
			
		||||
	// EPOLLONESHOT   = 0x40000000
 | 
			
		||||
	// EPOLLRDHUP     = 0x2000     // Typically used with edge-triggered notis
 | 
			
		||||
	// EPOLLEXCLUSIVE = 0x10000000 // Exclusive wake-up mode
 | 
			
		||||
	// EPOLLWAKEUP    = 0x20000000 // Relies on Linux's BLOCK_SUSPEND capability
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// TODO(neeilan): We can eliminate these epToPoll / pToEpoll calls by using identical mask values for POLL/EPOLL
 | 
			
		||||
// constants where possible The lower 16 bits of epoll events (uint32) can fit any system poll event (int16).
 | 
			
		||||
 | 
			
		||||
// epToPollEvt converts epoll event field to poll equivalent.
 | 
			
		||||
// In epoll, Events is a 32-bit field, while poll uses 16 bits.
 | 
			
		||||
func epToPollEvt(events uint32) int16 {
 | 
			
		||||
	var ep2p = map[uint32]int16{
 | 
			
		||||
		EPOLLIN:  POLLIN,
 | 
			
		||||
		EPOLLOUT: POLLOUT,
 | 
			
		||||
		EPOLLHUP: POLLHUP,
 | 
			
		||||
		EPOLLPRI: POLLPRI,
 | 
			
		||||
		EPOLLERR: POLLERR,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var pollEvts int16 = 0
 | 
			
		||||
	for epEvt, pEvt := range ep2p {
 | 
			
		||||
		if (events & epEvt) != 0 {
 | 
			
		||||
			pollEvts |= pEvt
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return pollEvts
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// pToEpollEvt converts 16 bit poll event bitfields to 32-bit epoll event fields.
 | 
			
		||||
func pToEpollEvt(revents int16) uint32 {
 | 
			
		||||
	var p2ep = map[int16]uint32{
 | 
			
		||||
		POLLIN:  EPOLLIN,
 | 
			
		||||
		POLLOUT: EPOLLOUT,
 | 
			
		||||
		POLLHUP: EPOLLHUP,
 | 
			
		||||
		POLLPRI: EPOLLPRI,
 | 
			
		||||
		POLLERR: EPOLLERR,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var epollEvts uint32 = 0
 | 
			
		||||
	for pEvt, epEvt := range p2ep {
 | 
			
		||||
		if (revents & pEvt) != 0 {
 | 
			
		||||
			epollEvts |= epEvt
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return epollEvts
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Per-process epoll implementation.
 | 
			
		||||
type epollImpl struct {
 | 
			
		||||
	mu       sync.Mutex
 | 
			
		||||
	epfd2ep  map[int]*eventPoll
 | 
			
		||||
	nextEpfd int
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// eventPoll holds a set of file descriptors being watched by the process. A process can have multiple epoll instances.
 | 
			
		||||
// On Linux, this is an in-kernel data structure accessed through a fd.
 | 
			
		||||
type eventPoll struct {
 | 
			
		||||
	mu  sync.Mutex
 | 
			
		||||
	fds map[int]*EpollEvent
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// epoll impl for this process.
 | 
			
		||||
var impl epollImpl = epollImpl{
 | 
			
		||||
	epfd2ep:  make(map[int]*eventPoll),
 | 
			
		||||
	nextEpfd: 0,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (e *epollImpl) epollcreate(size int) (epfd int, err error) {
 | 
			
		||||
	e.mu.Lock()
 | 
			
		||||
	defer e.mu.Unlock()
 | 
			
		||||
	epfd = e.nextEpfd
 | 
			
		||||
	e.nextEpfd++
 | 
			
		||||
 | 
			
		||||
	e.epfd2ep[epfd] = &eventPoll{
 | 
			
		||||
		fds: make(map[int]*EpollEvent),
 | 
			
		||||
	}
 | 
			
		||||
	return epfd, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (e *epollImpl) epollcreate1(flag int) (fd int, err error) {
 | 
			
		||||
	return e.epollcreate(4)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (e *epollImpl) epollctl(epfd int, op int, fd int, event *EpollEvent) (err error) {
 | 
			
		||||
	e.mu.Lock()
 | 
			
		||||
	defer e.mu.Unlock()
 | 
			
		||||
 | 
			
		||||
	ep, ok := e.epfd2ep[epfd]
 | 
			
		||||
	if !ok {
 | 
			
		||||
 | 
			
		||||
		return EBADF
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	switch op {
 | 
			
		||||
	case EPOLL_CTL_ADD:
 | 
			
		||||
		// TODO(neeilan): When we make epfds and fds disjoint, detect epoll
 | 
			
		||||
		// loops here (instances watching each other) and return ELOOP.
 | 
			
		||||
		if _, ok := ep.fds[fd]; ok {
 | 
			
		||||
			return EEXIST
 | 
			
		||||
		}
 | 
			
		||||
		ep.fds[fd] = event
 | 
			
		||||
	case EPOLL_CTL_MOD:
 | 
			
		||||
		if _, ok := ep.fds[fd]; !ok {
 | 
			
		||||
			return ENOENT
 | 
			
		||||
		}
 | 
			
		||||
		ep.fds[fd] = event
 | 
			
		||||
	case EPOLL_CTL_DEL:
 | 
			
		||||
		if _, ok := ep.fds[fd]; !ok {
 | 
			
		||||
			return ENOENT
 | 
			
		||||
		}
 | 
			
		||||
		delete(ep.fds, fd)
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Must be called while holding ep.mu
 | 
			
		||||
func (ep *eventPoll) getFds() []int {
 | 
			
		||||
	fds := make([]int, len(ep.fds))
 | 
			
		||||
	for fd := range ep.fds {
 | 
			
		||||
		fds = append(fds, fd)
 | 
			
		||||
	}
 | 
			
		||||
	return fds
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (e *epollImpl) epollwait(epfd int, events []EpollEvent, msec int) (n int, err error) {
 | 
			
		||||
	e.mu.Lock() // in [rare] case of concurrent epollcreate + epollwait
 | 
			
		||||
	ep, ok := e.epfd2ep[epfd]
 | 
			
		||||
 | 
			
		||||
	if !ok {
 | 
			
		||||
		e.mu.Unlock()
 | 
			
		||||
		return 0, EBADF
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	pollfds := make([]PollFd, 4)
 | 
			
		||||
	for fd, epollevt := range ep.fds {
 | 
			
		||||
		pollfds = append(pollfds, PollFd{Fd: int32(fd), Events: epToPollEvt(epollevt.Events)})
 | 
			
		||||
	}
 | 
			
		||||
	e.mu.Unlock()
 | 
			
		||||
 | 
			
		||||
	n, err = Poll(pollfds, msec)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return n, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	i := 0
 | 
			
		||||
	for _, pFd := range pollfds {
 | 
			
		||||
		if pFd.Revents != 0 {
 | 
			
		||||
			events[i] = EpollEvent{Fd: pFd.Fd, Events: pToEpollEvt(pFd.Revents)}
 | 
			
		||||
			i++
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if i == n {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return n, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func EpollCreate(size int) (fd int, err error) {
 | 
			
		||||
	return impl.epollcreate(size)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func EpollCreate1(flag int) (fd int, err error) {
 | 
			
		||||
	return impl.epollcreate1(flag)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {
 | 
			
		||||
	return impl.epollctl(epfd, op, fd, event)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Because EpollWait mutates events, the caller is expected to coordinate
 | 
			
		||||
// concurrent access if calling with the same epfd from multiple goroutines.
 | 
			
		||||
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
 | 
			
		||||
	return impl.epollwait(epfd, events, msec)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										233
									
								
								vendor/golang.org/x/sys/unix/errors_freebsd_386.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										233
									
								
								vendor/golang.org/x/sys/unix/errors_freebsd_386.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,233 @@
 | 
			
		||||
// Copyright 2017 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
// Constants that were deprecated or moved to enums in the FreeBSD headers. Keep
 | 
			
		||||
// them here for backwards compatibility.
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	DLT_HHDLC                         = 0x79
 | 
			
		||||
	IFF_SMART                         = 0x20
 | 
			
		||||
	IFT_1822                          = 0x2
 | 
			
		||||
	IFT_A12MPPSWITCH                  = 0x82
 | 
			
		||||
	IFT_AAL2                          = 0xbb
 | 
			
		||||
	IFT_AAL5                          = 0x31
 | 
			
		||||
	IFT_ADSL                          = 0x5e
 | 
			
		||||
	IFT_AFLANE8023                    = 0x3b
 | 
			
		||||
	IFT_AFLANE8025                    = 0x3c
 | 
			
		||||
	IFT_ARAP                          = 0x58
 | 
			
		||||
	IFT_ARCNET                        = 0x23
 | 
			
		||||
	IFT_ARCNETPLUS                    = 0x24
 | 
			
		||||
	IFT_ASYNC                         = 0x54
 | 
			
		||||
	IFT_ATM                           = 0x25
 | 
			
		||||
	IFT_ATMDXI                        = 0x69
 | 
			
		||||
	IFT_ATMFUNI                       = 0x6a
 | 
			
		||||
	IFT_ATMIMA                        = 0x6b
 | 
			
		||||
	IFT_ATMLOGICAL                    = 0x50
 | 
			
		||||
	IFT_ATMRADIO                      = 0xbd
 | 
			
		||||
	IFT_ATMSUBINTERFACE               = 0x86
 | 
			
		||||
	IFT_ATMVCIENDPT                   = 0xc2
 | 
			
		||||
	IFT_ATMVIRTUAL                    = 0x95
 | 
			
		||||
	IFT_BGPPOLICYACCOUNTING           = 0xa2
 | 
			
		||||
	IFT_BSC                           = 0x53
 | 
			
		||||
	IFT_CCTEMUL                       = 0x3d
 | 
			
		||||
	IFT_CEPT                          = 0x13
 | 
			
		||||
	IFT_CES                           = 0x85
 | 
			
		||||
	IFT_CHANNEL                       = 0x46
 | 
			
		||||
	IFT_CNR                           = 0x55
 | 
			
		||||
	IFT_COFFEE                        = 0x84
 | 
			
		||||
	IFT_COMPOSITELINK                 = 0x9b
 | 
			
		||||
	IFT_DCN                           = 0x8d
 | 
			
		||||
	IFT_DIGITALPOWERLINE              = 0x8a
 | 
			
		||||
	IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba
 | 
			
		||||
	IFT_DLSW                          = 0x4a
 | 
			
		||||
	IFT_DOCSCABLEDOWNSTREAM           = 0x80
 | 
			
		||||
	IFT_DOCSCABLEMACLAYER             = 0x7f
 | 
			
		||||
	IFT_DOCSCABLEUPSTREAM             = 0x81
 | 
			
		||||
	IFT_DS0                           = 0x51
 | 
			
		||||
	IFT_DS0BUNDLE                     = 0x52
 | 
			
		||||
	IFT_DS1FDL                        = 0xaa
 | 
			
		||||
	IFT_DS3                           = 0x1e
 | 
			
		||||
	IFT_DTM                           = 0x8c
 | 
			
		||||
	IFT_DVBASILN                      = 0xac
 | 
			
		||||
	IFT_DVBASIOUT                     = 0xad
 | 
			
		||||
	IFT_DVBRCCDOWNSTREAM              = 0x93
 | 
			
		||||
	IFT_DVBRCCMACLAYER                = 0x92
 | 
			
		||||
	IFT_DVBRCCUPSTREAM                = 0x94
 | 
			
		||||
	IFT_ENC                           = 0xf4
 | 
			
		||||
	IFT_EON                           = 0x19
 | 
			
		||||
	IFT_EPLRS                         = 0x57
 | 
			
		||||
	IFT_ESCON                         = 0x49
 | 
			
		||||
	IFT_ETHER                         = 0x6
 | 
			
		||||
	IFT_FAITH                         = 0xf2
 | 
			
		||||
	IFT_FAST                          = 0x7d
 | 
			
		||||
	IFT_FASTETHER                     = 0x3e
 | 
			
		||||
	IFT_FASTETHERFX                   = 0x45
 | 
			
		||||
	IFT_FDDI                          = 0xf
 | 
			
		||||
	IFT_FIBRECHANNEL                  = 0x38
 | 
			
		||||
	IFT_FRAMERELAYINTERCONNECT        = 0x3a
 | 
			
		||||
	IFT_FRAMERELAYMPI                 = 0x5c
 | 
			
		||||
	IFT_FRDLCIENDPT                   = 0xc1
 | 
			
		||||
	IFT_FRELAY                        = 0x20
 | 
			
		||||
	IFT_FRELAYDCE                     = 0x2c
 | 
			
		||||
	IFT_FRF16MFRBUNDLE                = 0xa3
 | 
			
		||||
	IFT_FRFORWARD                     = 0x9e
 | 
			
		||||
	IFT_G703AT2MB                     = 0x43
 | 
			
		||||
	IFT_G703AT64K                     = 0x42
 | 
			
		||||
	IFT_GIF                           = 0xf0
 | 
			
		||||
	IFT_GIGABITETHERNET               = 0x75
 | 
			
		||||
	IFT_GR303IDT                      = 0xb2
 | 
			
		||||
	IFT_GR303RDT                      = 0xb1
 | 
			
		||||
	IFT_H323GATEKEEPER                = 0xa4
 | 
			
		||||
	IFT_H323PROXY                     = 0xa5
 | 
			
		||||
	IFT_HDH1822                       = 0x3
 | 
			
		||||
	IFT_HDLC                          = 0x76
 | 
			
		||||
	IFT_HDSL2                         = 0xa8
 | 
			
		||||
	IFT_HIPERLAN2                     = 0xb7
 | 
			
		||||
	IFT_HIPPI                         = 0x2f
 | 
			
		||||
	IFT_HIPPIINTERFACE                = 0x39
 | 
			
		||||
	IFT_HOSTPAD                       = 0x5a
 | 
			
		||||
	IFT_HSSI                          = 0x2e
 | 
			
		||||
	IFT_HY                            = 0xe
 | 
			
		||||
	IFT_IBM370PARCHAN                 = 0x48
 | 
			
		||||
	IFT_IDSL                          = 0x9a
 | 
			
		||||
	IFT_IEEE80211                     = 0x47
 | 
			
		||||
	IFT_IEEE80212                     = 0x37
 | 
			
		||||
	IFT_IEEE8023ADLAG                 = 0xa1
 | 
			
		||||
	IFT_IFGSN                         = 0x91
 | 
			
		||||
	IFT_IMT                           = 0xbe
 | 
			
		||||
	IFT_INTERLEAVE                    = 0x7c
 | 
			
		||||
	IFT_IP                            = 0x7e
 | 
			
		||||
	IFT_IPFORWARD                     = 0x8e
 | 
			
		||||
	IFT_IPOVERATM                     = 0x72
 | 
			
		||||
	IFT_IPOVERCDLC                    = 0x6d
 | 
			
		||||
	IFT_IPOVERCLAW                    = 0x6e
 | 
			
		||||
	IFT_IPSWITCH                      = 0x4e
 | 
			
		||||
	IFT_IPXIP                         = 0xf9
 | 
			
		||||
	IFT_ISDN                          = 0x3f
 | 
			
		||||
	IFT_ISDNBASIC                     = 0x14
 | 
			
		||||
	IFT_ISDNPRIMARY                   = 0x15
 | 
			
		||||
	IFT_ISDNS                         = 0x4b
 | 
			
		||||
	IFT_ISDNU                         = 0x4c
 | 
			
		||||
	IFT_ISO88022LLC                   = 0x29
 | 
			
		||||
	IFT_ISO88023                      = 0x7
 | 
			
		||||
	IFT_ISO88024                      = 0x8
 | 
			
		||||
	IFT_ISO88025                      = 0x9
 | 
			
		||||
	IFT_ISO88025CRFPINT               = 0x62
 | 
			
		||||
	IFT_ISO88025DTR                   = 0x56
 | 
			
		||||
	IFT_ISO88025FIBER                 = 0x73
 | 
			
		||||
	IFT_ISO88026                      = 0xa
 | 
			
		||||
	IFT_ISUP                          = 0xb3
 | 
			
		||||
	IFT_L3IPXVLAN                     = 0x89
 | 
			
		||||
	IFT_LAPB                          = 0x10
 | 
			
		||||
	IFT_LAPD                          = 0x4d
 | 
			
		||||
	IFT_LAPF                          = 0x77
 | 
			
		||||
	IFT_LOCALTALK                     = 0x2a
 | 
			
		||||
	IFT_LOOP                          = 0x18
 | 
			
		||||
	IFT_MEDIAMAILOVERIP               = 0x8b
 | 
			
		||||
	IFT_MFSIGLINK                     = 0xa7
 | 
			
		||||
	IFT_MIOX25                        = 0x26
 | 
			
		||||
	IFT_MODEM                         = 0x30
 | 
			
		||||
	IFT_MPC                           = 0x71
 | 
			
		||||
	IFT_MPLS                          = 0xa6
 | 
			
		||||
	IFT_MPLSTUNNEL                    = 0x96
 | 
			
		||||
	IFT_MSDSL                         = 0x8f
 | 
			
		||||
	IFT_MVL                           = 0xbf
 | 
			
		||||
	IFT_MYRINET                       = 0x63
 | 
			
		||||
	IFT_NFAS                          = 0xaf
 | 
			
		||||
	IFT_NSIP                          = 0x1b
 | 
			
		||||
	IFT_OPTICALCHANNEL                = 0xc3
 | 
			
		||||
	IFT_OPTICALTRANSPORT              = 0xc4
 | 
			
		||||
	IFT_OTHER                         = 0x1
 | 
			
		||||
	IFT_P10                           = 0xc
 | 
			
		||||
	IFT_P80                           = 0xd
 | 
			
		||||
	IFT_PARA                          = 0x22
 | 
			
		||||
	IFT_PFLOG                         = 0xf6
 | 
			
		||||
	IFT_PFSYNC                        = 0xf7
 | 
			
		||||
	IFT_PLC                           = 0xae
 | 
			
		||||
	IFT_POS                           = 0xab
 | 
			
		||||
	IFT_PPPMULTILINKBUNDLE            = 0x6c
 | 
			
		||||
	IFT_PROPBWAP2MP                   = 0xb8
 | 
			
		||||
	IFT_PROPCNLS                      = 0x59
 | 
			
		||||
	IFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5
 | 
			
		||||
	IFT_PROPDOCSWIRELESSMACLAYER      = 0xb4
 | 
			
		||||
	IFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6
 | 
			
		||||
	IFT_PROPMUX                       = 0x36
 | 
			
		||||
	IFT_PROPWIRELESSP2P               = 0x9d
 | 
			
		||||
	IFT_PTPSERIAL                     = 0x16
 | 
			
		||||
	IFT_PVC                           = 0xf1
 | 
			
		||||
	IFT_QLLC                          = 0x44
 | 
			
		||||
	IFT_RADIOMAC                      = 0xbc
 | 
			
		||||
	IFT_RADSL                         = 0x5f
 | 
			
		||||
	IFT_REACHDSL                      = 0xc0
 | 
			
		||||
	IFT_RFC1483                       = 0x9f
 | 
			
		||||
	IFT_RS232                         = 0x21
 | 
			
		||||
	IFT_RSRB                          = 0x4f
 | 
			
		||||
	IFT_SDLC                          = 0x11
 | 
			
		||||
	IFT_SDSL                          = 0x60
 | 
			
		||||
	IFT_SHDSL                         = 0xa9
 | 
			
		||||
	IFT_SIP                           = 0x1f
 | 
			
		||||
	IFT_SLIP                          = 0x1c
 | 
			
		||||
	IFT_SMDSDXI                       = 0x2b
 | 
			
		||||
	IFT_SMDSICIP                      = 0x34
 | 
			
		||||
	IFT_SONET                         = 0x27
 | 
			
		||||
	IFT_SONETOVERHEADCHANNEL          = 0xb9
 | 
			
		||||
	IFT_SONETPATH                     = 0x32
 | 
			
		||||
	IFT_SONETVT                       = 0x33
 | 
			
		||||
	IFT_SRP                           = 0x97
 | 
			
		||||
	IFT_SS7SIGLINK                    = 0x9c
 | 
			
		||||
	IFT_STACKTOSTACK                  = 0x6f
 | 
			
		||||
	IFT_STARLAN                       = 0xb
 | 
			
		||||
	IFT_STF                           = 0xd7
 | 
			
		||||
	IFT_T1                            = 0x12
 | 
			
		||||
	IFT_TDLC                          = 0x74
 | 
			
		||||
	IFT_TERMPAD                       = 0x5b
 | 
			
		||||
	IFT_TR008                         = 0xb0
 | 
			
		||||
	IFT_TRANSPHDLC                    = 0x7b
 | 
			
		||||
	IFT_TUNNEL                        = 0x83
 | 
			
		||||
	IFT_ULTRA                         = 0x1d
 | 
			
		||||
	IFT_USB                           = 0xa0
 | 
			
		||||
	IFT_V11                           = 0x40
 | 
			
		||||
	IFT_V35                           = 0x2d
 | 
			
		||||
	IFT_V36                           = 0x41
 | 
			
		||||
	IFT_V37                           = 0x78
 | 
			
		||||
	IFT_VDSL                          = 0x61
 | 
			
		||||
	IFT_VIRTUALIPADDRESS              = 0x70
 | 
			
		||||
	IFT_VOICEEM                       = 0x64
 | 
			
		||||
	IFT_VOICEENCAP                    = 0x67
 | 
			
		||||
	IFT_VOICEFXO                      = 0x65
 | 
			
		||||
	IFT_VOICEFXS                      = 0x66
 | 
			
		||||
	IFT_VOICEOVERATM                  = 0x98
 | 
			
		||||
	IFT_VOICEOVERFRAMERELAY           = 0x99
 | 
			
		||||
	IFT_VOICEOVERIP                   = 0x68
 | 
			
		||||
	IFT_X213                          = 0x5d
 | 
			
		||||
	IFT_X25                           = 0x5
 | 
			
		||||
	IFT_X25DDN                        = 0x4
 | 
			
		||||
	IFT_X25HUNTGROUP                  = 0x7a
 | 
			
		||||
	IFT_X25MLP                        = 0x79
 | 
			
		||||
	IFT_X25PLE                        = 0x28
 | 
			
		||||
	IFT_XETHER                        = 0x1a
 | 
			
		||||
	IPPROTO_MAXID                     = 0x34
 | 
			
		||||
	IPV6_FAITH                        = 0x1d
 | 
			
		||||
	IPV6_MIN_MEMBERSHIPS              = 0x1f
 | 
			
		||||
	IP_FAITH                          = 0x16
 | 
			
		||||
	IP_MAX_SOURCE_FILTER              = 0x400
 | 
			
		||||
	IP_MIN_MEMBERSHIPS                = 0x1f
 | 
			
		||||
	MAP_NORESERVE                     = 0x40
 | 
			
		||||
	MAP_RENAME                        = 0x20
 | 
			
		||||
	NET_RT_MAXID                      = 0x6
 | 
			
		||||
	RTF_PRCLONING                     = 0x10000
 | 
			
		||||
	RTM_OLDADD                        = 0x9
 | 
			
		||||
	RTM_OLDDEL                        = 0xa
 | 
			
		||||
	RT_CACHING_CONTEXT                = 0x1
 | 
			
		||||
	RT_NORTREF                        = 0x2
 | 
			
		||||
	SIOCADDRT                         = 0x8030720a
 | 
			
		||||
	SIOCALIFADDR                      = 0x8118691b
 | 
			
		||||
	SIOCDELRT                         = 0x8030720b
 | 
			
		||||
	SIOCDLIFADDR                      = 0x8118691d
 | 
			
		||||
	SIOCGLIFADDR                      = 0xc118691c
 | 
			
		||||
	SIOCGLIFPHYADDR                   = 0xc118694b
 | 
			
		||||
	SIOCSLIFPHYADDR                   = 0x8118694a
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										233
									
								
								vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										233
									
								
								vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,233 @@
 | 
			
		||||
// Copyright 2017 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
// Constants that were deprecated or moved to enums in the FreeBSD headers. Keep
 | 
			
		||||
// them here for backwards compatibility.
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	DLT_HHDLC                         = 0x79
 | 
			
		||||
	IFF_SMART                         = 0x20
 | 
			
		||||
	IFT_1822                          = 0x2
 | 
			
		||||
	IFT_A12MPPSWITCH                  = 0x82
 | 
			
		||||
	IFT_AAL2                          = 0xbb
 | 
			
		||||
	IFT_AAL5                          = 0x31
 | 
			
		||||
	IFT_ADSL                          = 0x5e
 | 
			
		||||
	IFT_AFLANE8023                    = 0x3b
 | 
			
		||||
	IFT_AFLANE8025                    = 0x3c
 | 
			
		||||
	IFT_ARAP                          = 0x58
 | 
			
		||||
	IFT_ARCNET                        = 0x23
 | 
			
		||||
	IFT_ARCNETPLUS                    = 0x24
 | 
			
		||||
	IFT_ASYNC                         = 0x54
 | 
			
		||||
	IFT_ATM                           = 0x25
 | 
			
		||||
	IFT_ATMDXI                        = 0x69
 | 
			
		||||
	IFT_ATMFUNI                       = 0x6a
 | 
			
		||||
	IFT_ATMIMA                        = 0x6b
 | 
			
		||||
	IFT_ATMLOGICAL                    = 0x50
 | 
			
		||||
	IFT_ATMRADIO                      = 0xbd
 | 
			
		||||
	IFT_ATMSUBINTERFACE               = 0x86
 | 
			
		||||
	IFT_ATMVCIENDPT                   = 0xc2
 | 
			
		||||
	IFT_ATMVIRTUAL                    = 0x95
 | 
			
		||||
	IFT_BGPPOLICYACCOUNTING           = 0xa2
 | 
			
		||||
	IFT_BSC                           = 0x53
 | 
			
		||||
	IFT_CCTEMUL                       = 0x3d
 | 
			
		||||
	IFT_CEPT                          = 0x13
 | 
			
		||||
	IFT_CES                           = 0x85
 | 
			
		||||
	IFT_CHANNEL                       = 0x46
 | 
			
		||||
	IFT_CNR                           = 0x55
 | 
			
		||||
	IFT_COFFEE                        = 0x84
 | 
			
		||||
	IFT_COMPOSITELINK                 = 0x9b
 | 
			
		||||
	IFT_DCN                           = 0x8d
 | 
			
		||||
	IFT_DIGITALPOWERLINE              = 0x8a
 | 
			
		||||
	IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba
 | 
			
		||||
	IFT_DLSW                          = 0x4a
 | 
			
		||||
	IFT_DOCSCABLEDOWNSTREAM           = 0x80
 | 
			
		||||
	IFT_DOCSCABLEMACLAYER             = 0x7f
 | 
			
		||||
	IFT_DOCSCABLEUPSTREAM             = 0x81
 | 
			
		||||
	IFT_DS0                           = 0x51
 | 
			
		||||
	IFT_DS0BUNDLE                     = 0x52
 | 
			
		||||
	IFT_DS1FDL                        = 0xaa
 | 
			
		||||
	IFT_DS3                           = 0x1e
 | 
			
		||||
	IFT_DTM                           = 0x8c
 | 
			
		||||
	IFT_DVBASILN                      = 0xac
 | 
			
		||||
	IFT_DVBASIOUT                     = 0xad
 | 
			
		||||
	IFT_DVBRCCDOWNSTREAM              = 0x93
 | 
			
		||||
	IFT_DVBRCCMACLAYER                = 0x92
 | 
			
		||||
	IFT_DVBRCCUPSTREAM                = 0x94
 | 
			
		||||
	IFT_ENC                           = 0xf4
 | 
			
		||||
	IFT_EON                           = 0x19
 | 
			
		||||
	IFT_EPLRS                         = 0x57
 | 
			
		||||
	IFT_ESCON                         = 0x49
 | 
			
		||||
	IFT_ETHER                         = 0x6
 | 
			
		||||
	IFT_FAITH                         = 0xf2
 | 
			
		||||
	IFT_FAST                          = 0x7d
 | 
			
		||||
	IFT_FASTETHER                     = 0x3e
 | 
			
		||||
	IFT_FASTETHERFX                   = 0x45
 | 
			
		||||
	IFT_FDDI                          = 0xf
 | 
			
		||||
	IFT_FIBRECHANNEL                  = 0x38
 | 
			
		||||
	IFT_FRAMERELAYINTERCONNECT        = 0x3a
 | 
			
		||||
	IFT_FRAMERELAYMPI                 = 0x5c
 | 
			
		||||
	IFT_FRDLCIENDPT                   = 0xc1
 | 
			
		||||
	IFT_FRELAY                        = 0x20
 | 
			
		||||
	IFT_FRELAYDCE                     = 0x2c
 | 
			
		||||
	IFT_FRF16MFRBUNDLE                = 0xa3
 | 
			
		||||
	IFT_FRFORWARD                     = 0x9e
 | 
			
		||||
	IFT_G703AT2MB                     = 0x43
 | 
			
		||||
	IFT_G703AT64K                     = 0x42
 | 
			
		||||
	IFT_GIF                           = 0xf0
 | 
			
		||||
	IFT_GIGABITETHERNET               = 0x75
 | 
			
		||||
	IFT_GR303IDT                      = 0xb2
 | 
			
		||||
	IFT_GR303RDT                      = 0xb1
 | 
			
		||||
	IFT_H323GATEKEEPER                = 0xa4
 | 
			
		||||
	IFT_H323PROXY                     = 0xa5
 | 
			
		||||
	IFT_HDH1822                       = 0x3
 | 
			
		||||
	IFT_HDLC                          = 0x76
 | 
			
		||||
	IFT_HDSL2                         = 0xa8
 | 
			
		||||
	IFT_HIPERLAN2                     = 0xb7
 | 
			
		||||
	IFT_HIPPI                         = 0x2f
 | 
			
		||||
	IFT_HIPPIINTERFACE                = 0x39
 | 
			
		||||
	IFT_HOSTPAD                       = 0x5a
 | 
			
		||||
	IFT_HSSI                          = 0x2e
 | 
			
		||||
	IFT_HY                            = 0xe
 | 
			
		||||
	IFT_IBM370PARCHAN                 = 0x48
 | 
			
		||||
	IFT_IDSL                          = 0x9a
 | 
			
		||||
	IFT_IEEE80211                     = 0x47
 | 
			
		||||
	IFT_IEEE80212                     = 0x37
 | 
			
		||||
	IFT_IEEE8023ADLAG                 = 0xa1
 | 
			
		||||
	IFT_IFGSN                         = 0x91
 | 
			
		||||
	IFT_IMT                           = 0xbe
 | 
			
		||||
	IFT_INTERLEAVE                    = 0x7c
 | 
			
		||||
	IFT_IP                            = 0x7e
 | 
			
		||||
	IFT_IPFORWARD                     = 0x8e
 | 
			
		||||
	IFT_IPOVERATM                     = 0x72
 | 
			
		||||
	IFT_IPOVERCDLC                    = 0x6d
 | 
			
		||||
	IFT_IPOVERCLAW                    = 0x6e
 | 
			
		||||
	IFT_IPSWITCH                      = 0x4e
 | 
			
		||||
	IFT_IPXIP                         = 0xf9
 | 
			
		||||
	IFT_ISDN                          = 0x3f
 | 
			
		||||
	IFT_ISDNBASIC                     = 0x14
 | 
			
		||||
	IFT_ISDNPRIMARY                   = 0x15
 | 
			
		||||
	IFT_ISDNS                         = 0x4b
 | 
			
		||||
	IFT_ISDNU                         = 0x4c
 | 
			
		||||
	IFT_ISO88022LLC                   = 0x29
 | 
			
		||||
	IFT_ISO88023                      = 0x7
 | 
			
		||||
	IFT_ISO88024                      = 0x8
 | 
			
		||||
	IFT_ISO88025                      = 0x9
 | 
			
		||||
	IFT_ISO88025CRFPINT               = 0x62
 | 
			
		||||
	IFT_ISO88025DTR                   = 0x56
 | 
			
		||||
	IFT_ISO88025FIBER                 = 0x73
 | 
			
		||||
	IFT_ISO88026                      = 0xa
 | 
			
		||||
	IFT_ISUP                          = 0xb3
 | 
			
		||||
	IFT_L3IPXVLAN                     = 0x89
 | 
			
		||||
	IFT_LAPB                          = 0x10
 | 
			
		||||
	IFT_LAPD                          = 0x4d
 | 
			
		||||
	IFT_LAPF                          = 0x77
 | 
			
		||||
	IFT_LOCALTALK                     = 0x2a
 | 
			
		||||
	IFT_LOOP                          = 0x18
 | 
			
		||||
	IFT_MEDIAMAILOVERIP               = 0x8b
 | 
			
		||||
	IFT_MFSIGLINK                     = 0xa7
 | 
			
		||||
	IFT_MIOX25                        = 0x26
 | 
			
		||||
	IFT_MODEM                         = 0x30
 | 
			
		||||
	IFT_MPC                           = 0x71
 | 
			
		||||
	IFT_MPLS                          = 0xa6
 | 
			
		||||
	IFT_MPLSTUNNEL                    = 0x96
 | 
			
		||||
	IFT_MSDSL                         = 0x8f
 | 
			
		||||
	IFT_MVL                           = 0xbf
 | 
			
		||||
	IFT_MYRINET                       = 0x63
 | 
			
		||||
	IFT_NFAS                          = 0xaf
 | 
			
		||||
	IFT_NSIP                          = 0x1b
 | 
			
		||||
	IFT_OPTICALCHANNEL                = 0xc3
 | 
			
		||||
	IFT_OPTICALTRANSPORT              = 0xc4
 | 
			
		||||
	IFT_OTHER                         = 0x1
 | 
			
		||||
	IFT_P10                           = 0xc
 | 
			
		||||
	IFT_P80                           = 0xd
 | 
			
		||||
	IFT_PARA                          = 0x22
 | 
			
		||||
	IFT_PFLOG                         = 0xf6
 | 
			
		||||
	IFT_PFSYNC                        = 0xf7
 | 
			
		||||
	IFT_PLC                           = 0xae
 | 
			
		||||
	IFT_POS                           = 0xab
 | 
			
		||||
	IFT_PPPMULTILINKBUNDLE            = 0x6c
 | 
			
		||||
	IFT_PROPBWAP2MP                   = 0xb8
 | 
			
		||||
	IFT_PROPCNLS                      = 0x59
 | 
			
		||||
	IFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5
 | 
			
		||||
	IFT_PROPDOCSWIRELESSMACLAYER      = 0xb4
 | 
			
		||||
	IFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6
 | 
			
		||||
	IFT_PROPMUX                       = 0x36
 | 
			
		||||
	IFT_PROPWIRELESSP2P               = 0x9d
 | 
			
		||||
	IFT_PTPSERIAL                     = 0x16
 | 
			
		||||
	IFT_PVC                           = 0xf1
 | 
			
		||||
	IFT_QLLC                          = 0x44
 | 
			
		||||
	IFT_RADIOMAC                      = 0xbc
 | 
			
		||||
	IFT_RADSL                         = 0x5f
 | 
			
		||||
	IFT_REACHDSL                      = 0xc0
 | 
			
		||||
	IFT_RFC1483                       = 0x9f
 | 
			
		||||
	IFT_RS232                         = 0x21
 | 
			
		||||
	IFT_RSRB                          = 0x4f
 | 
			
		||||
	IFT_SDLC                          = 0x11
 | 
			
		||||
	IFT_SDSL                          = 0x60
 | 
			
		||||
	IFT_SHDSL                         = 0xa9
 | 
			
		||||
	IFT_SIP                           = 0x1f
 | 
			
		||||
	IFT_SLIP                          = 0x1c
 | 
			
		||||
	IFT_SMDSDXI                       = 0x2b
 | 
			
		||||
	IFT_SMDSICIP                      = 0x34
 | 
			
		||||
	IFT_SONET                         = 0x27
 | 
			
		||||
	IFT_SONETOVERHEADCHANNEL          = 0xb9
 | 
			
		||||
	IFT_SONETPATH                     = 0x32
 | 
			
		||||
	IFT_SONETVT                       = 0x33
 | 
			
		||||
	IFT_SRP                           = 0x97
 | 
			
		||||
	IFT_SS7SIGLINK                    = 0x9c
 | 
			
		||||
	IFT_STACKTOSTACK                  = 0x6f
 | 
			
		||||
	IFT_STARLAN                       = 0xb
 | 
			
		||||
	IFT_STF                           = 0xd7
 | 
			
		||||
	IFT_T1                            = 0x12
 | 
			
		||||
	IFT_TDLC                          = 0x74
 | 
			
		||||
	IFT_TERMPAD                       = 0x5b
 | 
			
		||||
	IFT_TR008                         = 0xb0
 | 
			
		||||
	IFT_TRANSPHDLC                    = 0x7b
 | 
			
		||||
	IFT_TUNNEL                        = 0x83
 | 
			
		||||
	IFT_ULTRA                         = 0x1d
 | 
			
		||||
	IFT_USB                           = 0xa0
 | 
			
		||||
	IFT_V11                           = 0x40
 | 
			
		||||
	IFT_V35                           = 0x2d
 | 
			
		||||
	IFT_V36                           = 0x41
 | 
			
		||||
	IFT_V37                           = 0x78
 | 
			
		||||
	IFT_VDSL                          = 0x61
 | 
			
		||||
	IFT_VIRTUALIPADDRESS              = 0x70
 | 
			
		||||
	IFT_VOICEEM                       = 0x64
 | 
			
		||||
	IFT_VOICEENCAP                    = 0x67
 | 
			
		||||
	IFT_VOICEFXO                      = 0x65
 | 
			
		||||
	IFT_VOICEFXS                      = 0x66
 | 
			
		||||
	IFT_VOICEOVERATM                  = 0x98
 | 
			
		||||
	IFT_VOICEOVERFRAMERELAY           = 0x99
 | 
			
		||||
	IFT_VOICEOVERIP                   = 0x68
 | 
			
		||||
	IFT_X213                          = 0x5d
 | 
			
		||||
	IFT_X25                           = 0x5
 | 
			
		||||
	IFT_X25DDN                        = 0x4
 | 
			
		||||
	IFT_X25HUNTGROUP                  = 0x7a
 | 
			
		||||
	IFT_X25MLP                        = 0x79
 | 
			
		||||
	IFT_X25PLE                        = 0x28
 | 
			
		||||
	IFT_XETHER                        = 0x1a
 | 
			
		||||
	IPPROTO_MAXID                     = 0x34
 | 
			
		||||
	IPV6_FAITH                        = 0x1d
 | 
			
		||||
	IPV6_MIN_MEMBERSHIPS              = 0x1f
 | 
			
		||||
	IP_FAITH                          = 0x16
 | 
			
		||||
	IP_MAX_SOURCE_FILTER              = 0x400
 | 
			
		||||
	IP_MIN_MEMBERSHIPS                = 0x1f
 | 
			
		||||
	MAP_NORESERVE                     = 0x40
 | 
			
		||||
	MAP_RENAME                        = 0x20
 | 
			
		||||
	NET_RT_MAXID                      = 0x6
 | 
			
		||||
	RTF_PRCLONING                     = 0x10000
 | 
			
		||||
	RTM_OLDADD                        = 0x9
 | 
			
		||||
	RTM_OLDDEL                        = 0xa
 | 
			
		||||
	RT_CACHING_CONTEXT                = 0x1
 | 
			
		||||
	RT_NORTREF                        = 0x2
 | 
			
		||||
	SIOCADDRT                         = 0x8040720a
 | 
			
		||||
	SIOCALIFADDR                      = 0x8118691b
 | 
			
		||||
	SIOCDELRT                         = 0x8040720b
 | 
			
		||||
	SIOCDLIFADDR                      = 0x8118691d
 | 
			
		||||
	SIOCGLIFADDR                      = 0xc118691c
 | 
			
		||||
	SIOCGLIFPHYADDR                   = 0xc118694b
 | 
			
		||||
	SIOCSLIFPHYADDR                   = 0x8118694a
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										226
									
								
								vendor/golang.org/x/sys/unix/errors_freebsd_arm.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										226
									
								
								vendor/golang.org/x/sys/unix/errors_freebsd_arm.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,226 @@
 | 
			
		||||
// Copyright 2017 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	IFT_1822                          = 0x2
 | 
			
		||||
	IFT_A12MPPSWITCH                  = 0x82
 | 
			
		||||
	IFT_AAL2                          = 0xbb
 | 
			
		||||
	IFT_AAL5                          = 0x31
 | 
			
		||||
	IFT_ADSL                          = 0x5e
 | 
			
		||||
	IFT_AFLANE8023                    = 0x3b
 | 
			
		||||
	IFT_AFLANE8025                    = 0x3c
 | 
			
		||||
	IFT_ARAP                          = 0x58
 | 
			
		||||
	IFT_ARCNET                        = 0x23
 | 
			
		||||
	IFT_ARCNETPLUS                    = 0x24
 | 
			
		||||
	IFT_ASYNC                         = 0x54
 | 
			
		||||
	IFT_ATM                           = 0x25
 | 
			
		||||
	IFT_ATMDXI                        = 0x69
 | 
			
		||||
	IFT_ATMFUNI                       = 0x6a
 | 
			
		||||
	IFT_ATMIMA                        = 0x6b
 | 
			
		||||
	IFT_ATMLOGICAL                    = 0x50
 | 
			
		||||
	IFT_ATMRADIO                      = 0xbd
 | 
			
		||||
	IFT_ATMSUBINTERFACE               = 0x86
 | 
			
		||||
	IFT_ATMVCIENDPT                   = 0xc2
 | 
			
		||||
	IFT_ATMVIRTUAL                    = 0x95
 | 
			
		||||
	IFT_BGPPOLICYACCOUNTING           = 0xa2
 | 
			
		||||
	IFT_BSC                           = 0x53
 | 
			
		||||
	IFT_CCTEMUL                       = 0x3d
 | 
			
		||||
	IFT_CEPT                          = 0x13
 | 
			
		||||
	IFT_CES                           = 0x85
 | 
			
		||||
	IFT_CHANNEL                       = 0x46
 | 
			
		||||
	IFT_CNR                           = 0x55
 | 
			
		||||
	IFT_COFFEE                        = 0x84
 | 
			
		||||
	IFT_COMPOSITELINK                 = 0x9b
 | 
			
		||||
	IFT_DCN                           = 0x8d
 | 
			
		||||
	IFT_DIGITALPOWERLINE              = 0x8a
 | 
			
		||||
	IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba
 | 
			
		||||
	IFT_DLSW                          = 0x4a
 | 
			
		||||
	IFT_DOCSCABLEDOWNSTREAM           = 0x80
 | 
			
		||||
	IFT_DOCSCABLEMACLAYER             = 0x7f
 | 
			
		||||
	IFT_DOCSCABLEUPSTREAM             = 0x81
 | 
			
		||||
	IFT_DS0                           = 0x51
 | 
			
		||||
	IFT_DS0BUNDLE                     = 0x52
 | 
			
		||||
	IFT_DS1FDL                        = 0xaa
 | 
			
		||||
	IFT_DS3                           = 0x1e
 | 
			
		||||
	IFT_DTM                           = 0x8c
 | 
			
		||||
	IFT_DVBASILN                      = 0xac
 | 
			
		||||
	IFT_DVBASIOUT                     = 0xad
 | 
			
		||||
	IFT_DVBRCCDOWNSTREAM              = 0x93
 | 
			
		||||
	IFT_DVBRCCMACLAYER                = 0x92
 | 
			
		||||
	IFT_DVBRCCUPSTREAM                = 0x94
 | 
			
		||||
	IFT_ENC                           = 0xf4
 | 
			
		||||
	IFT_EON                           = 0x19
 | 
			
		||||
	IFT_EPLRS                         = 0x57
 | 
			
		||||
	IFT_ESCON                         = 0x49
 | 
			
		||||
	IFT_ETHER                         = 0x6
 | 
			
		||||
	IFT_FAST                          = 0x7d
 | 
			
		||||
	IFT_FASTETHER                     = 0x3e
 | 
			
		||||
	IFT_FASTETHERFX                   = 0x45
 | 
			
		||||
	IFT_FDDI                          = 0xf
 | 
			
		||||
	IFT_FIBRECHANNEL                  = 0x38
 | 
			
		||||
	IFT_FRAMERELAYINTERCONNECT        = 0x3a
 | 
			
		||||
	IFT_FRAMERELAYMPI                 = 0x5c
 | 
			
		||||
	IFT_FRDLCIENDPT                   = 0xc1
 | 
			
		||||
	IFT_FRELAY                        = 0x20
 | 
			
		||||
	IFT_FRELAYDCE                     = 0x2c
 | 
			
		||||
	IFT_FRF16MFRBUNDLE                = 0xa3
 | 
			
		||||
	IFT_FRFORWARD                     = 0x9e
 | 
			
		||||
	IFT_G703AT2MB                     = 0x43
 | 
			
		||||
	IFT_G703AT64K                     = 0x42
 | 
			
		||||
	IFT_GIF                           = 0xf0
 | 
			
		||||
	IFT_GIGABITETHERNET               = 0x75
 | 
			
		||||
	IFT_GR303IDT                      = 0xb2
 | 
			
		||||
	IFT_GR303RDT                      = 0xb1
 | 
			
		||||
	IFT_H323GATEKEEPER                = 0xa4
 | 
			
		||||
	IFT_H323PROXY                     = 0xa5
 | 
			
		||||
	IFT_HDH1822                       = 0x3
 | 
			
		||||
	IFT_HDLC                          = 0x76
 | 
			
		||||
	IFT_HDSL2                         = 0xa8
 | 
			
		||||
	IFT_HIPERLAN2                     = 0xb7
 | 
			
		||||
	IFT_HIPPI                         = 0x2f
 | 
			
		||||
	IFT_HIPPIINTERFACE                = 0x39
 | 
			
		||||
	IFT_HOSTPAD                       = 0x5a
 | 
			
		||||
	IFT_HSSI                          = 0x2e
 | 
			
		||||
	IFT_HY                            = 0xe
 | 
			
		||||
	IFT_IBM370PARCHAN                 = 0x48
 | 
			
		||||
	IFT_IDSL                          = 0x9a
 | 
			
		||||
	IFT_IEEE80211                     = 0x47
 | 
			
		||||
	IFT_IEEE80212                     = 0x37
 | 
			
		||||
	IFT_IEEE8023ADLAG                 = 0xa1
 | 
			
		||||
	IFT_IFGSN                         = 0x91
 | 
			
		||||
	IFT_IMT                           = 0xbe
 | 
			
		||||
	IFT_INTERLEAVE                    = 0x7c
 | 
			
		||||
	IFT_IP                            = 0x7e
 | 
			
		||||
	IFT_IPFORWARD                     = 0x8e
 | 
			
		||||
	IFT_IPOVERATM                     = 0x72
 | 
			
		||||
	IFT_IPOVERCDLC                    = 0x6d
 | 
			
		||||
	IFT_IPOVERCLAW                    = 0x6e
 | 
			
		||||
	IFT_IPSWITCH                      = 0x4e
 | 
			
		||||
	IFT_ISDN                          = 0x3f
 | 
			
		||||
	IFT_ISDNBASIC                     = 0x14
 | 
			
		||||
	IFT_ISDNPRIMARY                   = 0x15
 | 
			
		||||
	IFT_ISDNS                         = 0x4b
 | 
			
		||||
	IFT_ISDNU                         = 0x4c
 | 
			
		||||
	IFT_ISO88022LLC                   = 0x29
 | 
			
		||||
	IFT_ISO88023                      = 0x7
 | 
			
		||||
	IFT_ISO88024                      = 0x8
 | 
			
		||||
	IFT_ISO88025                      = 0x9
 | 
			
		||||
	IFT_ISO88025CRFPINT               = 0x62
 | 
			
		||||
	IFT_ISO88025DTR                   = 0x56
 | 
			
		||||
	IFT_ISO88025FIBER                 = 0x73
 | 
			
		||||
	IFT_ISO88026                      = 0xa
 | 
			
		||||
	IFT_ISUP                          = 0xb3
 | 
			
		||||
	IFT_L3IPXVLAN                     = 0x89
 | 
			
		||||
	IFT_LAPB                          = 0x10
 | 
			
		||||
	IFT_LAPD                          = 0x4d
 | 
			
		||||
	IFT_LAPF                          = 0x77
 | 
			
		||||
	IFT_LOCALTALK                     = 0x2a
 | 
			
		||||
	IFT_LOOP                          = 0x18
 | 
			
		||||
	IFT_MEDIAMAILOVERIP               = 0x8b
 | 
			
		||||
	IFT_MFSIGLINK                     = 0xa7
 | 
			
		||||
	IFT_MIOX25                        = 0x26
 | 
			
		||||
	IFT_MODEM                         = 0x30
 | 
			
		||||
	IFT_MPC                           = 0x71
 | 
			
		||||
	IFT_MPLS                          = 0xa6
 | 
			
		||||
	IFT_MPLSTUNNEL                    = 0x96
 | 
			
		||||
	IFT_MSDSL                         = 0x8f
 | 
			
		||||
	IFT_MVL                           = 0xbf
 | 
			
		||||
	IFT_MYRINET                       = 0x63
 | 
			
		||||
	IFT_NFAS                          = 0xaf
 | 
			
		||||
	IFT_NSIP                          = 0x1b
 | 
			
		||||
	IFT_OPTICALCHANNEL                = 0xc3
 | 
			
		||||
	IFT_OPTICALTRANSPORT              = 0xc4
 | 
			
		||||
	IFT_OTHER                         = 0x1
 | 
			
		||||
	IFT_P10                           = 0xc
 | 
			
		||||
	IFT_P80                           = 0xd
 | 
			
		||||
	IFT_PARA                          = 0x22
 | 
			
		||||
	IFT_PFLOG                         = 0xf6
 | 
			
		||||
	IFT_PFSYNC                        = 0xf7
 | 
			
		||||
	IFT_PLC                           = 0xae
 | 
			
		||||
	IFT_POS                           = 0xab
 | 
			
		||||
	IFT_PPPMULTILINKBUNDLE            = 0x6c
 | 
			
		||||
	IFT_PROPBWAP2MP                   = 0xb8
 | 
			
		||||
	IFT_PROPCNLS                      = 0x59
 | 
			
		||||
	IFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5
 | 
			
		||||
	IFT_PROPDOCSWIRELESSMACLAYER      = 0xb4
 | 
			
		||||
	IFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6
 | 
			
		||||
	IFT_PROPMUX                       = 0x36
 | 
			
		||||
	IFT_PROPWIRELESSP2P               = 0x9d
 | 
			
		||||
	IFT_PTPSERIAL                     = 0x16
 | 
			
		||||
	IFT_PVC                           = 0xf1
 | 
			
		||||
	IFT_QLLC                          = 0x44
 | 
			
		||||
	IFT_RADIOMAC                      = 0xbc
 | 
			
		||||
	IFT_RADSL                         = 0x5f
 | 
			
		||||
	IFT_REACHDSL                      = 0xc0
 | 
			
		||||
	IFT_RFC1483                       = 0x9f
 | 
			
		||||
	IFT_RS232                         = 0x21
 | 
			
		||||
	IFT_RSRB                          = 0x4f
 | 
			
		||||
	IFT_SDLC                          = 0x11
 | 
			
		||||
	IFT_SDSL                          = 0x60
 | 
			
		||||
	IFT_SHDSL                         = 0xa9
 | 
			
		||||
	IFT_SIP                           = 0x1f
 | 
			
		||||
	IFT_SLIP                          = 0x1c
 | 
			
		||||
	IFT_SMDSDXI                       = 0x2b
 | 
			
		||||
	IFT_SMDSICIP                      = 0x34
 | 
			
		||||
	IFT_SONET                         = 0x27
 | 
			
		||||
	IFT_SONETOVERHEADCHANNEL          = 0xb9
 | 
			
		||||
	IFT_SONETPATH                     = 0x32
 | 
			
		||||
	IFT_SONETVT                       = 0x33
 | 
			
		||||
	IFT_SRP                           = 0x97
 | 
			
		||||
	IFT_SS7SIGLINK                    = 0x9c
 | 
			
		||||
	IFT_STACKTOSTACK                  = 0x6f
 | 
			
		||||
	IFT_STARLAN                       = 0xb
 | 
			
		||||
	IFT_STF                           = 0xd7
 | 
			
		||||
	IFT_T1                            = 0x12
 | 
			
		||||
	IFT_TDLC                          = 0x74
 | 
			
		||||
	IFT_TERMPAD                       = 0x5b
 | 
			
		||||
	IFT_TR008                         = 0xb0
 | 
			
		||||
	IFT_TRANSPHDLC                    = 0x7b
 | 
			
		||||
	IFT_TUNNEL                        = 0x83
 | 
			
		||||
	IFT_ULTRA                         = 0x1d
 | 
			
		||||
	IFT_USB                           = 0xa0
 | 
			
		||||
	IFT_V11                           = 0x40
 | 
			
		||||
	IFT_V35                           = 0x2d
 | 
			
		||||
	IFT_V36                           = 0x41
 | 
			
		||||
	IFT_V37                           = 0x78
 | 
			
		||||
	IFT_VDSL                          = 0x61
 | 
			
		||||
	IFT_VIRTUALIPADDRESS              = 0x70
 | 
			
		||||
	IFT_VOICEEM                       = 0x64
 | 
			
		||||
	IFT_VOICEENCAP                    = 0x67
 | 
			
		||||
	IFT_VOICEFXO                      = 0x65
 | 
			
		||||
	IFT_VOICEFXS                      = 0x66
 | 
			
		||||
	IFT_VOICEOVERATM                  = 0x98
 | 
			
		||||
	IFT_VOICEOVERFRAMERELAY           = 0x99
 | 
			
		||||
	IFT_VOICEOVERIP                   = 0x68
 | 
			
		||||
	IFT_X213                          = 0x5d
 | 
			
		||||
	IFT_X25                           = 0x5
 | 
			
		||||
	IFT_X25DDN                        = 0x4
 | 
			
		||||
	IFT_X25HUNTGROUP                  = 0x7a
 | 
			
		||||
	IFT_X25MLP                        = 0x79
 | 
			
		||||
	IFT_X25PLE                        = 0x28
 | 
			
		||||
	IFT_XETHER                        = 0x1a
 | 
			
		||||
 | 
			
		||||
	// missing constants on FreeBSD-11.1-RELEASE, copied from old values in ztypes_freebsd_arm.go
 | 
			
		||||
	IFF_SMART       = 0x20
 | 
			
		||||
	IFT_FAITH       = 0xf2
 | 
			
		||||
	IFT_IPXIP       = 0xf9
 | 
			
		||||
	IPPROTO_MAXID   = 0x34
 | 
			
		||||
	IPV6_FAITH      = 0x1d
 | 
			
		||||
	IP_FAITH        = 0x16
 | 
			
		||||
	MAP_NORESERVE   = 0x40
 | 
			
		||||
	MAP_RENAME      = 0x20
 | 
			
		||||
	NET_RT_MAXID    = 0x6
 | 
			
		||||
	RTF_PRCLONING   = 0x10000
 | 
			
		||||
	RTM_OLDADD      = 0x9
 | 
			
		||||
	RTM_OLDDEL      = 0xa
 | 
			
		||||
	SIOCADDRT       = 0x8030720a
 | 
			
		||||
	SIOCALIFADDR    = 0x8118691b
 | 
			
		||||
	SIOCDELRT       = 0x8030720b
 | 
			
		||||
	SIOCDLIFADDR    = 0x8118691d
 | 
			
		||||
	SIOCGLIFADDR    = 0xc118691c
 | 
			
		||||
	SIOCGLIFPHYADDR = 0xc118694b
 | 
			
		||||
	SIOCSLIFPHYADDR = 0x8118694a
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										17
									
								
								vendor/golang.org/x/sys/unix/errors_freebsd_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								vendor/golang.org/x/sys/unix/errors_freebsd_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
// Copyright 2020 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
// Constants that were deprecated or moved to enums in the FreeBSD headers. Keep
 | 
			
		||||
// them here for backwards compatibility.
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	DLT_HHDLC            = 0x79
 | 
			
		||||
	IPV6_MIN_MEMBERSHIPS = 0x1f
 | 
			
		||||
	IP_MAX_SOURCE_FILTER = 0x400
 | 
			
		||||
	IP_MIN_MEMBERSHIPS   = 0x1f
 | 
			
		||||
	RT_CACHING_CONTEXT   = 0x1
 | 
			
		||||
	RT_NORTREF           = 0x2
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										37
									
								
								vendor/golang.org/x/sys/unix/fcntl.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								vendor/golang.org/x/sys/unix/fcntl.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
// Copyright 2014 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build dragonfly || freebsd || linux || netbsd || openbsd
 | 
			
		||||
// +build dragonfly freebsd linux netbsd openbsd
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import "unsafe"
 | 
			
		||||
 | 
			
		||||
// fcntl64Syscall is usually SYS_FCNTL, but is overridden on 32-bit Linux
 | 
			
		||||
// systems by fcntl_linux_32bit.go to be SYS_FCNTL64.
 | 
			
		||||
var fcntl64Syscall uintptr = SYS_FCNTL
 | 
			
		||||
 | 
			
		||||
func fcntl(fd int, cmd, arg int) (int, error) {
 | 
			
		||||
	valptr, _, errno := Syscall(fcntl64Syscall, uintptr(fd), uintptr(cmd), uintptr(arg))
 | 
			
		||||
	var err error
 | 
			
		||||
	if errno != 0 {
 | 
			
		||||
		err = errno
 | 
			
		||||
	}
 | 
			
		||||
	return int(valptr), err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FcntlInt performs a fcntl syscall on fd with the provided command and argument.
 | 
			
		||||
func FcntlInt(fd uintptr, cmd, arg int) (int, error) {
 | 
			
		||||
	return fcntl(int(fd), cmd, arg)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.
 | 
			
		||||
func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {
 | 
			
		||||
	_, _, errno := Syscall(fcntl64Syscall, fd, uintptr(cmd), uintptr(unsafe.Pointer(lk)))
 | 
			
		||||
	if errno == 0 {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	return errno
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										24
									
								
								vendor/golang.org/x/sys/unix/fcntl_darwin.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								vendor/golang.org/x/sys/unix/fcntl_darwin.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
// Copyright 2019 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import "unsafe"
 | 
			
		||||
 | 
			
		||||
// FcntlInt performs a fcntl syscall on fd with the provided command and argument.
 | 
			
		||||
func FcntlInt(fd uintptr, cmd, arg int) (int, error) {
 | 
			
		||||
	return fcntl(int(fd), cmd, arg)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.
 | 
			
		||||
func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {
 | 
			
		||||
	_, err := fcntl(int(fd), cmd, int(uintptr(unsafe.Pointer(lk))))
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FcntlFstore performs a fcntl syscall for the F_PREALLOCATE command.
 | 
			
		||||
func FcntlFstore(fd uintptr, cmd int, fstore *Fstore_t) error {
 | 
			
		||||
	_, err := fcntl(int(fd), cmd, int(uintptr(unsafe.Pointer(fstore))))
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
// Copyright 2014 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build (linux && 386) || (linux && arm) || (linux && mips) || (linux && mipsle) || (linux && ppc)
 | 
			
		||||
// +build linux,386 linux,arm linux,mips linux,mipsle linux,ppc
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	// On 32-bit Linux systems, the fcntl syscall that matches Go's
 | 
			
		||||
	// Flock_t type is SYS_FCNTL64, not SYS_FCNTL.
 | 
			
		||||
	fcntl64Syscall = SYS_FCNTL64
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										30
									
								
								vendor/golang.org/x/sys/unix/fdset.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								vendor/golang.org/x/sys/unix/fdset.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
// Copyright 2019 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos
 | 
			
		||||
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
// Set adds fd to the set fds.
 | 
			
		||||
func (fds *FdSet) Set(fd int) {
 | 
			
		||||
	fds.Bits[fd/NFDBITS] |= (1 << (uintptr(fd) % NFDBITS))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Clear removes fd from the set fds.
 | 
			
		||||
func (fds *FdSet) Clear(fd int) {
 | 
			
		||||
	fds.Bits[fd/NFDBITS] &^= (1 << (uintptr(fd) % NFDBITS))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsSet returns whether fd is in the set fds.
 | 
			
		||||
func (fds *FdSet) IsSet(fd int) bool {
 | 
			
		||||
	return fds.Bits[fd/NFDBITS]&(1<<(uintptr(fd)%NFDBITS)) != 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Zero clears the set fds.
 | 
			
		||||
func (fds *FdSet) Zero() {
 | 
			
		||||
	for i := range fds.Bits {
 | 
			
		||||
		fds.Bits[i] = 0
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										164
									
								
								vendor/golang.org/x/sys/unix/fstatfs_zos.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										164
									
								
								vendor/golang.org/x/sys/unix/fstatfs_zos.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,164 @@
 | 
			
		||||
// Copyright 2020 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build zos && s390x
 | 
			
		||||
// +build zos,s390x
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// This file simulates fstatfs on z/OS using fstatvfs and w_getmntent.
 | 
			
		||||
 | 
			
		||||
func Fstatfs(fd int, stat *Statfs_t) (err error) {
 | 
			
		||||
	var stat_v Statvfs_t
 | 
			
		||||
	err = Fstatvfs(fd, &stat_v)
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		// populate stat
 | 
			
		||||
		stat.Type = 0
 | 
			
		||||
		stat.Bsize = stat_v.Bsize
 | 
			
		||||
		stat.Blocks = stat_v.Blocks
 | 
			
		||||
		stat.Bfree = stat_v.Bfree
 | 
			
		||||
		stat.Bavail = stat_v.Bavail
 | 
			
		||||
		stat.Files = stat_v.Files
 | 
			
		||||
		stat.Ffree = stat_v.Ffree
 | 
			
		||||
		stat.Fsid = stat_v.Fsid
 | 
			
		||||
		stat.Namelen = stat_v.Namemax
 | 
			
		||||
		stat.Frsize = stat_v.Frsize
 | 
			
		||||
		stat.Flags = stat_v.Flag
 | 
			
		||||
		for passn := 0; passn < 5; passn++ {
 | 
			
		||||
			switch passn {
 | 
			
		||||
			case 0:
 | 
			
		||||
				err = tryGetmntent64(stat)
 | 
			
		||||
				break
 | 
			
		||||
			case 1:
 | 
			
		||||
				err = tryGetmntent128(stat)
 | 
			
		||||
				break
 | 
			
		||||
			case 2:
 | 
			
		||||
				err = tryGetmntent256(stat)
 | 
			
		||||
				break
 | 
			
		||||
			case 3:
 | 
			
		||||
				err = tryGetmntent512(stat)
 | 
			
		||||
				break
 | 
			
		||||
			case 4:
 | 
			
		||||
				err = tryGetmntent1024(stat)
 | 
			
		||||
				break
 | 
			
		||||
			default:
 | 
			
		||||
				break
 | 
			
		||||
			}
 | 
			
		||||
			//proceed to return if: err is nil (found), err is nonnil but not ERANGE (another error occurred)
 | 
			
		||||
			if err == nil || err != nil && err != ERANGE {
 | 
			
		||||
				break
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func tryGetmntent64(stat *Statfs_t) (err error) {
 | 
			
		||||
	var mnt_ent_buffer struct {
 | 
			
		||||
		header       W_Mnth
 | 
			
		||||
		filesys_info [64]W_Mntent
 | 
			
		||||
	}
 | 
			
		||||
	var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer))
 | 
			
		||||
	fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	err = ERANGE //return ERANGE if no match is found in this batch
 | 
			
		||||
	for i := 0; i < fs_count; i++ {
 | 
			
		||||
		if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) {
 | 
			
		||||
			stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0])
 | 
			
		||||
			err = nil
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func tryGetmntent128(stat *Statfs_t) (err error) {
 | 
			
		||||
	var mnt_ent_buffer struct {
 | 
			
		||||
		header       W_Mnth
 | 
			
		||||
		filesys_info [128]W_Mntent
 | 
			
		||||
	}
 | 
			
		||||
	var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer))
 | 
			
		||||
	fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	err = ERANGE //return ERANGE if no match is found in this batch
 | 
			
		||||
	for i := 0; i < fs_count; i++ {
 | 
			
		||||
		if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) {
 | 
			
		||||
			stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0])
 | 
			
		||||
			err = nil
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func tryGetmntent256(stat *Statfs_t) (err error) {
 | 
			
		||||
	var mnt_ent_buffer struct {
 | 
			
		||||
		header       W_Mnth
 | 
			
		||||
		filesys_info [256]W_Mntent
 | 
			
		||||
	}
 | 
			
		||||
	var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer))
 | 
			
		||||
	fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	err = ERANGE //return ERANGE if no match is found in this batch
 | 
			
		||||
	for i := 0; i < fs_count; i++ {
 | 
			
		||||
		if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) {
 | 
			
		||||
			stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0])
 | 
			
		||||
			err = nil
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func tryGetmntent512(stat *Statfs_t) (err error) {
 | 
			
		||||
	var mnt_ent_buffer struct {
 | 
			
		||||
		header       W_Mnth
 | 
			
		||||
		filesys_info [512]W_Mntent
 | 
			
		||||
	}
 | 
			
		||||
	var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer))
 | 
			
		||||
	fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	err = ERANGE //return ERANGE if no match is found in this batch
 | 
			
		||||
	for i := 0; i < fs_count; i++ {
 | 
			
		||||
		if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) {
 | 
			
		||||
			stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0])
 | 
			
		||||
			err = nil
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func tryGetmntent1024(stat *Statfs_t) (err error) {
 | 
			
		||||
	var mnt_ent_buffer struct {
 | 
			
		||||
		header       W_Mnth
 | 
			
		||||
		filesys_info [1024]W_Mntent
 | 
			
		||||
	}
 | 
			
		||||
	var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer))
 | 
			
		||||
	fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	err = ERANGE //return ERANGE if no match is found in this batch
 | 
			
		||||
	for i := 0; i < fs_count; i++ {
 | 
			
		||||
		if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) {
 | 
			
		||||
			stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0])
 | 
			
		||||
			err = nil
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										60
									
								
								vendor/golang.org/x/sys/unix/gccgo.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								vendor/golang.org/x/sys/unix/gccgo.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
			
		||||
// Copyright 2015 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build gccgo && !aix
 | 
			
		||||
// +build gccgo,!aix
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import "syscall"
 | 
			
		||||
 | 
			
		||||
// We can't use the gc-syntax .s files for gccgo. On the plus side
 | 
			
		||||
// much of the functionality can be written directly in Go.
 | 
			
		||||
 | 
			
		||||
func realSyscallNoError(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r uintptr)
 | 
			
		||||
 | 
			
		||||
func realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r, errno uintptr)
 | 
			
		||||
 | 
			
		||||
func SyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) {
 | 
			
		||||
	syscall.Entersyscall()
 | 
			
		||||
	r := realSyscallNoError(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)
 | 
			
		||||
	syscall.Exitsyscall()
 | 
			
		||||
	return r, 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {
 | 
			
		||||
	syscall.Entersyscall()
 | 
			
		||||
	r, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)
 | 
			
		||||
	syscall.Exitsyscall()
 | 
			
		||||
	return r, 0, syscall.Errno(errno)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {
 | 
			
		||||
	syscall.Entersyscall()
 | 
			
		||||
	r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0)
 | 
			
		||||
	syscall.Exitsyscall()
 | 
			
		||||
	return r, 0, syscall.Errno(errno)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) {
 | 
			
		||||
	syscall.Entersyscall()
 | 
			
		||||
	r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9)
 | 
			
		||||
	syscall.Exitsyscall()
 | 
			
		||||
	return r, 0, syscall.Errno(errno)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func RawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) {
 | 
			
		||||
	r := realSyscallNoError(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)
 | 
			
		||||
	return r, 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {
 | 
			
		||||
	r, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)
 | 
			
		||||
	return r, 0, syscall.Errno(errno)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {
 | 
			
		||||
	r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0)
 | 
			
		||||
	return r, 0, syscall.Errno(errno)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										45
									
								
								vendor/golang.org/x/sys/unix/gccgo_c.c
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								vendor/golang.org/x/sys/unix/gccgo_c.c
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
// Copyright 2015 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
// +build gccgo
 | 
			
		||||
// +build !aix
 | 
			
		||||
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
 | 
			
		||||
#define _STRINGIFY2_(x) #x
 | 
			
		||||
#define _STRINGIFY_(x) _STRINGIFY2_(x)
 | 
			
		||||
#define GOSYM_PREFIX _STRINGIFY_(__USER_LABEL_PREFIX__)
 | 
			
		||||
 | 
			
		||||
// Call syscall from C code because the gccgo support for calling from
 | 
			
		||||
// Go to C does not support varargs functions.
 | 
			
		||||
 | 
			
		||||
struct ret {
 | 
			
		||||
	uintptr_t r;
 | 
			
		||||
	uintptr_t err;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct ret gccgoRealSyscall(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9)
 | 
			
		||||
  __asm__(GOSYM_PREFIX GOPKGPATH ".realSyscall");
 | 
			
		||||
 | 
			
		||||
struct ret
 | 
			
		||||
gccgoRealSyscall(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9)
 | 
			
		||||
{
 | 
			
		||||
	struct ret r;
 | 
			
		||||
 | 
			
		||||
	errno = 0;
 | 
			
		||||
	r.r = syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9);
 | 
			
		||||
	r.err = errno;
 | 
			
		||||
	return r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uintptr_t gccgoRealSyscallNoError(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9)
 | 
			
		||||
  __asm__(GOSYM_PREFIX GOPKGPATH ".realSyscallNoError");
 | 
			
		||||
 | 
			
		||||
uintptr_t
 | 
			
		||||
gccgoRealSyscallNoError(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9)
 | 
			
		||||
{
 | 
			
		||||
	return syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										21
									
								
								vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
// Copyright 2015 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build gccgo && linux && amd64
 | 
			
		||||
// +build gccgo,linux,amd64
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import "syscall"
 | 
			
		||||
 | 
			
		||||
//extern gettimeofday
 | 
			
		||||
func realGettimeofday(*Timeval, *byte) int32
 | 
			
		||||
 | 
			
		||||
func gettimeofday(tv *Timeval) (err syscall.Errno) {
 | 
			
		||||
	r := realGettimeofday(tv, nil)
 | 
			
		||||
	if r < 0 {
 | 
			
		||||
		return syscall.GetErrno()
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										75
									
								
								vendor/golang.org/x/sys/unix/ioctl.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								vendor/golang.org/x/sys/unix/ioctl.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,75 @@
 | 
			
		||||
// Copyright 2018 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris
 | 
			
		||||
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"runtime"
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// ioctl itself should not be exposed directly, but additional get/set
 | 
			
		||||
// functions for specific types are permissible.
 | 
			
		||||
 | 
			
		||||
// IoctlSetInt performs an ioctl operation which sets an integer value
 | 
			
		||||
// on fd, using the specified request number.
 | 
			
		||||
func IoctlSetInt(fd int, req uint, value int) error {
 | 
			
		||||
	return ioctl(fd, req, uintptr(value))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IoctlSetPointerInt performs an ioctl operation which sets an
 | 
			
		||||
// integer value on fd, using the specified request number. The ioctl
 | 
			
		||||
// argument is called with a pointer to the integer value, rather than
 | 
			
		||||
// passing the integer value directly.
 | 
			
		||||
func IoctlSetPointerInt(fd int, req uint, value int) error {
 | 
			
		||||
	v := int32(value)
 | 
			
		||||
	return ioctl(fd, req, uintptr(unsafe.Pointer(&v)))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IoctlSetWinsize performs an ioctl on fd with a *Winsize argument.
 | 
			
		||||
//
 | 
			
		||||
// To change fd's window size, the req argument should be TIOCSWINSZ.
 | 
			
		||||
func IoctlSetWinsize(fd int, req uint, value *Winsize) error {
 | 
			
		||||
	// TODO: if we get the chance, remove the req parameter and
 | 
			
		||||
	// hardcode TIOCSWINSZ.
 | 
			
		||||
	err := ioctl(fd, req, uintptr(unsafe.Pointer(value)))
 | 
			
		||||
	runtime.KeepAlive(value)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IoctlSetTermios performs an ioctl on fd with a *Termios.
 | 
			
		||||
//
 | 
			
		||||
// The req value will usually be TCSETA or TIOCSETA.
 | 
			
		||||
func IoctlSetTermios(fd int, req uint, value *Termios) error {
 | 
			
		||||
	// TODO: if we get the chance, remove the req parameter.
 | 
			
		||||
	err := ioctl(fd, req, uintptr(unsafe.Pointer(value)))
 | 
			
		||||
	runtime.KeepAlive(value)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IoctlGetInt performs an ioctl operation which gets an integer value
 | 
			
		||||
// from fd, using the specified request number.
 | 
			
		||||
//
 | 
			
		||||
// A few ioctl requests use the return value as an output parameter;
 | 
			
		||||
// for those, IoctlRetInt should be used instead of this function.
 | 
			
		||||
func IoctlGetInt(fd int, req uint) (int, error) {
 | 
			
		||||
	var value int
 | 
			
		||||
	err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
 | 
			
		||||
	return value, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func IoctlGetWinsize(fd int, req uint) (*Winsize, error) {
 | 
			
		||||
	var value Winsize
 | 
			
		||||
	err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
 | 
			
		||||
	return &value, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func IoctlGetTermios(fd int, req uint) (*Termios, error) {
 | 
			
		||||
	var value Termios
 | 
			
		||||
	err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
 | 
			
		||||
	return &value, err
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										196
									
								
								vendor/golang.org/x/sys/unix/ioctl_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										196
									
								
								vendor/golang.org/x/sys/unix/ioctl_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,196 @@
 | 
			
		||||
// Copyright 2021 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"runtime"
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// IoctlRetInt performs an ioctl operation specified by req on a device
 | 
			
		||||
// associated with opened file descriptor fd, and returns a non-negative
 | 
			
		||||
// integer that is returned by the ioctl syscall.
 | 
			
		||||
func IoctlRetInt(fd int, req uint) (int, error) {
 | 
			
		||||
	ret, _, err := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), 0)
 | 
			
		||||
	if err != 0 {
 | 
			
		||||
		return 0, err
 | 
			
		||||
	}
 | 
			
		||||
	return int(ret), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func IoctlGetUint32(fd int, req uint) (uint32, error) {
 | 
			
		||||
	var value uint32
 | 
			
		||||
	err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
 | 
			
		||||
	return value, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func IoctlGetRTCTime(fd int) (*RTCTime, error) {
 | 
			
		||||
	var value RTCTime
 | 
			
		||||
	err := ioctl(fd, RTC_RD_TIME, uintptr(unsafe.Pointer(&value)))
 | 
			
		||||
	return &value, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func IoctlSetRTCTime(fd int, value *RTCTime) error {
 | 
			
		||||
	err := ioctl(fd, RTC_SET_TIME, uintptr(unsafe.Pointer(value)))
 | 
			
		||||
	runtime.KeepAlive(value)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func IoctlGetRTCWkAlrm(fd int) (*RTCWkAlrm, error) {
 | 
			
		||||
	var value RTCWkAlrm
 | 
			
		||||
	err := ioctl(fd, RTC_WKALM_RD, uintptr(unsafe.Pointer(&value)))
 | 
			
		||||
	return &value, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func IoctlSetRTCWkAlrm(fd int, value *RTCWkAlrm) error {
 | 
			
		||||
	err := ioctl(fd, RTC_WKALM_SET, uintptr(unsafe.Pointer(value)))
 | 
			
		||||
	runtime.KeepAlive(value)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ifreqEthtool struct {
 | 
			
		||||
	name [IFNAMSIZ]byte
 | 
			
		||||
	data unsafe.Pointer
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IoctlGetEthtoolDrvinfo fetches ethtool driver information for the network
 | 
			
		||||
// device specified by ifname.
 | 
			
		||||
func IoctlGetEthtoolDrvinfo(fd int, ifname string) (*EthtoolDrvinfo, error) {
 | 
			
		||||
	// Leave room for terminating NULL byte.
 | 
			
		||||
	if len(ifname) >= IFNAMSIZ {
 | 
			
		||||
		return nil, EINVAL
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	value := EthtoolDrvinfo{
 | 
			
		||||
		Cmd: ETHTOOL_GDRVINFO,
 | 
			
		||||
	}
 | 
			
		||||
	ifreq := ifreqEthtool{
 | 
			
		||||
		data: unsafe.Pointer(&value),
 | 
			
		||||
	}
 | 
			
		||||
	copy(ifreq.name[:], ifname)
 | 
			
		||||
	err := ioctl(fd, SIOCETHTOOL, uintptr(unsafe.Pointer(&ifreq)))
 | 
			
		||||
	runtime.KeepAlive(ifreq)
 | 
			
		||||
	return &value, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IoctlGetWatchdogInfo fetches information about a watchdog device from the
 | 
			
		||||
// Linux watchdog API. For more information, see:
 | 
			
		||||
// https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html.
 | 
			
		||||
func IoctlGetWatchdogInfo(fd int) (*WatchdogInfo, error) {
 | 
			
		||||
	var value WatchdogInfo
 | 
			
		||||
	err := ioctl(fd, WDIOC_GETSUPPORT, uintptr(unsafe.Pointer(&value)))
 | 
			
		||||
	return &value, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IoctlWatchdogKeepalive issues a keepalive ioctl to a watchdog device. For
 | 
			
		||||
// more information, see:
 | 
			
		||||
// https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html.
 | 
			
		||||
func IoctlWatchdogKeepalive(fd int) error {
 | 
			
		||||
	return ioctl(fd, WDIOC_KEEPALIVE, 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IoctlFileCloneRange performs an FICLONERANGE ioctl operation to clone the
 | 
			
		||||
// range of data conveyed in value to the file associated with the file
 | 
			
		||||
// descriptor destFd. See the ioctl_ficlonerange(2) man page for details.
 | 
			
		||||
func IoctlFileCloneRange(destFd int, value *FileCloneRange) error {
 | 
			
		||||
	err := ioctl(destFd, FICLONERANGE, uintptr(unsafe.Pointer(value)))
 | 
			
		||||
	runtime.KeepAlive(value)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IoctlFileClone performs an FICLONE ioctl operation to clone the entire file
 | 
			
		||||
// associated with the file description srcFd to the file associated with the
 | 
			
		||||
// file descriptor destFd. See the ioctl_ficlone(2) man page for details.
 | 
			
		||||
func IoctlFileClone(destFd, srcFd int) error {
 | 
			
		||||
	return ioctl(destFd, FICLONE, uintptr(srcFd))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type FileDedupeRange struct {
 | 
			
		||||
	Src_offset uint64
 | 
			
		||||
	Src_length uint64
 | 
			
		||||
	Reserved1  uint16
 | 
			
		||||
	Reserved2  uint32
 | 
			
		||||
	Info       []FileDedupeRangeInfo
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type FileDedupeRangeInfo struct {
 | 
			
		||||
	Dest_fd       int64
 | 
			
		||||
	Dest_offset   uint64
 | 
			
		||||
	Bytes_deduped uint64
 | 
			
		||||
	Status        int32
 | 
			
		||||
	Reserved      uint32
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IoctlFileDedupeRange performs an FIDEDUPERANGE ioctl operation to share the
 | 
			
		||||
// range of data conveyed in value from the file associated with the file
 | 
			
		||||
// descriptor srcFd to the value.Info destinations. See the
 | 
			
		||||
// ioctl_fideduperange(2) man page for details.
 | 
			
		||||
func IoctlFileDedupeRange(srcFd int, value *FileDedupeRange) error {
 | 
			
		||||
	buf := make([]byte, SizeofRawFileDedupeRange+
 | 
			
		||||
		len(value.Info)*SizeofRawFileDedupeRangeInfo)
 | 
			
		||||
	rawrange := (*RawFileDedupeRange)(unsafe.Pointer(&buf[0]))
 | 
			
		||||
	rawrange.Src_offset = value.Src_offset
 | 
			
		||||
	rawrange.Src_length = value.Src_length
 | 
			
		||||
	rawrange.Dest_count = uint16(len(value.Info))
 | 
			
		||||
	rawrange.Reserved1 = value.Reserved1
 | 
			
		||||
	rawrange.Reserved2 = value.Reserved2
 | 
			
		||||
 | 
			
		||||
	for i := range value.Info {
 | 
			
		||||
		rawinfo := (*RawFileDedupeRangeInfo)(unsafe.Pointer(
 | 
			
		||||
			uintptr(unsafe.Pointer(&buf[0])) + uintptr(SizeofRawFileDedupeRange) +
 | 
			
		||||
				uintptr(i*SizeofRawFileDedupeRangeInfo)))
 | 
			
		||||
		rawinfo.Dest_fd = value.Info[i].Dest_fd
 | 
			
		||||
		rawinfo.Dest_offset = value.Info[i].Dest_offset
 | 
			
		||||
		rawinfo.Bytes_deduped = value.Info[i].Bytes_deduped
 | 
			
		||||
		rawinfo.Status = value.Info[i].Status
 | 
			
		||||
		rawinfo.Reserved = value.Info[i].Reserved
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err := ioctl(srcFd, FIDEDUPERANGE, uintptr(unsafe.Pointer(&buf[0])))
 | 
			
		||||
 | 
			
		||||
	// Output
 | 
			
		||||
	for i := range value.Info {
 | 
			
		||||
		rawinfo := (*RawFileDedupeRangeInfo)(unsafe.Pointer(
 | 
			
		||||
			uintptr(unsafe.Pointer(&buf[0])) + uintptr(SizeofRawFileDedupeRange) +
 | 
			
		||||
				uintptr(i*SizeofRawFileDedupeRangeInfo)))
 | 
			
		||||
		value.Info[i].Dest_fd = rawinfo.Dest_fd
 | 
			
		||||
		value.Info[i].Dest_offset = rawinfo.Dest_offset
 | 
			
		||||
		value.Info[i].Bytes_deduped = rawinfo.Bytes_deduped
 | 
			
		||||
		value.Info[i].Status = rawinfo.Status
 | 
			
		||||
		value.Info[i].Reserved = rawinfo.Reserved
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func IoctlHIDGetDesc(fd int, value *HIDRawReportDescriptor) error {
 | 
			
		||||
	err := ioctl(fd, HIDIOCGRDESC, uintptr(unsafe.Pointer(value)))
 | 
			
		||||
	runtime.KeepAlive(value)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func IoctlHIDGetRawInfo(fd int) (*HIDRawDevInfo, error) {
 | 
			
		||||
	var value HIDRawDevInfo
 | 
			
		||||
	err := ioctl(fd, HIDIOCGRAWINFO, uintptr(unsafe.Pointer(&value)))
 | 
			
		||||
	return &value, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func IoctlHIDGetRawName(fd int) (string, error) {
 | 
			
		||||
	var value [_HIDIOCGRAWNAME_LEN]byte
 | 
			
		||||
	err := ioctl(fd, _HIDIOCGRAWNAME, uintptr(unsafe.Pointer(&value[0])))
 | 
			
		||||
	return ByteSliceToString(value[:]), err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func IoctlHIDGetRawPhys(fd int) (string, error) {
 | 
			
		||||
	var value [_HIDIOCGRAWPHYS_LEN]byte
 | 
			
		||||
	err := ioctl(fd, _HIDIOCGRAWPHYS, uintptr(unsafe.Pointer(&value[0])))
 | 
			
		||||
	return ByteSliceToString(value[:]), err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func IoctlHIDGetRawUniq(fd int) (string, error) {
 | 
			
		||||
	var value [_HIDIOCGRAWUNIQ_LEN]byte
 | 
			
		||||
	err := ioctl(fd, _HIDIOCGRAWUNIQ, uintptr(unsafe.Pointer(&value[0])))
 | 
			
		||||
	return ByteSliceToString(value[:]), err
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										74
									
								
								vendor/golang.org/x/sys/unix/ioctl_zos.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								vendor/golang.org/x/sys/unix/ioctl_zos.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,74 @@
 | 
			
		||||
// Copyright 2020 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build zos && s390x
 | 
			
		||||
// +build zos,s390x
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"runtime"
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// ioctl itself should not be exposed directly, but additional get/set
 | 
			
		||||
// functions for specific types are permissible.
 | 
			
		||||
 | 
			
		||||
// IoctlSetInt performs an ioctl operation which sets an integer value
 | 
			
		||||
// on fd, using the specified request number.
 | 
			
		||||
func IoctlSetInt(fd int, req uint, value int) error {
 | 
			
		||||
	return ioctl(fd, req, uintptr(value))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IoctlSetWinsize performs an ioctl on fd with a *Winsize argument.
 | 
			
		||||
//
 | 
			
		||||
// To change fd's window size, the req argument should be TIOCSWINSZ.
 | 
			
		||||
func IoctlSetWinsize(fd int, req uint, value *Winsize) error {
 | 
			
		||||
	// TODO: if we get the chance, remove the req parameter and
 | 
			
		||||
	// hardcode TIOCSWINSZ.
 | 
			
		||||
	err := ioctl(fd, req, uintptr(unsafe.Pointer(value)))
 | 
			
		||||
	runtime.KeepAlive(value)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IoctlSetTermios performs an ioctl on fd with a *Termios.
 | 
			
		||||
//
 | 
			
		||||
// The req value is expected to be TCSETS, TCSETSW, or TCSETSF
 | 
			
		||||
func IoctlSetTermios(fd int, req uint, value *Termios) error {
 | 
			
		||||
	if (req != TCSETS) && (req != TCSETSW) && (req != TCSETSF) {
 | 
			
		||||
		return ENOSYS
 | 
			
		||||
	}
 | 
			
		||||
	err := Tcsetattr(fd, int(req), value)
 | 
			
		||||
	runtime.KeepAlive(value)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IoctlGetInt performs an ioctl operation which gets an integer value
 | 
			
		||||
// from fd, using the specified request number.
 | 
			
		||||
//
 | 
			
		||||
// A few ioctl requests use the return value as an output parameter;
 | 
			
		||||
// for those, IoctlRetInt should be used instead of this function.
 | 
			
		||||
func IoctlGetInt(fd int, req uint) (int, error) {
 | 
			
		||||
	var value int
 | 
			
		||||
	err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
 | 
			
		||||
	return value, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func IoctlGetWinsize(fd int, req uint) (*Winsize, error) {
 | 
			
		||||
	var value Winsize
 | 
			
		||||
	err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
 | 
			
		||||
	return &value, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IoctlGetTermios performs an ioctl on fd with a *Termios.
 | 
			
		||||
//
 | 
			
		||||
// The req value is expected to be TCGETS
 | 
			
		||||
func IoctlGetTermios(fd int, req uint) (*Termios, error) {
 | 
			
		||||
	var value Termios
 | 
			
		||||
	if req != TCGETS {
 | 
			
		||||
		return &value, ENOSYS
 | 
			
		||||
	}
 | 
			
		||||
	err := Tcgetattr(fd, &value)
 | 
			
		||||
	return &value, err
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										231
									
								
								vendor/golang.org/x/sys/unix/mkall.sh
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										231
									
								
								vendor/golang.org/x/sys/unix/mkall.sh
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,231 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# Copyright 2009 The Go Authors. All rights reserved.
 | 
			
		||||
# Use of this source code is governed by a BSD-style
 | 
			
		||||
# license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
# This script runs or (given -n) prints suggested commands to generate files for
 | 
			
		||||
# the Architecture/OS specified by the GOARCH and GOOS environment variables.
 | 
			
		||||
# See README.md for more information about how the build system works.
 | 
			
		||||
 | 
			
		||||
GOOSARCH="${GOOS}_${GOARCH}"
 | 
			
		||||
 | 
			
		||||
# defaults
 | 
			
		||||
mksyscall="go run mksyscall.go"
 | 
			
		||||
mkerrors="./mkerrors.sh"
 | 
			
		||||
zerrors="zerrors_$GOOSARCH.go"
 | 
			
		||||
mksysctl=""
 | 
			
		||||
zsysctl="zsysctl_$GOOSARCH.go"
 | 
			
		||||
mksysnum=
 | 
			
		||||
mktypes=
 | 
			
		||||
mkasm=
 | 
			
		||||
run="sh"
 | 
			
		||||
cmd=""
 | 
			
		||||
 | 
			
		||||
case "$1" in
 | 
			
		||||
-syscalls)
 | 
			
		||||
	for i in zsyscall*go
 | 
			
		||||
	do
 | 
			
		||||
		# Run the command line that appears in the first line
 | 
			
		||||
		# of the generated file to regenerate it.
 | 
			
		||||
		sed 1q $i | sed 's;^// ;;' | sh > _$i && gofmt < _$i > $i
 | 
			
		||||
		rm _$i
 | 
			
		||||
	done
 | 
			
		||||
	exit 0
 | 
			
		||||
	;;
 | 
			
		||||
-n)
 | 
			
		||||
	run="cat"
 | 
			
		||||
	cmd="echo"
 | 
			
		||||
	shift
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
case "$#" in
 | 
			
		||||
0)
 | 
			
		||||
	;;
 | 
			
		||||
*)
 | 
			
		||||
	echo 'usage: mkall.sh [-n]' 1>&2
 | 
			
		||||
	exit 2
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
if [[ "$GOOS" = "linux" ]]; then
 | 
			
		||||
	# Use the Docker-based build system
 | 
			
		||||
	# Files generated through docker (use $cmd so you can Ctl-C the build or run)
 | 
			
		||||
	$cmd docker build --tag generate:$GOOS $GOOS
 | 
			
		||||
	$cmd docker run --interactive --tty --volume $(cd -- "$(dirname -- "$0")" && /bin/pwd):/build generate:$GOOS
 | 
			
		||||
	exit
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
GOOSARCH_in=syscall_$GOOSARCH.go
 | 
			
		||||
case "$GOOSARCH" in
 | 
			
		||||
_* | *_ | _)
 | 
			
		||||
	echo 'undefined $GOOS_$GOARCH:' "$GOOSARCH" 1>&2
 | 
			
		||||
	exit 1
 | 
			
		||||
	;;
 | 
			
		||||
aix_ppc)
 | 
			
		||||
	mkerrors="$mkerrors -maix32"
 | 
			
		||||
	mksyscall="go run mksyscall_aix_ppc.go -aix"
 | 
			
		||||
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
 | 
			
		||||
	;;
 | 
			
		||||
aix_ppc64)
 | 
			
		||||
	mkerrors="$mkerrors -maix64"
 | 
			
		||||
	mksyscall="go run mksyscall_aix_ppc64.go -aix"
 | 
			
		||||
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
 | 
			
		||||
	;;
 | 
			
		||||
darwin_amd64)
 | 
			
		||||
	mkerrors="$mkerrors -m64"
 | 
			
		||||
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
 | 
			
		||||
	mkasm="go run mkasm_darwin.go"
 | 
			
		||||
	;;
 | 
			
		||||
darwin_arm64)
 | 
			
		||||
	mkerrors="$mkerrors -m64"
 | 
			
		||||
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
 | 
			
		||||
	mkasm="go run mkasm_darwin.go"
 | 
			
		||||
	;;
 | 
			
		||||
dragonfly_amd64)
 | 
			
		||||
	mkerrors="$mkerrors -m64"
 | 
			
		||||
	mksyscall="go run mksyscall.go -dragonfly"
 | 
			
		||||
	mksysnum="go run mksysnum.go 'https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master'"
 | 
			
		||||
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
 | 
			
		||||
	;;
 | 
			
		||||
freebsd_386)
 | 
			
		||||
	mkerrors="$mkerrors -m32"
 | 
			
		||||
	mksyscall="go run mksyscall.go -l32"
 | 
			
		||||
	mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master'"
 | 
			
		||||
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
 | 
			
		||||
	;;
 | 
			
		||||
freebsd_amd64)
 | 
			
		||||
	mkerrors="$mkerrors -m64"
 | 
			
		||||
	mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master'"
 | 
			
		||||
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
 | 
			
		||||
	;;
 | 
			
		||||
freebsd_arm)
 | 
			
		||||
	mkerrors="$mkerrors"
 | 
			
		||||
	mksyscall="go run mksyscall.go -l32 -arm"
 | 
			
		||||
	mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master'"
 | 
			
		||||
	# Let the type of C char be signed for making the bare syscall
 | 
			
		||||
	# API consistent across platforms.
 | 
			
		||||
	mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
 | 
			
		||||
	;;
 | 
			
		||||
freebsd_arm64)
 | 
			
		||||
	mkerrors="$mkerrors -m64"
 | 
			
		||||
	mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/11/sys/kern/syscalls.master'"
 | 
			
		||||
	mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
 | 
			
		||||
	;;
 | 
			
		||||
netbsd_386)
 | 
			
		||||
	mkerrors="$mkerrors -m32"
 | 
			
		||||
	mksyscall="go run mksyscall.go -l32 -netbsd"
 | 
			
		||||
	mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'"
 | 
			
		||||
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
 | 
			
		||||
	;;
 | 
			
		||||
netbsd_amd64)
 | 
			
		||||
	mkerrors="$mkerrors -m64"
 | 
			
		||||
	mksyscall="go run mksyscall.go -netbsd"
 | 
			
		||||
	mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'"
 | 
			
		||||
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
 | 
			
		||||
	;;
 | 
			
		||||
netbsd_arm)
 | 
			
		||||
	mkerrors="$mkerrors"
 | 
			
		||||
	mksyscall="go run mksyscall.go -l32 -netbsd -arm"
 | 
			
		||||
	mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'"
 | 
			
		||||
	# Let the type of C char be signed for making the bare syscall
 | 
			
		||||
	# API consistent across platforms.
 | 
			
		||||
	mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
 | 
			
		||||
	;;
 | 
			
		||||
netbsd_arm64)
 | 
			
		||||
	mkerrors="$mkerrors -m64"
 | 
			
		||||
	mksyscall="go run mksyscall.go -netbsd"
 | 
			
		||||
	mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'"
 | 
			
		||||
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
 | 
			
		||||
	;;
 | 
			
		||||
openbsd_386)
 | 
			
		||||
	mkerrors="$mkerrors -m32"
 | 
			
		||||
	mksyscall="go run mksyscall.go -l32 -openbsd"
 | 
			
		||||
	mksysctl="go run mksysctl_openbsd.go"
 | 
			
		||||
	mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'"
 | 
			
		||||
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
 | 
			
		||||
	;;
 | 
			
		||||
openbsd_amd64)
 | 
			
		||||
	mkerrors="$mkerrors -m64"
 | 
			
		||||
	mksyscall="go run mksyscall.go -openbsd"
 | 
			
		||||
	mksysctl="go run mksysctl_openbsd.go"
 | 
			
		||||
	mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'"
 | 
			
		||||
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
 | 
			
		||||
	;;
 | 
			
		||||
openbsd_arm)
 | 
			
		||||
	mkerrors="$mkerrors"
 | 
			
		||||
	mksyscall="go run mksyscall.go -l32 -openbsd -arm"
 | 
			
		||||
	mksysctl="go run mksysctl_openbsd.go"
 | 
			
		||||
	mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'"
 | 
			
		||||
	# Let the type of C char be signed for making the bare syscall
 | 
			
		||||
	# API consistent across platforms.
 | 
			
		||||
	mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
 | 
			
		||||
	;;
 | 
			
		||||
openbsd_arm64)
 | 
			
		||||
	mkerrors="$mkerrors -m64"
 | 
			
		||||
	mksyscall="go run mksyscall.go -openbsd"
 | 
			
		||||
	mksysctl="go run mksysctl_openbsd.go"
 | 
			
		||||
	mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'"
 | 
			
		||||
	# Let the type of C char be signed for making the bare syscall
 | 
			
		||||
	# API consistent across platforms.
 | 
			
		||||
	mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
 | 
			
		||||
	;;
 | 
			
		||||
openbsd_mips64)
 | 
			
		||||
	mkerrors="$mkerrors -m64"
 | 
			
		||||
	mksyscall="go run mksyscall.go -openbsd"
 | 
			
		||||
	mksysctl="go run mksysctl_openbsd.go"
 | 
			
		||||
	mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'"
 | 
			
		||||
	# Let the type of C char be signed for making the bare syscall
 | 
			
		||||
	# API consistent across platforms.
 | 
			
		||||
	mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
 | 
			
		||||
	;;
 | 
			
		||||
solaris_amd64)
 | 
			
		||||
	mksyscall="go run mksyscall_solaris.go"
 | 
			
		||||
	mkerrors="$mkerrors -m64"
 | 
			
		||||
	mksysnum=
 | 
			
		||||
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
 | 
			
		||||
	;;
 | 
			
		||||
illumos_amd64)
 | 
			
		||||
        mksyscall="go run mksyscall_solaris.go"
 | 
			
		||||
	mkerrors=
 | 
			
		||||
	mksysnum=
 | 
			
		||||
	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
 | 
			
		||||
	;;
 | 
			
		||||
*)
 | 
			
		||||
	echo 'unrecognized $GOOS_$GOARCH: ' "$GOOSARCH" 1>&2
 | 
			
		||||
	exit 1
 | 
			
		||||
	;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
(
 | 
			
		||||
	if [ -n "$mkerrors" ]; then echo "$mkerrors |gofmt >$zerrors"; fi
 | 
			
		||||
	case "$GOOS" in
 | 
			
		||||
	*)
 | 
			
		||||
		syscall_goos="syscall_$GOOS.go"
 | 
			
		||||
		case "$GOOS" in
 | 
			
		||||
		darwin | dragonfly | freebsd | netbsd | openbsd)
 | 
			
		||||
			syscall_goos="syscall_bsd.go $syscall_goos"
 | 
			
		||||
			;;
 | 
			
		||||
		esac
 | 
			
		||||
		if [ -n "$mksyscall" ]; then
 | 
			
		||||
			if [ "$GOOSARCH" == "aix_ppc64" ]; then
 | 
			
		||||
				# aix/ppc64 script generates files instead of writing to stdin.
 | 
			
		||||
				echo "$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in && gofmt -w zsyscall_$GOOSARCH.go && gofmt -w zsyscall_"$GOOSARCH"_gccgo.go && gofmt -w zsyscall_"$GOOSARCH"_gc.go " ;
 | 
			
		||||
			elif [ "$GOOS" == "darwin" ]; then
 | 
			
		||||
			        # 1.12 and later, syscalls via libSystem
 | 
			
		||||
				echo "$mksyscall -tags $GOOS,$GOARCH,go1.12 $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.go";
 | 
			
		||||
				# 1.13 and later, syscalls via libSystem (including syscallPtr)
 | 
			
		||||
				echo "$mksyscall -tags $GOOS,$GOARCH,go1.13 syscall_darwin.1_13.go |gofmt >zsyscall_$GOOSARCH.1_13.go";
 | 
			
		||||
			elif [ "$GOOS" == "illumos" ]; then
 | 
			
		||||
			        # illumos code generation requires a --illumos switch
 | 
			
		||||
			        echo "$mksyscall -illumos -tags illumos,$GOARCH syscall_illumos.go |gofmt > zsyscall_illumos_$GOARCH.go";
 | 
			
		||||
			        # illumos implies solaris, so solaris code generation is also required
 | 
			
		||||
				echo "$mksyscall -tags solaris,$GOARCH syscall_solaris.go syscall_solaris_$GOARCH.go |gofmt >zsyscall_solaris_$GOARCH.go";
 | 
			
		||||
			else
 | 
			
		||||
				echo "$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.go";
 | 
			
		||||
			fi
 | 
			
		||||
		fi
 | 
			
		||||
	esac
 | 
			
		||||
	if [ -n "$mksysctl" ]; then echo "$mksysctl |gofmt >$zsysctl"; fi
 | 
			
		||||
	if [ -n "$mksysnum" ]; then echo "$mksysnum |gofmt >zsysnum_$GOOSARCH.go"; fi
 | 
			
		||||
	if [ -n "$mktypes" ]; then echo "$mktypes types_$GOOS.go | go run mkpost.go > ztypes_$GOOSARCH.go"; fi
 | 
			
		||||
	if [ -n "$mkasm" ]; then echo "$mkasm $GOARCH"; fi
 | 
			
		||||
) | $run
 | 
			
		||||
							
								
								
									
										750
									
								
								vendor/golang.org/x/sys/unix/mkerrors.sh
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										750
									
								
								vendor/golang.org/x/sys/unix/mkerrors.sh
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,750 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# Copyright 2009 The Go Authors. All rights reserved.
 | 
			
		||||
# Use of this source code is governed by a BSD-style
 | 
			
		||||
# license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
# Generate Go code listing errors and other #defined constant
 | 
			
		||||
# values (ENAMETOOLONG etc.), by asking the preprocessor
 | 
			
		||||
# about the definitions.
 | 
			
		||||
 | 
			
		||||
unset LANG
 | 
			
		||||
export LC_ALL=C
 | 
			
		||||
export LC_CTYPE=C
 | 
			
		||||
 | 
			
		||||
if test -z "$GOARCH" -o -z "$GOOS"; then
 | 
			
		||||
	echo 1>&2 "GOARCH or GOOS not defined in environment"
 | 
			
		||||
	exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Check that we are using the new build system if we should
 | 
			
		||||
if [[ "$GOOS" = "linux" ]] && [[ "$GOLANG_SYS_BUILD" != "docker" ]]; then
 | 
			
		||||
	echo 1>&2 "In the Docker based build system, mkerrors should not be called directly."
 | 
			
		||||
	echo 1>&2 "See README.md"
 | 
			
		||||
	exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ "$GOOS" = "aix" ]]; then
 | 
			
		||||
	CC=${CC:-gcc}
 | 
			
		||||
else
 | 
			
		||||
	CC=${CC:-cc}
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ "$GOOS" = "solaris" ]]; then
 | 
			
		||||
	# Assumes GNU versions of utilities in PATH.
 | 
			
		||||
	export PATH=/usr/gnu/bin:$PATH
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
uname=$(uname)
 | 
			
		||||
 | 
			
		||||
includes_AIX='
 | 
			
		||||
#include <net/if.h>
 | 
			
		||||
#include <net/netopt.h>
 | 
			
		||||
#include <netinet/ip_mroute.h>
 | 
			
		||||
#include <sys/protosw.h>
 | 
			
		||||
#include <sys/stropts.h>
 | 
			
		||||
#include <sys/mman.h>
 | 
			
		||||
#include <sys/poll.h>
 | 
			
		||||
#include <sys/select.h>
 | 
			
		||||
#include <sys/termio.h>
 | 
			
		||||
#include <termios.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
 | 
			
		||||
#define AF_LOCAL AF_UNIX
 | 
			
		||||
'
 | 
			
		||||
 | 
			
		||||
includes_Darwin='
 | 
			
		||||
#define _DARWIN_C_SOURCE
 | 
			
		||||
#define KERNEL
 | 
			
		||||
#define _DARWIN_USE_64_BIT_INODE
 | 
			
		||||
#define __APPLE_USE_RFC_3542
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include <sys/attr.h>
 | 
			
		||||
#include <sys/clonefile.h>
 | 
			
		||||
#include <sys/kern_control.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/event.h>
 | 
			
		||||
#include <sys/ptrace.h>
 | 
			
		||||
#include <sys/select.h>
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#include <sys/un.h>
 | 
			
		||||
#include <sys/sockio.h>
 | 
			
		||||
#include <sys/sys_domain.h>
 | 
			
		||||
#include <sys/sysctl.h>
 | 
			
		||||
#include <sys/mman.h>
 | 
			
		||||
#include <sys/mount.h>
 | 
			
		||||
#include <sys/utsname.h>
 | 
			
		||||
#include <sys/wait.h>
 | 
			
		||||
#include <sys/xattr.h>
 | 
			
		||||
#include <net/bpf.h>
 | 
			
		||||
#include <net/if.h>
 | 
			
		||||
#include <net/if_types.h>
 | 
			
		||||
#include <net/route.h>
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#include <netinet/ip.h>
 | 
			
		||||
#include <termios.h>
 | 
			
		||||
'
 | 
			
		||||
 | 
			
		||||
includes_DragonFly='
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/event.h>
 | 
			
		||||
#include <sys/select.h>
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#include <sys/sockio.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include <sys/sysctl.h>
 | 
			
		||||
#include <sys/mman.h>
 | 
			
		||||
#include <sys/mount.h>
 | 
			
		||||
#include <sys/wait.h>
 | 
			
		||||
#include <sys/ioctl.h>
 | 
			
		||||
#include <net/bpf.h>
 | 
			
		||||
#include <net/if.h>
 | 
			
		||||
#include <net/if_clone.h>
 | 
			
		||||
#include <net/if_types.h>
 | 
			
		||||
#include <net/route.h>
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#include <termios.h>
 | 
			
		||||
#include <netinet/ip.h>
 | 
			
		||||
#include <net/ip_mroute/ip_mroute.h>
 | 
			
		||||
'
 | 
			
		||||
 | 
			
		||||
includes_FreeBSD='
 | 
			
		||||
#include <sys/capsicum.h>
 | 
			
		||||
#include <sys/param.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/disk.h>
 | 
			
		||||
#include <sys/event.h>
 | 
			
		||||
#include <sys/sched.h>
 | 
			
		||||
#include <sys/select.h>
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#include <sys/un.h>
 | 
			
		||||
#include <sys/sockio.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include <sys/sysctl.h>
 | 
			
		||||
#include <sys/mman.h>
 | 
			
		||||
#include <sys/mount.h>
 | 
			
		||||
#include <sys/wait.h>
 | 
			
		||||
#include <sys/ioctl.h>
 | 
			
		||||
#include <net/bpf.h>
 | 
			
		||||
#include <net/if.h>
 | 
			
		||||
#include <net/if_types.h>
 | 
			
		||||
#include <net/route.h>
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#include <termios.h>
 | 
			
		||||
#include <netinet/ip.h>
 | 
			
		||||
#include <netinet/ip_mroute.h>
 | 
			
		||||
#include <sys/extattr.h>
 | 
			
		||||
 | 
			
		||||
#if __FreeBSD__ >= 10
 | 
			
		||||
#define IFT_CARP	0xf8	// IFT_CARP is deprecated in FreeBSD 10
 | 
			
		||||
#undef SIOCAIFADDR
 | 
			
		||||
#define SIOCAIFADDR	_IOW(105, 26, struct oifaliasreq)	// ifaliasreq contains if_data
 | 
			
		||||
#undef SIOCSIFPHYADDR
 | 
			
		||||
#define SIOCSIFPHYADDR	_IOW(105, 70, struct oifaliasreq)	// ifaliasreq contains if_data
 | 
			
		||||
#endif
 | 
			
		||||
'
 | 
			
		||||
 | 
			
		||||
includes_Linux='
 | 
			
		||||
#define _LARGEFILE_SOURCE
 | 
			
		||||
#define _LARGEFILE64_SOURCE
 | 
			
		||||
#ifndef __LP64__
 | 
			
		||||
#define _FILE_OFFSET_BITS 64
 | 
			
		||||
#endif
 | 
			
		||||
#define _GNU_SOURCE
 | 
			
		||||
 | 
			
		||||
// <sys/ioctl.h> is broken on powerpc64, as it fails to include definitions of
 | 
			
		||||
// these structures. We just include them copied from <bits/termios.h>.
 | 
			
		||||
#if defined(__powerpc__)
 | 
			
		||||
struct sgttyb {
 | 
			
		||||
        char    sg_ispeed;
 | 
			
		||||
        char    sg_ospeed;
 | 
			
		||||
        char    sg_erase;
 | 
			
		||||
        char    sg_kill;
 | 
			
		||||
        short   sg_flags;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct tchars {
 | 
			
		||||
        char    t_intrc;
 | 
			
		||||
        char    t_quitc;
 | 
			
		||||
        char    t_startc;
 | 
			
		||||
        char    t_stopc;
 | 
			
		||||
        char    t_eofc;
 | 
			
		||||
        char    t_brkc;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct ltchars {
 | 
			
		||||
        char    t_suspc;
 | 
			
		||||
        char    t_dsuspc;
 | 
			
		||||
        char    t_rprntc;
 | 
			
		||||
        char    t_flushc;
 | 
			
		||||
        char    t_werasc;
 | 
			
		||||
        char    t_lnextc;
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <bits/sockaddr.h>
 | 
			
		||||
#include <sys/epoll.h>
 | 
			
		||||
#include <sys/eventfd.h>
 | 
			
		||||
#include <sys/inotify.h>
 | 
			
		||||
#include <sys/ioctl.h>
 | 
			
		||||
#include <sys/mman.h>
 | 
			
		||||
#include <sys/mount.h>
 | 
			
		||||
#include <sys/prctl.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#include <sys/select.h>
 | 
			
		||||
#include <sys/signalfd.h>
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#include <sys/timerfd.h>
 | 
			
		||||
#include <sys/uio.h>
 | 
			
		||||
#include <sys/xattr.h>
 | 
			
		||||
#include <linux/bpf.h>
 | 
			
		||||
#include <linux/can.h>
 | 
			
		||||
#include <linux/can/error.h>
 | 
			
		||||
#include <linux/can/raw.h>
 | 
			
		||||
#include <linux/capability.h>
 | 
			
		||||
#include <linux/cryptouser.h>
 | 
			
		||||
#include <linux/devlink.h>
 | 
			
		||||
#include <linux/dm-ioctl.h>
 | 
			
		||||
#include <linux/errqueue.h>
 | 
			
		||||
#include <linux/ethtool_netlink.h>
 | 
			
		||||
#include <linux/falloc.h>
 | 
			
		||||
#include <linux/fanotify.h>
 | 
			
		||||
#include <linux/filter.h>
 | 
			
		||||
#include <linux/fs.h>
 | 
			
		||||
#include <linux/fscrypt.h>
 | 
			
		||||
#include <linux/fsverity.h>
 | 
			
		||||
#include <linux/genetlink.h>
 | 
			
		||||
#include <linux/hdreg.h>
 | 
			
		||||
#include <linux/hidraw.h>
 | 
			
		||||
#include <linux/icmp.h>
 | 
			
		||||
#include <linux/icmpv6.h>
 | 
			
		||||
#include <linux/if.h>
 | 
			
		||||
#include <linux/if_addr.h>
 | 
			
		||||
#include <linux/if_alg.h>
 | 
			
		||||
#include <linux/if_arp.h>
 | 
			
		||||
#include <linux/if_ether.h>
 | 
			
		||||
#include <linux/if_ppp.h>
 | 
			
		||||
#include <linux/if_tun.h>
 | 
			
		||||
#include <linux/if_packet.h>
 | 
			
		||||
#include <linux/if_xdp.h>
 | 
			
		||||
#include <linux/input.h>
 | 
			
		||||
#include <linux/kexec.h>
 | 
			
		||||
#include <linux/keyctl.h>
 | 
			
		||||
#include <linux/loop.h>
 | 
			
		||||
#include <linux/lwtunnel.h>
 | 
			
		||||
#include <linux/magic.h>
 | 
			
		||||
#include <linux/memfd.h>
 | 
			
		||||
#include <linux/module.h>
 | 
			
		||||
#include <linux/netfilter/nfnetlink.h>
 | 
			
		||||
#include <linux/netlink.h>
 | 
			
		||||
#include <linux/net_namespace.h>
 | 
			
		||||
#include <linux/nsfs.h>
 | 
			
		||||
#include <linux/perf_event.h>
 | 
			
		||||
#include <linux/pps.h>
 | 
			
		||||
#include <linux/ptrace.h>
 | 
			
		||||
#include <linux/random.h>
 | 
			
		||||
#include <linux/reboot.h>
 | 
			
		||||
#include <linux/rtc.h>
 | 
			
		||||
#include <linux/rtnetlink.h>
 | 
			
		||||
#include <linux/sched.h>
 | 
			
		||||
#include <linux/seccomp.h>
 | 
			
		||||
#include <linux/serial.h>
 | 
			
		||||
#include <linux/sockios.h>
 | 
			
		||||
#include <linux/taskstats.h>
 | 
			
		||||
#include <linux/tipc.h>
 | 
			
		||||
#include <linux/vm_sockets.h>
 | 
			
		||||
#include <linux/wait.h>
 | 
			
		||||
#include <linux/watchdog.h>
 | 
			
		||||
 | 
			
		||||
#include <mtd/ubi-user.h>
 | 
			
		||||
#include <net/route.h>
 | 
			
		||||
 | 
			
		||||
#if defined(__sparc__)
 | 
			
		||||
// On sparc{,64}, the kernel defines struct termios2 itself which clashes with the
 | 
			
		||||
// definition in glibc. As only the error constants are needed here, include the
 | 
			
		||||
// generic termibits.h (which is included by termbits.h on sparc).
 | 
			
		||||
#include <asm-generic/termbits.h>
 | 
			
		||||
#else
 | 
			
		||||
#include <asm/termbits.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef MSG_FASTOPEN
 | 
			
		||||
#define MSG_FASTOPEN    0x20000000
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef PTRACE_GETREGS
 | 
			
		||||
#define PTRACE_GETREGS	0xc
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef PTRACE_SETREGS
 | 
			
		||||
#define PTRACE_SETREGS	0xd
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef SOL_NETLINK
 | 
			
		||||
#define SOL_NETLINK	270
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef SOL_BLUETOOTH
 | 
			
		||||
// SPARC includes this in /usr/include/sparc64-linux-gnu/bits/socket.h
 | 
			
		||||
// but it is already in bluetooth_linux.go
 | 
			
		||||
#undef SOL_BLUETOOTH
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// Certain constants are missing from the fs/crypto UAPI
 | 
			
		||||
#define FS_KEY_DESC_PREFIX              "fscrypt:"
 | 
			
		||||
#define FS_KEY_DESC_PREFIX_SIZE         8
 | 
			
		||||
#define FS_MAX_KEY_SIZE                 64
 | 
			
		||||
 | 
			
		||||
// The code generator produces -0x1 for (~0), but an unsigned value is necessary
 | 
			
		||||
// for the tipc_subscr timeout __u32 field.
 | 
			
		||||
#undef TIPC_WAIT_FOREVER
 | 
			
		||||
#define TIPC_WAIT_FOREVER 0xffffffff
 | 
			
		||||
 | 
			
		||||
// Copied from linux/l2tp.h
 | 
			
		||||
// Including linux/l2tp.h here causes conflicts between linux/in.h
 | 
			
		||||
// and netinet/in.h included via net/route.h above.
 | 
			
		||||
#define IPPROTO_L2TP		115
 | 
			
		||||
 | 
			
		||||
// Copied from linux/hid.h.
 | 
			
		||||
// Keep in sync with the size of the referenced fields.
 | 
			
		||||
#define _HIDIOCGRAWNAME_LEN	128 // sizeof_field(struct hid_device, name)
 | 
			
		||||
#define _HIDIOCGRAWPHYS_LEN	64  // sizeof_field(struct hid_device, phys)
 | 
			
		||||
#define _HIDIOCGRAWUNIQ_LEN	64  // sizeof_field(struct hid_device, uniq)
 | 
			
		||||
 | 
			
		||||
#define _HIDIOCGRAWNAME		HIDIOCGRAWNAME(_HIDIOCGRAWNAME_LEN)
 | 
			
		||||
#define _HIDIOCGRAWPHYS		HIDIOCGRAWPHYS(_HIDIOCGRAWPHYS_LEN)
 | 
			
		||||
#define _HIDIOCGRAWUNIQ		HIDIOCGRAWUNIQ(_HIDIOCGRAWUNIQ_LEN)
 | 
			
		||||
 | 
			
		||||
'
 | 
			
		||||
 | 
			
		||||
includes_NetBSD='
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/param.h>
 | 
			
		||||
#include <sys/event.h>
 | 
			
		||||
#include <sys/extattr.h>
 | 
			
		||||
#include <sys/mman.h>
 | 
			
		||||
#include <sys/mount.h>
 | 
			
		||||
#include <sys/sched.h>
 | 
			
		||||
#include <sys/select.h>
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#include <sys/sockio.h>
 | 
			
		||||
#include <sys/sysctl.h>
 | 
			
		||||
#include <sys/termios.h>
 | 
			
		||||
#include <sys/ttycom.h>
 | 
			
		||||
#include <sys/wait.h>
 | 
			
		||||
#include <net/bpf.h>
 | 
			
		||||
#include <net/if.h>
 | 
			
		||||
#include <net/if_types.h>
 | 
			
		||||
#include <net/route.h>
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#include <netinet/in_systm.h>
 | 
			
		||||
#include <netinet/ip.h>
 | 
			
		||||
#include <netinet/ip_mroute.h>
 | 
			
		||||
#include <netinet/if_ether.h>
 | 
			
		||||
 | 
			
		||||
// Needed since <sys/param.h> refers to it...
 | 
			
		||||
#define schedppq 1
 | 
			
		||||
'
 | 
			
		||||
 | 
			
		||||
includes_OpenBSD='
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/param.h>
 | 
			
		||||
#include <sys/event.h>
 | 
			
		||||
#include <sys/mman.h>
 | 
			
		||||
#include <sys/mount.h>
 | 
			
		||||
#include <sys/select.h>
 | 
			
		||||
#include <sys/sched.h>
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#include <sys/sockio.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include <sys/sysctl.h>
 | 
			
		||||
#include <sys/termios.h>
 | 
			
		||||
#include <sys/ttycom.h>
 | 
			
		||||
#include <sys/unistd.h>
 | 
			
		||||
#include <sys/wait.h>
 | 
			
		||||
#include <net/bpf.h>
 | 
			
		||||
#include <net/if.h>
 | 
			
		||||
#include <net/if_types.h>
 | 
			
		||||
#include <net/if_var.h>
 | 
			
		||||
#include <net/route.h>
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#include <netinet/in_systm.h>
 | 
			
		||||
#include <netinet/ip.h>
 | 
			
		||||
#include <netinet/ip_mroute.h>
 | 
			
		||||
#include <netinet/if_ether.h>
 | 
			
		||||
#include <net/if_bridge.h>
 | 
			
		||||
 | 
			
		||||
// We keep some constants not supported in OpenBSD 5.5 and beyond for
 | 
			
		||||
// the promise of compatibility.
 | 
			
		||||
#define EMUL_ENABLED		0x1
 | 
			
		||||
#define EMUL_NATIVE		0x2
 | 
			
		||||
#define IPV6_FAITH		0x1d
 | 
			
		||||
#define IPV6_OPTIONS		0x1
 | 
			
		||||
#define IPV6_RTHDR_STRICT	0x1
 | 
			
		||||
#define IPV6_SOCKOPT_RESERVED1	0x3
 | 
			
		||||
#define SIOCGIFGENERIC		0xc020693a
 | 
			
		||||
#define SIOCSIFGENERIC		0x80206939
 | 
			
		||||
#define WALTSIG			0x4
 | 
			
		||||
'
 | 
			
		||||
 | 
			
		||||
includes_SunOS='
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/select.h>
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#include <sys/sockio.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include <sys/stream.h>
 | 
			
		||||
#include <sys/mman.h>
 | 
			
		||||
#include <sys/wait.h>
 | 
			
		||||
#include <sys/ioctl.h>
 | 
			
		||||
#include <sys/mkdev.h>
 | 
			
		||||
#include <net/bpf.h>
 | 
			
		||||
#include <net/if.h>
 | 
			
		||||
#include <net/if_arp.h>
 | 
			
		||||
#include <net/if_types.h>
 | 
			
		||||
#include <net/route.h>
 | 
			
		||||
#include <netinet/icmp6.h>
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#include <netinet/ip.h>
 | 
			
		||||
#include <netinet/ip_mroute.h>
 | 
			
		||||
#include <termios.h>
 | 
			
		||||
'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
includes='
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/file.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <dirent.h>
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#include <netinet/ip.h>
 | 
			
		||||
#include <netinet/ip6.h>
 | 
			
		||||
#include <netinet/tcp.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <sys/signal.h>
 | 
			
		||||
#include <signal.h>
 | 
			
		||||
#include <sys/resource.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
'
 | 
			
		||||
ccflags="$@"
 | 
			
		||||
 | 
			
		||||
# Write go tool cgo -godefs input.
 | 
			
		||||
(
 | 
			
		||||
	echo package unix
 | 
			
		||||
	echo
 | 
			
		||||
	echo '/*'
 | 
			
		||||
	indirect="includes_$(uname)"
 | 
			
		||||
	echo "${!indirect} $includes"
 | 
			
		||||
	echo '*/'
 | 
			
		||||
	echo 'import "C"'
 | 
			
		||||
	echo 'import "syscall"'
 | 
			
		||||
	echo
 | 
			
		||||
	echo 'const ('
 | 
			
		||||
 | 
			
		||||
	# The gcc command line prints all the #defines
 | 
			
		||||
	# it encounters while processing the input
 | 
			
		||||
	echo "${!indirect} $includes" | $CC -x c - -E -dM $ccflags |
 | 
			
		||||
	awk '
 | 
			
		||||
		$1 != "#define" || $2 ~ /\(/ || $3 == "" {next}
 | 
			
		||||
 | 
			
		||||
		$2 ~ /^E([ABCD]X|[BIS]P|[SD]I|S|FL)$/ {next}  # 386 registers
 | 
			
		||||
		$2 ~ /^(SIGEV_|SIGSTKSZ|SIGRT(MIN|MAX))/ {next}
 | 
			
		||||
		$2 ~ /^(SCM_SRCRT)$/ {next}
 | 
			
		||||
		$2 ~ /^(MAP_FAILED)$/ {next}
 | 
			
		||||
		$2 ~ /^ELF_.*$/ {next}# <asm/elf.h> contains ELF_ARCH, etc.
 | 
			
		||||
 | 
			
		||||
		$2 ~ /^EXTATTR_NAMESPACE_NAMES/ ||
 | 
			
		||||
		$2 ~ /^EXTATTR_NAMESPACE_[A-Z]+_STRING/ {next}
 | 
			
		||||
 | 
			
		||||
		$2 !~ /^ECCAPBITS/ &&
 | 
			
		||||
		$2 !~ /^ETH_/ &&
 | 
			
		||||
		$2 !~ /^EPROC_/ &&
 | 
			
		||||
		$2 !~ /^EQUIV_/ &&
 | 
			
		||||
		$2 !~ /^EXPR_/ &&
 | 
			
		||||
		$2 !~ /^EVIOC/ &&
 | 
			
		||||
		$2 !~ /^EV_/ &&
 | 
			
		||||
		$2 ~ /^E[A-Z0-9_]+$/ ||
 | 
			
		||||
		$2 ~ /^B[0-9_]+$/ ||
 | 
			
		||||
		$2 ~ /^(OLD|NEW)DEV$/ ||
 | 
			
		||||
		$2 == "BOTHER" ||
 | 
			
		||||
		$2 ~ /^CI?BAUD(EX)?$/ ||
 | 
			
		||||
		$2 == "IBSHIFT" ||
 | 
			
		||||
		$2 ~ /^V[A-Z0-9]+$/ ||
 | 
			
		||||
		$2 ~ /^CS[A-Z0-9]/ ||
 | 
			
		||||
		$2 ~ /^I(SIG|CANON|CRNL|UCLC|EXTEN|MAXBEL|STRIP|UTF8)$/ ||
 | 
			
		||||
		$2 ~ /^IGN/ ||
 | 
			
		||||
		$2 ~ /^IX(ON|ANY|OFF)$/ ||
 | 
			
		||||
		$2 ~ /^IN(LCR|PCK)$/ ||
 | 
			
		||||
		$2 !~ "X86_CR3_PCID_NOFLUSH" &&
 | 
			
		||||
		$2 ~ /(^FLU?SH)|(FLU?SH$)/ ||
 | 
			
		||||
		$2 ~ /^C(LOCAL|READ|MSPAR|RTSCTS)$/ ||
 | 
			
		||||
		$2 == "BRKINT" ||
 | 
			
		||||
		$2 == "HUPCL" ||
 | 
			
		||||
		$2 == "PENDIN" ||
 | 
			
		||||
		$2 == "TOSTOP" ||
 | 
			
		||||
		$2 == "XCASE" ||
 | 
			
		||||
		$2 == "ALTWERASE" ||
 | 
			
		||||
		$2 == "NOKERNINFO" ||
 | 
			
		||||
		$2 == "NFDBITS" ||
 | 
			
		||||
		$2 ~ /^PAR/ ||
 | 
			
		||||
		$2 ~ /^SIG[^_]/ ||
 | 
			
		||||
		$2 ~ /^O[CNPFPL][A-Z]+[^_][A-Z]+$/ ||
 | 
			
		||||
		$2 ~ /^(NL|CR|TAB|BS|VT|FF)DLY$/ ||
 | 
			
		||||
		$2 ~ /^(NL|CR|TAB|BS|VT|FF)[0-9]$/ ||
 | 
			
		||||
		$2 ~ /^O?XTABS$/ ||
 | 
			
		||||
		$2 ~ /^TC[IO](ON|OFF)$/ ||
 | 
			
		||||
		$2 ~ /^IN_/ ||
 | 
			
		||||
		$2 ~ /^LOCK_(SH|EX|NB|UN)$/ ||
 | 
			
		||||
		$2 ~ /^LO_(KEY|NAME)_SIZE$/ ||
 | 
			
		||||
		$2 ~ /^LOOP_(CLR|CTL|GET|SET)_/ ||
 | 
			
		||||
		$2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL)_/ ||
 | 
			
		||||
		$2 ~ /^TP_STATUS_/ ||
 | 
			
		||||
		$2 ~ /^FALLOC_/ ||
 | 
			
		||||
		$2 ~ /^ICMPV?6?_(FILTER|SEC)/ ||
 | 
			
		||||
		$2 == "SOMAXCONN" ||
 | 
			
		||||
		$2 == "NAME_MAX" ||
 | 
			
		||||
		$2 == "IFNAMSIZ" ||
 | 
			
		||||
		$2 ~ /^CTL_(HW|KERN|MAXNAME|NET|QUERY)$/ ||
 | 
			
		||||
		$2 ~ /^KERN_(HOSTNAME|OS(RELEASE|TYPE)|VERSION)$/ ||
 | 
			
		||||
		$2 ~ /^HW_MACHINE$/ ||
 | 
			
		||||
		$2 ~ /^SYSCTL_VERS/ ||
 | 
			
		||||
		$2 !~ "MNT_BITS" &&
 | 
			
		||||
		$2 ~ /^(MS|MNT|UMOUNT)_/ ||
 | 
			
		||||
		$2 ~ /^NS_GET_/ ||
 | 
			
		||||
		$2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ ||
 | 
			
		||||
		$2 ~ /^(O|F|[ES]?FD|NAME|S|PTRACE|PT|TFD)_/ ||
 | 
			
		||||
		$2 ~ /^KEXEC_/ ||
 | 
			
		||||
		$2 ~ /^LINUX_REBOOT_CMD_/ ||
 | 
			
		||||
		$2 ~ /^LINUX_REBOOT_MAGIC[12]$/ ||
 | 
			
		||||
		$2 ~ /^MODULE_INIT_/ ||
 | 
			
		||||
		$2 !~ "NLA_TYPE_MASK" &&
 | 
			
		||||
		$2 !~ /^RTC_VL_(ACCURACY|BACKUP|DATA)/ &&
 | 
			
		||||
		$2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTC|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P|NETNSA)_/ ||
 | 
			
		||||
		$2 ~ /^FIORDCHK$/ ||
 | 
			
		||||
		$2 ~ /^SIOC/ ||
 | 
			
		||||
		$2 ~ /^TIOC/ ||
 | 
			
		||||
		$2 ~ /^TCGET/ ||
 | 
			
		||||
		$2 ~ /^TCSET/ ||
 | 
			
		||||
		$2 ~ /^TC(FLSH|SBRKP?|XONC)$/ ||
 | 
			
		||||
		$2 !~ "RTF_BITS" &&
 | 
			
		||||
		$2 ~ /^(IFF|IFT|NET_RT|RTM(GRP)?|RTF|RTV|RTA|RTAX)_/ ||
 | 
			
		||||
		$2 ~ /^BIOC/ ||
 | 
			
		||||
		$2 ~ /^DIOC/ ||
 | 
			
		||||
		$2 ~ /^RUSAGE_(SELF|CHILDREN|THREAD)/ ||
 | 
			
		||||
		$2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|LOCKS|MEMLOCK|MSGQUEUE|NICE|NOFILE|NPROC|RSS|RTPRIO|RTTIME|SIGPENDING|STACK)|RLIM_INFINITY/ ||
 | 
			
		||||
		$2 ~ /^PRIO_(PROCESS|PGRP|USER)/ ||
 | 
			
		||||
		$2 ~ /^CLONE_[A-Z_]+/ ||
 | 
			
		||||
		$2 !~ /^(BPF_TIMEVAL|BPF_FIB_LOOKUP_[A-Z]+)$/ &&
 | 
			
		||||
		$2 ~ /^(BPF|DLT)_/ ||
 | 
			
		||||
		$2 ~ /^(CLOCK|TIMER)_/ ||
 | 
			
		||||
		$2 ~ /^CAN_/ ||
 | 
			
		||||
		$2 ~ /^CAP_/ ||
 | 
			
		||||
		$2 ~ /^CP_/ ||
 | 
			
		||||
		$2 ~ /^CPUSTATES$/ ||
 | 
			
		||||
		$2 ~ /^CTLIOCGINFO$/ ||
 | 
			
		||||
		$2 ~ /^ALG_/ ||
 | 
			
		||||
		$2 ~ /^FI(CLONE|DEDUPERANGE)/ ||
 | 
			
		||||
		$2 ~ /^FS_(POLICY_FLAGS|KEY_DESC|ENCRYPTION_MODE|[A-Z0-9_]+_KEY_SIZE)/ ||
 | 
			
		||||
		$2 ~ /^FS_IOC_.*(ENCRYPTION|VERITY|[GS]ETFLAGS)/ ||
 | 
			
		||||
		$2 ~ /^FS_VERITY_/ ||
 | 
			
		||||
		$2 ~ /^FSCRYPT_/ ||
 | 
			
		||||
		$2 ~ /^DM_/ ||
 | 
			
		||||
		$2 ~ /^GRND_/ ||
 | 
			
		||||
		$2 ~ /^RND/ ||
 | 
			
		||||
		$2 ~ /^KEY_(SPEC|REQKEY_DEFL)_/ ||
 | 
			
		||||
		$2 ~ /^KEYCTL_/ ||
 | 
			
		||||
		$2 ~ /^PERF_/ ||
 | 
			
		||||
		$2 ~ /^SECCOMP_MODE_/ ||
 | 
			
		||||
		$2 ~ /^SPLICE_/ ||
 | 
			
		||||
		$2 ~ /^SYNC_FILE_RANGE_/ ||
 | 
			
		||||
		$2 !~ /^AUDIT_RECORD_MAGIC/ &&
 | 
			
		||||
		$2 !~ /IOC_MAGIC/ &&
 | 
			
		||||
		$2 ~ /^[A-Z][A-Z0-9_]+_MAGIC2?$/ ||
 | 
			
		||||
		$2 ~ /^(VM|VMADDR)_/ ||
 | 
			
		||||
		$2 ~ /^IOCTL_VM_SOCKETS_/ ||
 | 
			
		||||
		$2 ~ /^(TASKSTATS|TS)_/ ||
 | 
			
		||||
		$2 ~ /^CGROUPSTATS_/ ||
 | 
			
		||||
		$2 ~ /^GENL_/ ||
 | 
			
		||||
		$2 ~ /^STATX_/ ||
 | 
			
		||||
		$2 ~ /^RENAME/ ||
 | 
			
		||||
		$2 ~ /^UBI_IOC[A-Z]/ ||
 | 
			
		||||
		$2 ~ /^UTIME_/ ||
 | 
			
		||||
		$2 ~ /^XATTR_(CREATE|REPLACE|NO(DEFAULT|FOLLOW|SECURITY)|SHOWCOMPRESSION)/ ||
 | 
			
		||||
		$2 ~ /^ATTR_(BIT_MAP_COUNT|(CMN|VOL|FILE)_)/ ||
 | 
			
		||||
		$2 ~ /^FSOPT_/ ||
 | 
			
		||||
		$2 ~ /^WDIO[CFS]_/ ||
 | 
			
		||||
		$2 ~ /^NFN/ ||
 | 
			
		||||
		$2 ~ /^XDP_/ ||
 | 
			
		||||
		$2 ~ /^RWF_/ ||
 | 
			
		||||
		$2 ~ /^(HDIO|WIN|SMART)_/ ||
 | 
			
		||||
		$2 ~ /^CRYPTO_/ ||
 | 
			
		||||
		$2 ~ /^TIPC_/ ||
 | 
			
		||||
		$2 !~  "DEVLINK_RELOAD_LIMITS_VALID_MASK" &&
 | 
			
		||||
		$2 ~ /^DEVLINK_/ ||
 | 
			
		||||
		$2 ~ /^ETHTOOL_/ ||
 | 
			
		||||
		$2 ~ /^LWTUNNEL_IP/ ||
 | 
			
		||||
		$2 !~ "WMESGLEN" &&
 | 
			
		||||
		$2 ~ /^W[A-Z0-9]+$/ ||
 | 
			
		||||
		$2 ~/^PPPIOC/ ||
 | 
			
		||||
		$2 ~ /^FAN_|FANOTIFY_/ ||
 | 
			
		||||
		$2 == "HID_MAX_DESCRIPTOR_SIZE" ||
 | 
			
		||||
		$2 ~ /^_?HIDIOC/ ||
 | 
			
		||||
		$2 ~ /^BUS_(USB|HIL|BLUETOOTH|VIRTUAL)$/ ||
 | 
			
		||||
		$2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE)/ {printf("\t%s = C.%s\n", $2, $2)}
 | 
			
		||||
		$2 ~ /^__WCOREFLAG$/ {next}
 | 
			
		||||
		$2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)}
 | 
			
		||||
 | 
			
		||||
		{next}
 | 
			
		||||
	' | sort
 | 
			
		||||
 | 
			
		||||
	echo ')'
 | 
			
		||||
) >_const.go
 | 
			
		||||
 | 
			
		||||
# Pull out the error names for later.
 | 
			
		||||
errors=$(
 | 
			
		||||
	echo '#include <errno.h>' | $CC -x c - -E -dM $ccflags |
 | 
			
		||||
	awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print $2 }' |
 | 
			
		||||
	sort
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# Pull out the signal names for later.
 | 
			
		||||
signals=$(
 | 
			
		||||
	echo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |
 | 
			
		||||
	awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' |
 | 
			
		||||
	egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT|SIGMAX64)' |
 | 
			
		||||
	sort
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# Again, writing regexps to a file.
 | 
			
		||||
echo '#include <errno.h>' | $CC -x c - -E -dM $ccflags |
 | 
			
		||||
	awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print "^\t" $2 "[ \t]*=" }' |
 | 
			
		||||
	sort >_error.grep
 | 
			
		||||
echo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |
 | 
			
		||||
	awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print "^\t" $2 "[ \t]*=" }' |
 | 
			
		||||
	egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT|SIGMAX64)' |
 | 
			
		||||
	sort >_signal.grep
 | 
			
		||||
 | 
			
		||||
echo '// mkerrors.sh' "$@"
 | 
			
		||||
echo '// Code generated by the command above; see README.md. DO NOT EDIT.'
 | 
			
		||||
echo
 | 
			
		||||
echo "//go:build ${GOARCH} && ${GOOS}"
 | 
			
		||||
echo "// +build ${GOARCH},${GOOS}"
 | 
			
		||||
echo
 | 
			
		||||
go tool cgo -godefs -- "$@" _const.go >_error.out
 | 
			
		||||
cat _error.out | grep -vf _error.grep | grep -vf _signal.grep
 | 
			
		||||
echo
 | 
			
		||||
echo '// Errors'
 | 
			
		||||
echo 'const ('
 | 
			
		||||
cat _error.out | grep -f _error.grep | sed 's/=\(.*\)/= syscall.Errno(\1)/'
 | 
			
		||||
echo ')'
 | 
			
		||||
 | 
			
		||||
echo
 | 
			
		||||
echo '// Signals'
 | 
			
		||||
echo 'const ('
 | 
			
		||||
cat _error.out | grep -f _signal.grep | sed 's/=\(.*\)/= syscall.Signal(\1)/'
 | 
			
		||||
echo ')'
 | 
			
		||||
 | 
			
		||||
# Run C program to print error and syscall strings.
 | 
			
		||||
(
 | 
			
		||||
	echo -E "
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <signal.h>
 | 
			
		||||
 | 
			
		||||
#define nelem(x) (sizeof(x)/sizeof((x)[0]))
 | 
			
		||||
 | 
			
		||||
enum { A = 'A', Z = 'Z', a = 'a', z = 'z' }; // avoid need for single quotes below
 | 
			
		||||
 | 
			
		||||
struct tuple {
 | 
			
		||||
	int num;
 | 
			
		||||
	const char *name;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct tuple errors[] = {
 | 
			
		||||
"
 | 
			
		||||
	for i in $errors
 | 
			
		||||
	do
 | 
			
		||||
		echo -E '	{'$i', "'$i'" },'
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
	echo -E "
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct tuple signals[] = {
 | 
			
		||||
"
 | 
			
		||||
	for i in $signals
 | 
			
		||||
	do
 | 
			
		||||
		echo -E '	{'$i', "'$i'" },'
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
	# Use -E because on some systems bash builtin interprets \n itself.
 | 
			
		||||
	echo -E '
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
tuplecmp(const void *a, const void *b)
 | 
			
		||||
{
 | 
			
		||||
	return ((struct tuple *)a)->num - ((struct tuple *)b)->num;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
main(void)
 | 
			
		||||
{
 | 
			
		||||
	int i, e;
 | 
			
		||||
	char buf[1024], *p;
 | 
			
		||||
 | 
			
		||||
	printf("\n\n// Error table\n");
 | 
			
		||||
	printf("var errorList = [...]struct {\n");
 | 
			
		||||
	printf("\tnum  syscall.Errno\n");
 | 
			
		||||
	printf("\tname string\n");
 | 
			
		||||
	printf("\tdesc string\n");
 | 
			
		||||
	printf("} {\n");
 | 
			
		||||
	qsort(errors, nelem(errors), sizeof errors[0], tuplecmp);
 | 
			
		||||
	for(i=0; i<nelem(errors); i++) {
 | 
			
		||||
		e = errors[i].num;
 | 
			
		||||
		if(i > 0 && errors[i-1].num == e)
 | 
			
		||||
			continue;
 | 
			
		||||
		strcpy(buf, strerror(e));
 | 
			
		||||
		// lowercase first letter: Bad -> bad, but STREAM -> STREAM.
 | 
			
		||||
		if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z)
 | 
			
		||||
			buf[0] += a - A;
 | 
			
		||||
		printf("\t{ %d, \"%s\", \"%s\" },\n", e, errors[i].name, buf);
 | 
			
		||||
	}
 | 
			
		||||
	printf("}\n\n");
 | 
			
		||||
 | 
			
		||||
	printf("\n\n// Signal table\n");
 | 
			
		||||
	printf("var signalList = [...]struct {\n");
 | 
			
		||||
	printf("\tnum  syscall.Signal\n");
 | 
			
		||||
	printf("\tname string\n");
 | 
			
		||||
	printf("\tdesc string\n");
 | 
			
		||||
	printf("} {\n");
 | 
			
		||||
	qsort(signals, nelem(signals), sizeof signals[0], tuplecmp);
 | 
			
		||||
	for(i=0; i<nelem(signals); i++) {
 | 
			
		||||
		e = signals[i].num;
 | 
			
		||||
		if(i > 0 && signals[i-1].num == e)
 | 
			
		||||
			continue;
 | 
			
		||||
		strcpy(buf, strsignal(e));
 | 
			
		||||
		// lowercase first letter: Bad -> bad, but STREAM -> STREAM.
 | 
			
		||||
		if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z)
 | 
			
		||||
			buf[0] += a - A;
 | 
			
		||||
		// cut trailing : number.
 | 
			
		||||
		p = strrchr(buf, ":"[0]);
 | 
			
		||||
		if(p)
 | 
			
		||||
			*p = '\0';
 | 
			
		||||
		printf("\t{ %d, \"%s\", \"%s\" },\n", e, signals[i].name, buf);
 | 
			
		||||
	}
 | 
			
		||||
	printf("}\n\n");
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
'
 | 
			
		||||
) >_errors.c
 | 
			
		||||
 | 
			
		||||
$CC $ccflags -o _errors _errors.c && $GORUN ./_errors && rm -f _errors.c _errors _const.go _error.grep _signal.grep _error.out
 | 
			
		||||
							
								
								
									
										16
									
								
								vendor/golang.org/x/sys/unix/pagesize_unix.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								vendor/golang.org/x/sys/unix/pagesize_unix.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
// Copyright 2017 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris
 | 
			
		||||
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
 | 
			
		||||
 | 
			
		||||
// For Unix, get the pagesize from the runtime.
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import "syscall"
 | 
			
		||||
 | 
			
		||||
func Getpagesize() int {
 | 
			
		||||
	return syscall.Getpagesize()
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										163
									
								
								vendor/golang.org/x/sys/unix/pledge_openbsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								vendor/golang.org/x/sys/unix/pledge_openbsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,163 @@
 | 
			
		||||
// Copyright 2016 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"syscall"
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Pledge implements the pledge syscall.
 | 
			
		||||
//
 | 
			
		||||
// The pledge syscall does not accept execpromises on OpenBSD releases
 | 
			
		||||
// before 6.3.
 | 
			
		||||
//
 | 
			
		||||
// execpromises must be empty when Pledge is called on OpenBSD
 | 
			
		||||
// releases predating 6.3, otherwise an error will be returned.
 | 
			
		||||
//
 | 
			
		||||
// For more information see pledge(2).
 | 
			
		||||
func Pledge(promises, execpromises string) error {
 | 
			
		||||
	maj, min, err := majmin()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = pledgeAvailable(maj, min, execpromises)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	pptr, err := syscall.BytePtrFromString(promises)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// This variable will hold either a nil unsafe.Pointer or
 | 
			
		||||
	// an unsafe.Pointer to a string (execpromises).
 | 
			
		||||
	var expr unsafe.Pointer
 | 
			
		||||
 | 
			
		||||
	// If we're running on OpenBSD > 6.2, pass execpromises to the syscall.
 | 
			
		||||
	if maj > 6 || (maj == 6 && min > 2) {
 | 
			
		||||
		exptr, err := syscall.BytePtrFromString(execpromises)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		expr = unsafe.Pointer(exptr)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(unsafe.Pointer(pptr)), uintptr(expr), 0)
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		return e
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// PledgePromises implements the pledge syscall.
 | 
			
		||||
//
 | 
			
		||||
// This changes the promises and leaves the execpromises untouched.
 | 
			
		||||
//
 | 
			
		||||
// For more information see pledge(2).
 | 
			
		||||
func PledgePromises(promises string) error {
 | 
			
		||||
	maj, min, err := majmin()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = pledgeAvailable(maj, min, "")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// This variable holds the execpromises and is always nil.
 | 
			
		||||
	var expr unsafe.Pointer
 | 
			
		||||
 | 
			
		||||
	pptr, err := syscall.BytePtrFromString(promises)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(unsafe.Pointer(pptr)), uintptr(expr), 0)
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		return e
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// PledgeExecpromises implements the pledge syscall.
 | 
			
		||||
//
 | 
			
		||||
// This changes the execpromises and leaves the promises untouched.
 | 
			
		||||
//
 | 
			
		||||
// For more information see pledge(2).
 | 
			
		||||
func PledgeExecpromises(execpromises string) error {
 | 
			
		||||
	maj, min, err := majmin()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = pledgeAvailable(maj, min, execpromises)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// This variable holds the promises and is always nil.
 | 
			
		||||
	var pptr unsafe.Pointer
 | 
			
		||||
 | 
			
		||||
	exptr, err := syscall.BytePtrFromString(execpromises)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(pptr), uintptr(unsafe.Pointer(exptr)), 0)
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		return e
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// majmin returns major and minor version number for an OpenBSD system.
 | 
			
		||||
func majmin() (major int, minor int, err error) {
 | 
			
		||||
	var v Utsname
 | 
			
		||||
	err = Uname(&v)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	major, err = strconv.Atoi(string(v.Release[0]))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		err = errors.New("cannot parse major version number returned by uname")
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	minor, err = strconv.Atoi(string(v.Release[2]))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		err = errors.New("cannot parse minor version number returned by uname")
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// pledgeAvailable checks for availability of the pledge(2) syscall
 | 
			
		||||
// based on the running OpenBSD version.
 | 
			
		||||
func pledgeAvailable(maj, min int, execpromises string) error {
 | 
			
		||||
	// If OpenBSD <= 5.9, pledge is not available.
 | 
			
		||||
	if (maj == 5 && min != 9) || maj < 5 {
 | 
			
		||||
		return fmt.Errorf("pledge syscall is not available on OpenBSD %d.%d", maj, min)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// If OpenBSD <= 6.2 and execpromises is not empty,
 | 
			
		||||
	// return an error - execpromises is not available before 6.3
 | 
			
		||||
	if (maj < 6 || (maj == 6 && min <= 2)) && execpromises != "" {
 | 
			
		||||
		return fmt.Errorf("cannot use execpromises on OpenBSD %d.%d", maj, min)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										12
									
								
								vendor/golang.org/x/sys/unix/ptrace_darwin.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								vendor/golang.org/x/sys/unix/ptrace_darwin.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
// Copyright 2020 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build darwin && !ios
 | 
			
		||||
// +build darwin,!ios
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
func ptrace(request int, pid int, addr uintptr, data uintptr) error {
 | 
			
		||||
	return ptrace1(request, pid, addr, data)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										12
									
								
								vendor/golang.org/x/sys/unix/ptrace_ios.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								vendor/golang.org/x/sys/unix/ptrace_ios.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
// Copyright 2020 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build ios
 | 
			
		||||
// +build ios
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
 | 
			
		||||
	return ENOTSUP
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										31
									
								
								vendor/golang.org/x/sys/unix/race.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								vendor/golang.org/x/sys/unix/race.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
// Copyright 2012 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build (darwin && race) || (linux && race) || (freebsd && race)
 | 
			
		||||
// +build darwin,race linux,race freebsd,race
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"runtime"
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const raceenabled = true
 | 
			
		||||
 | 
			
		||||
func raceAcquire(addr unsafe.Pointer) {
 | 
			
		||||
	runtime.RaceAcquire(addr)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func raceReleaseMerge(addr unsafe.Pointer) {
 | 
			
		||||
	runtime.RaceReleaseMerge(addr)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func raceReadRange(addr unsafe.Pointer, len int) {
 | 
			
		||||
	runtime.RaceReadRange(addr, len)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func raceWriteRange(addr unsafe.Pointer, len int) {
 | 
			
		||||
	runtime.RaceWriteRange(addr, len)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										26
									
								
								vendor/golang.org/x/sys/unix/race0.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								vendor/golang.org/x/sys/unix/race0.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
// Copyright 2012 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build aix || (darwin && !race) || (linux && !race) || (freebsd && !race) || netbsd || openbsd || solaris || dragonfly || zos
 | 
			
		||||
// +build aix darwin,!race linux,!race freebsd,!race netbsd openbsd solaris dragonfly zos
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const raceenabled = false
 | 
			
		||||
 | 
			
		||||
func raceAcquire(addr unsafe.Pointer) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func raceReleaseMerge(addr unsafe.Pointer) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func raceReadRange(addr unsafe.Pointer, len int) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func raceWriteRange(addr unsafe.Pointer, len int) {
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										13
									
								
								vendor/golang.org/x/sys/unix/readdirent_getdents.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								vendor/golang.org/x/sys/unix/readdirent_getdents.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
// Copyright 2019 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build aix || dragonfly || freebsd || linux || netbsd || openbsd
 | 
			
		||||
// +build aix dragonfly freebsd linux netbsd openbsd
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
// ReadDirent reads directory entries from fd and writes them into buf.
 | 
			
		||||
func ReadDirent(fd int, buf []byte) (n int, err error) {
 | 
			
		||||
	return Getdents(fd, buf)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										20
									
								
								vendor/golang.org/x/sys/unix/readdirent_getdirentries.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								vendor/golang.org/x/sys/unix/readdirent_getdirentries.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
// Copyright 2019 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build darwin
 | 
			
		||||
// +build darwin
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import "unsafe"
 | 
			
		||||
 | 
			
		||||
// ReadDirent reads directory entries from fd and writes them into buf.
 | 
			
		||||
func ReadDirent(fd int, buf []byte) (n int, err error) {
 | 
			
		||||
	// Final argument is (basep *uintptr) and the syscall doesn't take nil.
 | 
			
		||||
	// 64 bits should be enough. (32 bits isn't even on 386). Since the
 | 
			
		||||
	// actual system call is getdirentries64, 64 is a good guess.
 | 
			
		||||
	// TODO(rsc): Can we use a single global basep for all calls?
 | 
			
		||||
	var base = (*uintptr)(unsafe.Pointer(new(uint64)))
 | 
			
		||||
	return Getdirentries(fd, buf, base)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										16
									
								
								vendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								vendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
// Copyright 2019 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
// Round the length of a raw sockaddr up to align it properly.
 | 
			
		||||
func cmsgAlignOf(salen int) int {
 | 
			
		||||
	salign := SizeofPtr
 | 
			
		||||
	if SizeofPtr == 8 && !supportsABI(_dragonflyABIChangeVersion) {
 | 
			
		||||
		// 64-bit Dragonfly before the September 2019 ABI changes still requires
 | 
			
		||||
		// 32-bit aligned access to network subsystem.
 | 
			
		||||
		salign = 4
 | 
			
		||||
	}
 | 
			
		||||
	return (salen + salign - 1) & ^(salign - 1)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										36
									
								
								vendor/golang.org/x/sys/unix/sockcmsg_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								vendor/golang.org/x/sys/unix/sockcmsg_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
// Copyright 2011 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
// Socket control messages
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import "unsafe"
 | 
			
		||||
 | 
			
		||||
// UnixCredentials encodes credentials into a socket control message
 | 
			
		||||
// for sending to another process. This can be used for
 | 
			
		||||
// authentication.
 | 
			
		||||
func UnixCredentials(ucred *Ucred) []byte {
 | 
			
		||||
	b := make([]byte, CmsgSpace(SizeofUcred))
 | 
			
		||||
	h := (*Cmsghdr)(unsafe.Pointer(&b[0]))
 | 
			
		||||
	h.Level = SOL_SOCKET
 | 
			
		||||
	h.Type = SCM_CREDENTIALS
 | 
			
		||||
	h.SetLen(CmsgLen(SizeofUcred))
 | 
			
		||||
	*(*Ucred)(h.data(0)) = *ucred
 | 
			
		||||
	return b
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ParseUnixCredentials decodes a socket control message that contains
 | 
			
		||||
// credentials in a Ucred structure. To receive such a message, the
 | 
			
		||||
// SO_PASSCRED option must be enabled on the socket.
 | 
			
		||||
func ParseUnixCredentials(m *SocketControlMessage) (*Ucred, error) {
 | 
			
		||||
	if m.Header.Level != SOL_SOCKET {
 | 
			
		||||
		return nil, EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	if m.Header.Type != SCM_CREDENTIALS {
 | 
			
		||||
		return nil, EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	ucred := *(*Ucred)(unsafe.Pointer(&m.Data[0]))
 | 
			
		||||
	return &ucred, nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										93
									
								
								vendor/golang.org/x/sys/unix/sockcmsg_unix.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								vendor/golang.org/x/sys/unix/sockcmsg_unix.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,93 @@
 | 
			
		||||
// Copyright 2011 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos
 | 
			
		||||
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos
 | 
			
		||||
 | 
			
		||||
// Socket control messages
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// CmsgLen returns the value to store in the Len field of the Cmsghdr
 | 
			
		||||
// structure, taking into account any necessary alignment.
 | 
			
		||||
func CmsgLen(datalen int) int {
 | 
			
		||||
	return cmsgAlignOf(SizeofCmsghdr) + datalen
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CmsgSpace returns the number of bytes an ancillary element with
 | 
			
		||||
// payload of the passed data length occupies.
 | 
			
		||||
func CmsgSpace(datalen int) int {
 | 
			
		||||
	return cmsgAlignOf(SizeofCmsghdr) + cmsgAlignOf(datalen)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (h *Cmsghdr) data(offset uintptr) unsafe.Pointer {
 | 
			
		||||
	return unsafe.Pointer(uintptr(unsafe.Pointer(h)) + uintptr(cmsgAlignOf(SizeofCmsghdr)) + offset)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SocketControlMessage represents a socket control message.
 | 
			
		||||
type SocketControlMessage struct {
 | 
			
		||||
	Header Cmsghdr
 | 
			
		||||
	Data   []byte
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ParseSocketControlMessage parses b as an array of socket control
 | 
			
		||||
// messages.
 | 
			
		||||
func ParseSocketControlMessage(b []byte) ([]SocketControlMessage, error) {
 | 
			
		||||
	var msgs []SocketControlMessage
 | 
			
		||||
	i := 0
 | 
			
		||||
	for i+CmsgLen(0) <= len(b) {
 | 
			
		||||
		h, dbuf, err := socketControlMessageHeaderAndData(b[i:])
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		m := SocketControlMessage{Header: *h, Data: dbuf}
 | 
			
		||||
		msgs = append(msgs, m)
 | 
			
		||||
		i += cmsgAlignOf(int(h.Len))
 | 
			
		||||
	}
 | 
			
		||||
	return msgs, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func socketControlMessageHeaderAndData(b []byte) (*Cmsghdr, []byte, error) {
 | 
			
		||||
	h := (*Cmsghdr)(unsafe.Pointer(&b[0]))
 | 
			
		||||
	if h.Len < SizeofCmsghdr || uint64(h.Len) > uint64(len(b)) {
 | 
			
		||||
		return nil, nil, EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	return h, b[cmsgAlignOf(SizeofCmsghdr):h.Len], nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UnixRights encodes a set of open file descriptors into a socket
 | 
			
		||||
// control message for sending to another process.
 | 
			
		||||
func UnixRights(fds ...int) []byte {
 | 
			
		||||
	datalen := len(fds) * 4
 | 
			
		||||
	b := make([]byte, CmsgSpace(datalen))
 | 
			
		||||
	h := (*Cmsghdr)(unsafe.Pointer(&b[0]))
 | 
			
		||||
	h.Level = SOL_SOCKET
 | 
			
		||||
	h.Type = SCM_RIGHTS
 | 
			
		||||
	h.SetLen(CmsgLen(datalen))
 | 
			
		||||
	for i, fd := range fds {
 | 
			
		||||
		*(*int32)(h.data(4 * uintptr(i))) = int32(fd)
 | 
			
		||||
	}
 | 
			
		||||
	return b
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ParseUnixRights decodes a socket control message that contains an
 | 
			
		||||
// integer array of open file descriptors from another process.
 | 
			
		||||
func ParseUnixRights(m *SocketControlMessage) ([]int, error) {
 | 
			
		||||
	if m.Header.Level != SOL_SOCKET {
 | 
			
		||||
		return nil, EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	if m.Header.Type != SCM_RIGHTS {
 | 
			
		||||
		return nil, EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	fds := make([]int, len(m.Data)>>2)
 | 
			
		||||
	for i, j := 0, 0; i < len(m.Data); i += 4 {
 | 
			
		||||
		fds[j] = int(*(*int32)(unsafe.Pointer(&m.Data[i])))
 | 
			
		||||
		j++
 | 
			
		||||
	}
 | 
			
		||||
	return fds, nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										47
									
								
								vendor/golang.org/x/sys/unix/sockcmsg_unix_other.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								vendor/golang.org/x/sys/unix/sockcmsg_unix_other.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
			
		||||
// Copyright 2019 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build aix || darwin || freebsd || linux || netbsd || openbsd || solaris || zos
 | 
			
		||||
// +build aix darwin freebsd linux netbsd openbsd solaris zos
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"runtime"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Round the length of a raw sockaddr up to align it properly.
 | 
			
		||||
func cmsgAlignOf(salen int) int {
 | 
			
		||||
	salign := SizeofPtr
 | 
			
		||||
 | 
			
		||||
	// dragonfly needs to check ABI version at runtime, see cmsgAlignOf in
 | 
			
		||||
	// sockcmsg_dragonfly.go
 | 
			
		||||
	switch runtime.GOOS {
 | 
			
		||||
	case "aix":
 | 
			
		||||
		// There is no alignment on AIX.
 | 
			
		||||
		salign = 1
 | 
			
		||||
	case "darwin", "ios", "illumos", "solaris":
 | 
			
		||||
		// NOTE: It seems like 64-bit Darwin, Illumos and Solaris
 | 
			
		||||
		// kernels still require 32-bit aligned access to network
 | 
			
		||||
		// subsystem.
 | 
			
		||||
		if SizeofPtr == 8 {
 | 
			
		||||
			salign = 4
 | 
			
		||||
		}
 | 
			
		||||
	case "netbsd", "openbsd":
 | 
			
		||||
		// NetBSD and OpenBSD armv7 require 64-bit alignment.
 | 
			
		||||
		if runtime.GOARCH == "arm" {
 | 
			
		||||
			salign = 8
 | 
			
		||||
		}
 | 
			
		||||
		// NetBSD aarch64 requires 128-bit alignment.
 | 
			
		||||
		if runtime.GOOS == "netbsd" && runtime.GOARCH == "arm64" {
 | 
			
		||||
			salign = 16
 | 
			
		||||
		}
 | 
			
		||||
	case "zos":
 | 
			
		||||
		// z/OS socket macros use [32-bit] sizeof(int) alignment,
 | 
			
		||||
		// not pointer width.
 | 
			
		||||
		salign = SizeofInt
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return (salen + salign - 1) & ^(salign - 1)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										27
									
								
								vendor/golang.org/x/sys/unix/str.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								vendor/golang.org/x/sys/unix/str.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
// Copyright 2009 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris
 | 
			
		||||
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
func itoa(val int) string { // do it here rather than with fmt to avoid dependency
 | 
			
		||||
	if val < 0 {
 | 
			
		||||
		return "-" + uitoa(uint(-val))
 | 
			
		||||
	}
 | 
			
		||||
	return uitoa(uint(val))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func uitoa(val uint) string {
 | 
			
		||||
	var buf [32]byte // big enough for int64
 | 
			
		||||
	i := len(buf) - 1
 | 
			
		||||
	for val >= 10 {
 | 
			
		||||
		buf[i] = byte(val%10 + '0')
 | 
			
		||||
		i--
 | 
			
		||||
		val /= 10
 | 
			
		||||
	}
 | 
			
		||||
	buf[i] = byte(val + '0')
 | 
			
		||||
	return string(buf[i:])
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										95
									
								
								vendor/golang.org/x/sys/unix/syscall.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								vendor/golang.org/x/sys/unix/syscall.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,95 @@
 | 
			
		||||
// Copyright 2009 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos
 | 
			
		||||
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris zos
 | 
			
		||||
 | 
			
		||||
// Package unix contains an interface to the low-level operating system
 | 
			
		||||
// primitives. OS details vary depending on the underlying system, and
 | 
			
		||||
// by default, godoc will display OS-specific documentation for the current
 | 
			
		||||
// system. If you want godoc to display OS documentation for another
 | 
			
		||||
// system, set $GOOS and $GOARCH to the desired system. For example, if
 | 
			
		||||
// you want to view documentation for freebsd/arm on linux/amd64, set $GOOS
 | 
			
		||||
// to freebsd and $GOARCH to arm.
 | 
			
		||||
//
 | 
			
		||||
// The primary use of this package is inside other packages that provide a more
 | 
			
		||||
// portable interface to the system, such as "os", "time" and "net".  Use
 | 
			
		||||
// those packages rather than this one if you can.
 | 
			
		||||
//
 | 
			
		||||
// For details of the functions and data types in this package consult
 | 
			
		||||
// the manuals for the appropriate operating system.
 | 
			
		||||
//
 | 
			
		||||
// These calls return err == nil to indicate success; otherwise
 | 
			
		||||
// err represents an operating system error describing the failure and
 | 
			
		||||
// holds a value of type syscall.Errno.
 | 
			
		||||
package unix // import "golang.org/x/sys/unix"
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"unsafe"
 | 
			
		||||
 | 
			
		||||
	"golang.org/x/sys/internal/unsafeheader"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// ByteSliceFromString returns a NUL-terminated slice of bytes
 | 
			
		||||
// containing the text of s. If s contains a NUL byte at any
 | 
			
		||||
// location, it returns (nil, EINVAL).
 | 
			
		||||
func ByteSliceFromString(s string) ([]byte, error) {
 | 
			
		||||
	if strings.IndexByte(s, 0) != -1 {
 | 
			
		||||
		return nil, EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	a := make([]byte, len(s)+1)
 | 
			
		||||
	copy(a, s)
 | 
			
		||||
	return a, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// BytePtrFromString returns a pointer to a NUL-terminated array of
 | 
			
		||||
// bytes containing the text of s. If s contains a NUL byte at any
 | 
			
		||||
// location, it returns (nil, EINVAL).
 | 
			
		||||
func BytePtrFromString(s string) (*byte, error) {
 | 
			
		||||
	a, err := ByteSliceFromString(s)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return &a[0], nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ByteSliceToString returns a string form of the text represented by the slice s, with a terminating NUL and any
 | 
			
		||||
// bytes after the NUL removed.
 | 
			
		||||
func ByteSliceToString(s []byte) string {
 | 
			
		||||
	if i := bytes.IndexByte(s, 0); i != -1 {
 | 
			
		||||
		s = s[:i]
 | 
			
		||||
	}
 | 
			
		||||
	return string(s)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// BytePtrToString takes a pointer to a sequence of text and returns the corresponding string.
 | 
			
		||||
// If the pointer is nil, it returns the empty string. It assumes that the text sequence is terminated
 | 
			
		||||
// at a zero byte; if the zero byte is not present, the program may crash.
 | 
			
		||||
func BytePtrToString(p *byte) string {
 | 
			
		||||
	if p == nil {
 | 
			
		||||
		return ""
 | 
			
		||||
	}
 | 
			
		||||
	if *p == 0 {
 | 
			
		||||
		return ""
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Find NUL terminator.
 | 
			
		||||
	n := 0
 | 
			
		||||
	for ptr := unsafe.Pointer(p); *(*byte)(ptr) != 0; n++ {
 | 
			
		||||
		ptr = unsafe.Pointer(uintptr(ptr) + 1)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var s []byte
 | 
			
		||||
	h := (*unsafeheader.Slice)(unsafe.Pointer(&s))
 | 
			
		||||
	h.Data = unsafe.Pointer(p)
 | 
			
		||||
	h.Len = n
 | 
			
		||||
	h.Cap = n
 | 
			
		||||
 | 
			
		||||
	return string(s)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Single-word zero for use when we need a valid pointer to 0 bytes.
 | 
			
		||||
var _zero uintptr
 | 
			
		||||
							
								
								
									
										553
									
								
								vendor/golang.org/x/sys/unix/syscall_aix.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										553
									
								
								vendor/golang.org/x/sys/unix/syscall_aix.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,553 @@
 | 
			
		||||
// Copyright 2018 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build aix
 | 
			
		||||
// +build aix
 | 
			
		||||
 | 
			
		||||
// Aix system calls.
 | 
			
		||||
// This file is compiled as ordinary Go code,
 | 
			
		||||
// but it is also input to mksyscall,
 | 
			
		||||
// which parses the //sys lines and generates system call stubs.
 | 
			
		||||
// Note that sometimes we use a lowercase //sys name and
 | 
			
		||||
// wrap it in our own nicer implementation.
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import "unsafe"
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Wrapped
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
func Access(path string, mode uint32) (err error) {
 | 
			
		||||
	return Faccessat(AT_FDCWD, path, mode, 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Chmod(path string, mode uint32) (err error) {
 | 
			
		||||
	return Fchmodat(AT_FDCWD, path, mode, 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Chown(path string, uid int, gid int) (err error) {
 | 
			
		||||
	return Fchownat(AT_FDCWD, path, uid, gid, 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Creat(path string, mode uint32) (fd int, err error) {
 | 
			
		||||
	return Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	utimes(path string, times *[2]Timeval) (err error)
 | 
			
		||||
func Utimes(path string, tv []Timeval) error {
 | 
			
		||||
	if len(tv) != 2 {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error)
 | 
			
		||||
func UtimesNano(path string, ts []Timespec) error {
 | 
			
		||||
	if len(ts) != 2 {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {
 | 
			
		||||
	if ts == nil {
 | 
			
		||||
		return utimensat(dirfd, path, nil, flags)
 | 
			
		||||
	}
 | 
			
		||||
	if len(ts) != 2 {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {
 | 
			
		||||
	if sa.Port < 0 || sa.Port > 0xFFFF {
 | 
			
		||||
		return nil, 0, EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	sa.raw.Family = AF_INET
 | 
			
		||||
	p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
 | 
			
		||||
	p[0] = byte(sa.Port >> 8)
 | 
			
		||||
	p[1] = byte(sa.Port)
 | 
			
		||||
	for i := 0; i < len(sa.Addr); i++ {
 | 
			
		||||
		sa.raw.Addr[i] = sa.Addr[i]
 | 
			
		||||
	}
 | 
			
		||||
	return unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {
 | 
			
		||||
	if sa.Port < 0 || sa.Port > 0xFFFF {
 | 
			
		||||
		return nil, 0, EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	sa.raw.Family = AF_INET6
 | 
			
		||||
	p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
 | 
			
		||||
	p[0] = byte(sa.Port >> 8)
 | 
			
		||||
	p[1] = byte(sa.Port)
 | 
			
		||||
	sa.raw.Scope_id = sa.ZoneId
 | 
			
		||||
	for i := 0; i < len(sa.Addr); i++ {
 | 
			
		||||
		sa.raw.Addr[i] = sa.Addr[i]
 | 
			
		||||
	}
 | 
			
		||||
	return unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {
 | 
			
		||||
	name := sa.Name
 | 
			
		||||
	n := len(name)
 | 
			
		||||
	if n > len(sa.raw.Path) {
 | 
			
		||||
		return nil, 0, EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	if n == len(sa.raw.Path) && name[0] != '@' {
 | 
			
		||||
		return nil, 0, EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	sa.raw.Family = AF_UNIX
 | 
			
		||||
	for i := 0; i < n; i++ {
 | 
			
		||||
		sa.raw.Path[i] = uint8(name[i])
 | 
			
		||||
	}
 | 
			
		||||
	// length is family (uint16), name, NUL.
 | 
			
		||||
	sl := _Socklen(2)
 | 
			
		||||
	if n > 0 {
 | 
			
		||||
		sl += _Socklen(n) + 1
 | 
			
		||||
	}
 | 
			
		||||
	if sa.raw.Path[0] == '@' {
 | 
			
		||||
		sa.raw.Path[0] = 0
 | 
			
		||||
		// Don't count trailing NUL for abstract address.
 | 
			
		||||
		sl--
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return unsafe.Pointer(&sa.raw), sl, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Getsockname(fd int) (sa Sockaddr, err error) {
 | 
			
		||||
	var rsa RawSockaddrAny
 | 
			
		||||
	var len _Socklen = SizeofSockaddrAny
 | 
			
		||||
	if err = getsockname(fd, &rsa, &len); err != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	return anyToSockaddr(fd, &rsa)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	getcwd(buf []byte) (err error)
 | 
			
		||||
 | 
			
		||||
const ImplementsGetwd = true
 | 
			
		||||
 | 
			
		||||
func Getwd() (ret string, err error) {
 | 
			
		||||
	for len := uint64(4096); ; len *= 2 {
 | 
			
		||||
		b := make([]byte, len)
 | 
			
		||||
		err := getcwd(b)
 | 
			
		||||
		if err == nil {
 | 
			
		||||
			i := 0
 | 
			
		||||
			for b[i] != 0 {
 | 
			
		||||
				i++
 | 
			
		||||
			}
 | 
			
		||||
			return string(b[0:i]), nil
 | 
			
		||||
		}
 | 
			
		||||
		if err != ERANGE {
 | 
			
		||||
			return "", err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Getcwd(buf []byte) (n int, err error) {
 | 
			
		||||
	err = getcwd(buf)
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		i := 0
 | 
			
		||||
		for buf[i] != 0 {
 | 
			
		||||
			i++
 | 
			
		||||
		}
 | 
			
		||||
		n = i + 1
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Getgroups() (gids []int, err error) {
 | 
			
		||||
	n, err := getgroups(0, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if n == 0 {
 | 
			
		||||
		return nil, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Sanity check group count. Max is 16 on BSD.
 | 
			
		||||
	if n < 0 || n > 1000 {
 | 
			
		||||
		return nil, EINVAL
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	a := make([]_Gid_t, n)
 | 
			
		||||
	n, err = getgroups(n, &a[0])
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	gids = make([]int, n)
 | 
			
		||||
	for i, v := range a[0:n] {
 | 
			
		||||
		gids[i] = int(v)
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Setgroups(gids []int) (err error) {
 | 
			
		||||
	if len(gids) == 0 {
 | 
			
		||||
		return setgroups(0, nil)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	a := make([]_Gid_t, len(gids))
 | 
			
		||||
	for i, v := range gids {
 | 
			
		||||
		a[i] = _Gid_t(v)
 | 
			
		||||
	}
 | 
			
		||||
	return setgroups(len(a), &a[0])
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Socket
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
//sys	accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
 | 
			
		||||
 | 
			
		||||
func Accept(fd int) (nfd int, sa Sockaddr, err error) {
 | 
			
		||||
	var rsa RawSockaddrAny
 | 
			
		||||
	var len _Socklen = SizeofSockaddrAny
 | 
			
		||||
	nfd, err = accept(fd, &rsa, &len)
 | 
			
		||||
	if nfd == -1 {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	sa, err = anyToSockaddr(fd, &rsa)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		Close(nfd)
 | 
			
		||||
		nfd = 0
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
 | 
			
		||||
	// Recvmsg not implemented on AIX
 | 
			
		||||
	sa := new(SockaddrUnix)
 | 
			
		||||
	return -1, -1, -1, sa, ENOSYS
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) {
 | 
			
		||||
	_, err = SendmsgN(fd, p, oob, to, flags)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) {
 | 
			
		||||
	// SendmsgN not implemented on AIX
 | 
			
		||||
	return -1, ENOSYS
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
 | 
			
		||||
	switch rsa.Addr.Family {
 | 
			
		||||
 | 
			
		||||
	case AF_UNIX:
 | 
			
		||||
		pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))
 | 
			
		||||
		sa := new(SockaddrUnix)
 | 
			
		||||
 | 
			
		||||
		// Some versions of AIX have a bug in getsockname (see IV78655).
 | 
			
		||||
		// We can't rely on sa.Len being set correctly.
 | 
			
		||||
		n := SizeofSockaddrUnix - 3 // subtract leading Family, Len, terminating NUL.
 | 
			
		||||
		for i := 0; i < n; i++ {
 | 
			
		||||
			if pp.Path[i] == 0 {
 | 
			
		||||
				n = i
 | 
			
		||||
				break
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
 | 
			
		||||
		sa.Name = string(bytes)
 | 
			
		||||
		return sa, nil
 | 
			
		||||
 | 
			
		||||
	case AF_INET:
 | 
			
		||||
		pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))
 | 
			
		||||
		sa := new(SockaddrInet4)
 | 
			
		||||
		p := (*[2]byte)(unsafe.Pointer(&pp.Port))
 | 
			
		||||
		sa.Port = int(p[0])<<8 + int(p[1])
 | 
			
		||||
		for i := 0; i < len(sa.Addr); i++ {
 | 
			
		||||
			sa.Addr[i] = pp.Addr[i]
 | 
			
		||||
		}
 | 
			
		||||
		return sa, nil
 | 
			
		||||
 | 
			
		||||
	case AF_INET6:
 | 
			
		||||
		pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))
 | 
			
		||||
		sa := new(SockaddrInet6)
 | 
			
		||||
		p := (*[2]byte)(unsafe.Pointer(&pp.Port))
 | 
			
		||||
		sa.Port = int(p[0])<<8 + int(p[1])
 | 
			
		||||
		sa.ZoneId = pp.Scope_id
 | 
			
		||||
		for i := 0; i < len(sa.Addr); i++ {
 | 
			
		||||
			sa.Addr[i] = pp.Addr[i]
 | 
			
		||||
		}
 | 
			
		||||
		return sa, nil
 | 
			
		||||
	}
 | 
			
		||||
	return nil, EAFNOSUPPORT
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Gettimeofday(tv *Timeval) (err error) {
 | 
			
		||||
	err = gettimeofday(tv, nil)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
 | 
			
		||||
	if raceenabled {
 | 
			
		||||
		raceReleaseMerge(unsafe.Pointer(&ioSync))
 | 
			
		||||
	}
 | 
			
		||||
	return sendfile(outfd, infd, offset, count)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TODO
 | 
			
		||||
func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
 | 
			
		||||
	return -1, ENOSYS
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func direntIno(buf []byte) (uint64, bool) {
 | 
			
		||||
	return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func direntReclen(buf []byte) (uint64, bool) {
 | 
			
		||||
	return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func direntNamlen(buf []byte) (uint64, bool) {
 | 
			
		||||
	reclen, ok := direntReclen(buf)
 | 
			
		||||
	if !ok {
 | 
			
		||||
		return 0, false
 | 
			
		||||
	}
 | 
			
		||||
	return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	getdirent(fd int, buf []byte) (n int, err error)
 | 
			
		||||
func Getdents(fd int, buf []byte) (n int, err error) {
 | 
			
		||||
	return getdirent(fd, buf)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error)
 | 
			
		||||
func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {
 | 
			
		||||
	var status _C_int
 | 
			
		||||
	var r Pid_t
 | 
			
		||||
	err = ERESTART
 | 
			
		||||
	// AIX wait4 may return with ERESTART errno, while the processus is still
 | 
			
		||||
	// active.
 | 
			
		||||
	for err == ERESTART {
 | 
			
		||||
		r, err = wait4(Pid_t(pid), &status, options, rusage)
 | 
			
		||||
	}
 | 
			
		||||
	wpid = int(r)
 | 
			
		||||
	if wstatus != nil {
 | 
			
		||||
		*wstatus = WaitStatus(status)
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Wait
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
type WaitStatus uint32
 | 
			
		||||
 | 
			
		||||
func (w WaitStatus) Stopped() bool { return w&0x40 != 0 }
 | 
			
		||||
func (w WaitStatus) StopSignal() Signal {
 | 
			
		||||
	if !w.Stopped() {
 | 
			
		||||
		return -1
 | 
			
		||||
	}
 | 
			
		||||
	return Signal(w>>8) & 0xFF
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (w WaitStatus) Exited() bool { return w&0xFF == 0 }
 | 
			
		||||
func (w WaitStatus) ExitStatus() int {
 | 
			
		||||
	if !w.Exited() {
 | 
			
		||||
		return -1
 | 
			
		||||
	}
 | 
			
		||||
	return int((w >> 8) & 0xFF)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (w WaitStatus) Signaled() bool { return w&0x40 == 0 && w&0xFF != 0 }
 | 
			
		||||
func (w WaitStatus) Signal() Signal {
 | 
			
		||||
	if !w.Signaled() {
 | 
			
		||||
		return -1
 | 
			
		||||
	}
 | 
			
		||||
	return Signal(w>>16) & 0xFF
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (w WaitStatus) Continued() bool { return w&0x01000000 != 0 }
 | 
			
		||||
 | 
			
		||||
func (w WaitStatus) CoreDump() bool { return w&0x80 == 0x80 }
 | 
			
		||||
 | 
			
		||||
func (w WaitStatus) TrapCause() int { return -1 }
 | 
			
		||||
 | 
			
		||||
//sys	ioctl(fd int, req uint, arg uintptr) (err error)
 | 
			
		||||
 | 
			
		||||
// fcntl must never be called with cmd=F_DUP2FD because it doesn't work on AIX
 | 
			
		||||
// There is no way to create a custom fcntl and to keep //sys fcntl easily,
 | 
			
		||||
// Therefore, the programmer must call dup2 instead of fcntl in this case.
 | 
			
		||||
 | 
			
		||||
// FcntlInt performs a fcntl syscall on fd with the provided command and argument.
 | 
			
		||||
//sys	FcntlInt(fd uintptr, cmd int, arg int) (r int,err error) = fcntl
 | 
			
		||||
 | 
			
		||||
// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.
 | 
			
		||||
//sys	FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) = fcntl
 | 
			
		||||
 | 
			
		||||
//sys	fcntl(fd int, cmd int, arg int) (val int, err error)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Direct access
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
//sys	Acct(path string) (err error)
 | 
			
		||||
//sys	Chdir(path string) (err error)
 | 
			
		||||
//sys	Chroot(path string) (err error)
 | 
			
		||||
//sys	Close(fd int) (err error)
 | 
			
		||||
//sys	Dup(oldfd int) (fd int, err error)
 | 
			
		||||
//sys	Exit(code int)
 | 
			
		||||
//sys	Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
 | 
			
		||||
//sys	Fchdir(fd int) (err error)
 | 
			
		||||
//sys	Fchmod(fd int, mode uint32) (err error)
 | 
			
		||||
//sys	Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
 | 
			
		||||
//sys	Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
 | 
			
		||||
//sys	Fdatasync(fd int) (err error)
 | 
			
		||||
//sys	Fsync(fd int) (err error)
 | 
			
		||||
// readdir_r
 | 
			
		||||
//sysnb	Getpgid(pid int) (pgid int, err error)
 | 
			
		||||
 | 
			
		||||
//sys	Getpgrp() (pid int)
 | 
			
		||||
 | 
			
		||||
//sysnb	Getpid() (pid int)
 | 
			
		||||
//sysnb	Getppid() (ppid int)
 | 
			
		||||
//sys	Getpriority(which int, who int) (prio int, err error)
 | 
			
		||||
//sysnb	Getrusage(who int, rusage *Rusage) (err error)
 | 
			
		||||
//sysnb	Getsid(pid int) (sid int, err error)
 | 
			
		||||
//sysnb	Kill(pid int, sig Signal) (err error)
 | 
			
		||||
//sys	Klogctl(typ int, buf []byte) (n int, err error) = syslog
 | 
			
		||||
//sys	Mkdir(dirfd int, path string, mode uint32) (err error)
 | 
			
		||||
//sys	Mkdirat(dirfd int, path string, mode uint32) (err error)
 | 
			
		||||
//sys	Mkfifo(path string, mode uint32) (err error)
 | 
			
		||||
//sys	Mknod(path string, mode uint32, dev int) (err error)
 | 
			
		||||
//sys	Mknodat(dirfd int, path string, mode uint32, dev int) (err error)
 | 
			
		||||
//sys	Nanosleep(time *Timespec, leftover *Timespec) (err error)
 | 
			
		||||
//sys	Open(path string, mode int, perm uint32) (fd int, err error) = open64
 | 
			
		||||
//sys	Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
 | 
			
		||||
//sys	read(fd int, p []byte) (n int, err error)
 | 
			
		||||
//sys	Readlink(path string, buf []byte) (n int, err error)
 | 
			
		||||
//sys	Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
 | 
			
		||||
//sys	Setdomainname(p []byte) (err error)
 | 
			
		||||
//sys	Sethostname(p []byte) (err error)
 | 
			
		||||
//sysnb	Setpgid(pid int, pgid int) (err error)
 | 
			
		||||
//sysnb	Setsid() (pid int, err error)
 | 
			
		||||
//sysnb	Settimeofday(tv *Timeval) (err error)
 | 
			
		||||
 | 
			
		||||
//sys	Setuid(uid int) (err error)
 | 
			
		||||
//sys	Setgid(uid int) (err error)
 | 
			
		||||
 | 
			
		||||
//sys	Setpriority(which int, who int, prio int) (err error)
 | 
			
		||||
//sys	Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error)
 | 
			
		||||
//sys	Sync()
 | 
			
		||||
//sysnb	Times(tms *Tms) (ticks uintptr, err error)
 | 
			
		||||
//sysnb	Umask(mask int) (oldmask int)
 | 
			
		||||
//sysnb	Uname(buf *Utsname) (err error)
 | 
			
		||||
//sys	Unlink(path string) (err error)
 | 
			
		||||
//sys	Unlinkat(dirfd int, path string, flags int) (err error)
 | 
			
		||||
//sys	Ustat(dev int, ubuf *Ustat_t) (err error)
 | 
			
		||||
//sys	write(fd int, p []byte) (n int, err error)
 | 
			
		||||
//sys	readlen(fd int, p *byte, np int) (n int, err error) = read
 | 
			
		||||
//sys	writelen(fd int, p *byte, np int) (n int, err error) = write
 | 
			
		||||
 | 
			
		||||
//sys	Dup2(oldfd int, newfd int) (err error)
 | 
			
		||||
//sys	Fadvise(fd int, offset int64, length int64, advice int) (err error) = posix_fadvise64
 | 
			
		||||
//sys	Fchown(fd int, uid int, gid int) (err error)
 | 
			
		||||
//sys	fstat(fd int, stat *Stat_t) (err error)
 | 
			
		||||
//sys	fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = fstatat
 | 
			
		||||
//sys	Fstatfs(fd int, buf *Statfs_t) (err error)
 | 
			
		||||
//sys	Ftruncate(fd int, length int64) (err error)
 | 
			
		||||
//sysnb	Getegid() (egid int)
 | 
			
		||||
//sysnb	Geteuid() (euid int)
 | 
			
		||||
//sysnb	Getgid() (gid int)
 | 
			
		||||
//sysnb	Getuid() (uid int)
 | 
			
		||||
//sys	Lchown(path string, uid int, gid int) (err error)
 | 
			
		||||
//sys	Listen(s int, n int) (err error)
 | 
			
		||||
//sys	lstat(path string, stat *Stat_t) (err error)
 | 
			
		||||
//sys	Pause() (err error)
 | 
			
		||||
//sys	Pread(fd int, p []byte, offset int64) (n int, err error) = pread64
 | 
			
		||||
//sys	Pwrite(fd int, p []byte, offset int64) (n int, err error) = pwrite64
 | 
			
		||||
//sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
 | 
			
		||||
//sys	Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error)
 | 
			
		||||
//sysnb	Setregid(rgid int, egid int) (err error)
 | 
			
		||||
//sysnb	Setreuid(ruid int, euid int) (err error)
 | 
			
		||||
//sys	Shutdown(fd int, how int) (err error)
 | 
			
		||||
//sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
 | 
			
		||||
//sys	stat(path string, statptr *Stat_t) (err error)
 | 
			
		||||
//sys	Statfs(path string, buf *Statfs_t) (err error)
 | 
			
		||||
//sys	Truncate(path string, length int64) (err error)
 | 
			
		||||
 | 
			
		||||
//sys	bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
 | 
			
		||||
//sys	connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
 | 
			
		||||
//sysnb	getgroups(n int, list *_Gid_t) (nn int, err error)
 | 
			
		||||
//sysnb	setgroups(n int, list *_Gid_t) (err error)
 | 
			
		||||
//sys	getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
 | 
			
		||||
//sys	setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
 | 
			
		||||
//sysnb	socket(domain int, typ int, proto int) (fd int, err error)
 | 
			
		||||
//sysnb	socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
 | 
			
		||||
//sysnb	getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
 | 
			
		||||
//sysnb	getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
 | 
			
		||||
//sys	recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
 | 
			
		||||
//sys	sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
 | 
			
		||||
 | 
			
		||||
// In order to use msghdr structure with Control, Controllen, nrecvmsg and nsendmsg must be used.
 | 
			
		||||
//sys	recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = nrecvmsg
 | 
			
		||||
//sys	sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = nsendmsg
 | 
			
		||||
 | 
			
		||||
//sys	munmap(addr uintptr, length uintptr) (err error)
 | 
			
		||||
 | 
			
		||||
var mapper = &mmapper{
 | 
			
		||||
	active: make(map[*byte][]byte),
 | 
			
		||||
	mmap:   mmap,
 | 
			
		||||
	munmap: munmap,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {
 | 
			
		||||
	return mapper.Mmap(fd, offset, length, prot, flags)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Munmap(b []byte) (err error) {
 | 
			
		||||
	return mapper.Munmap(b)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	Madvise(b []byte, advice int) (err error)
 | 
			
		||||
//sys	Mprotect(b []byte, prot int) (err error)
 | 
			
		||||
//sys	Mlock(b []byte) (err error)
 | 
			
		||||
//sys	Mlockall(flags int) (err error)
 | 
			
		||||
//sys	Msync(b []byte, flags int) (err error)
 | 
			
		||||
//sys	Munlock(b []byte) (err error)
 | 
			
		||||
//sys	Munlockall() (err error)
 | 
			
		||||
 | 
			
		||||
//sysnb	pipe(p *[2]_C_int) (err error)
 | 
			
		||||
 | 
			
		||||
func Pipe(p []int) (err error) {
 | 
			
		||||
	if len(p) != 2 {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	var pp [2]_C_int
 | 
			
		||||
	err = pipe(&pp)
 | 
			
		||||
	p[0] = int(pp[0])
 | 
			
		||||
	p[1] = int(pp[1])
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	poll(fds *PollFd, nfds int, timeout int) (n int, err error)
 | 
			
		||||
 | 
			
		||||
func Poll(fds []PollFd, timeout int) (n int, err error) {
 | 
			
		||||
	if len(fds) == 0 {
 | 
			
		||||
		return poll(nil, 0, timeout)
 | 
			
		||||
	}
 | 
			
		||||
	return poll(&fds[0], len(fds), timeout)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	gettimeofday(tv *Timeval, tzp *Timezone) (err error)
 | 
			
		||||
//sysnb	Time(t *Time_t) (tt Time_t, err error)
 | 
			
		||||
//sys	Utime(path string, buf *Utimbuf) (err error)
 | 
			
		||||
 | 
			
		||||
//sys	Getsystemcfg(label int) (n uint64)
 | 
			
		||||
 | 
			
		||||
//sys	umount(target string) (err error)
 | 
			
		||||
func Unmount(target string, flags int) (err error) {
 | 
			
		||||
	if flags != 0 {
 | 
			
		||||
		// AIX doesn't have any flags for umount.
 | 
			
		||||
		return ENOSYS
 | 
			
		||||
	}
 | 
			
		||||
	return umount(target)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										54
									
								
								vendor/golang.org/x/sys/unix/syscall_aix_ppc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								vendor/golang.org/x/sys/unix/syscall_aix_ppc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
// Copyright 2018 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build aix && ppc
 | 
			
		||||
// +build aix,ppc
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
//sysnb	Getrlimit(resource int, rlim *Rlimit) (err error) = getrlimit64
 | 
			
		||||
//sysnb	Setrlimit(resource int, rlim *Rlimit) (err error) = setrlimit64
 | 
			
		||||
//sys	Seek(fd int, offset int64, whence int) (off int64, err error) = lseek64
 | 
			
		||||
 | 
			
		||||
//sys	mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)
 | 
			
		||||
 | 
			
		||||
func setTimespec(sec, nsec int64) Timespec {
 | 
			
		||||
	return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setTimeval(sec, usec int64) Timeval {
 | 
			
		||||
	return Timeval{Sec: int32(sec), Usec: int32(usec)}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (iov *Iovec) SetLen(length int) {
 | 
			
		||||
	iov.Len = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetControllen(length int) {
 | 
			
		||||
	msghdr.Controllen = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetIovlen(length int) {
 | 
			
		||||
	msghdr.Iovlen = int32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (cmsg *Cmsghdr) SetLen(length int) {
 | 
			
		||||
	cmsg.Len = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Fstat(fd int, stat *Stat_t) error {
 | 
			
		||||
	return fstat(fd, stat)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Fstatat(dirfd int, path string, stat *Stat_t, flags int) error {
 | 
			
		||||
	return fstatat(dirfd, path, stat, flags)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Lstat(path string, stat *Stat_t) error {
 | 
			
		||||
	return lstat(path, stat)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Stat(path string, statptr *Stat_t) error {
 | 
			
		||||
	return stat(path, statptr)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										85
									
								
								vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,85 @@
 | 
			
		||||
// Copyright 2018 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build aix && ppc64
 | 
			
		||||
// +build aix,ppc64
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
//sysnb	Getrlimit(resource int, rlim *Rlimit) (err error)
 | 
			
		||||
//sysnb	Setrlimit(resource int, rlim *Rlimit) (err error)
 | 
			
		||||
//sys	Seek(fd int, offset int64, whence int) (off int64, err error) = lseek
 | 
			
		||||
 | 
			
		||||
//sys	mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) = mmap64
 | 
			
		||||
 | 
			
		||||
func setTimespec(sec, nsec int64) Timespec {
 | 
			
		||||
	return Timespec{Sec: sec, Nsec: nsec}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setTimeval(sec, usec int64) Timeval {
 | 
			
		||||
	return Timeval{Sec: int64(sec), Usec: int32(usec)}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (iov *Iovec) SetLen(length int) {
 | 
			
		||||
	iov.Len = uint64(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetControllen(length int) {
 | 
			
		||||
	msghdr.Controllen = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetIovlen(length int) {
 | 
			
		||||
	msghdr.Iovlen = int32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (cmsg *Cmsghdr) SetLen(length int) {
 | 
			
		||||
	cmsg.Len = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// In order to only have Timespec structure, type of Stat_t's fields
 | 
			
		||||
// Atim, Mtim and Ctim is changed from StTimespec to Timespec during
 | 
			
		||||
// ztypes generation.
 | 
			
		||||
// On ppc64, Timespec.Nsec is an int64 while StTimespec.Nsec is an
 | 
			
		||||
// int32, so the fields' value must be modified.
 | 
			
		||||
func fixStatTimFields(stat *Stat_t) {
 | 
			
		||||
	stat.Atim.Nsec >>= 32
 | 
			
		||||
	stat.Mtim.Nsec >>= 32
 | 
			
		||||
	stat.Ctim.Nsec >>= 32
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Fstat(fd int, stat *Stat_t) error {
 | 
			
		||||
	err := fstat(fd, stat)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	fixStatTimFields(stat)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Fstatat(dirfd int, path string, stat *Stat_t, flags int) error {
 | 
			
		||||
	err := fstatat(dirfd, path, stat, flags)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	fixStatTimFields(stat)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Lstat(path string, stat *Stat_t) error {
 | 
			
		||||
	err := lstat(path, stat)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	fixStatTimFields(stat)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Stat(path string, statptr *Stat_t) error {
 | 
			
		||||
	err := stat(path, statptr)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	fixStatTimFields(statptr)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										664
									
								
								vendor/golang.org/x/sys/unix/syscall_bsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										664
									
								
								vendor/golang.org/x/sys/unix/syscall_bsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,664 @@
 | 
			
		||||
// Copyright 2009 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build darwin || dragonfly || freebsd || netbsd || openbsd
 | 
			
		||||
// +build darwin dragonfly freebsd netbsd openbsd
 | 
			
		||||
 | 
			
		||||
// BSD system call wrappers shared by *BSD based systems
 | 
			
		||||
// including OS X (Darwin) and FreeBSD.  Like the other
 | 
			
		||||
// syscall_*.go files it is compiled as Go code but also
 | 
			
		||||
// used as input to mksyscall which parses the //sys
 | 
			
		||||
// lines and generates system call stubs.
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"runtime"
 | 
			
		||||
	"syscall"
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const ImplementsGetwd = true
 | 
			
		||||
 | 
			
		||||
func Getwd() (string, error) {
 | 
			
		||||
	var buf [PathMax]byte
 | 
			
		||||
	_, err := Getcwd(buf[0:])
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
	n := clen(buf[:])
 | 
			
		||||
	if n < 1 {
 | 
			
		||||
		return "", EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	return string(buf[:n]), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Wrapped
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
//sysnb	getgroups(ngid int, gid *_Gid_t) (n int, err error)
 | 
			
		||||
//sysnb	setgroups(ngid int, gid *_Gid_t) (err error)
 | 
			
		||||
 | 
			
		||||
func Getgroups() (gids []int, err error) {
 | 
			
		||||
	n, err := getgroups(0, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if n == 0 {
 | 
			
		||||
		return nil, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Sanity check group count. Max is 16 on BSD.
 | 
			
		||||
	if n < 0 || n > 1000 {
 | 
			
		||||
		return nil, EINVAL
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	a := make([]_Gid_t, n)
 | 
			
		||||
	n, err = getgroups(n, &a[0])
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	gids = make([]int, n)
 | 
			
		||||
	for i, v := range a[0:n] {
 | 
			
		||||
		gids[i] = int(v)
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Setgroups(gids []int) (err error) {
 | 
			
		||||
	if len(gids) == 0 {
 | 
			
		||||
		return setgroups(0, nil)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	a := make([]_Gid_t, len(gids))
 | 
			
		||||
	for i, v := range gids {
 | 
			
		||||
		a[i] = _Gid_t(v)
 | 
			
		||||
	}
 | 
			
		||||
	return setgroups(len(a), &a[0])
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Wait status is 7 bits at bottom, either 0 (exited),
 | 
			
		||||
// 0x7F (stopped), or a signal number that caused an exit.
 | 
			
		||||
// The 0x80 bit is whether there was a core dump.
 | 
			
		||||
// An extra number (exit code, signal causing a stop)
 | 
			
		||||
// is in the high bits.
 | 
			
		||||
 | 
			
		||||
type WaitStatus uint32
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	mask  = 0x7F
 | 
			
		||||
	core  = 0x80
 | 
			
		||||
	shift = 8
 | 
			
		||||
 | 
			
		||||
	exited  = 0
 | 
			
		||||
	killed  = 9
 | 
			
		||||
	stopped = 0x7F
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func (w WaitStatus) Exited() bool { return w&mask == exited }
 | 
			
		||||
 | 
			
		||||
func (w WaitStatus) ExitStatus() int {
 | 
			
		||||
	if w&mask != exited {
 | 
			
		||||
		return -1
 | 
			
		||||
	}
 | 
			
		||||
	return int(w >> shift)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != 0 }
 | 
			
		||||
 | 
			
		||||
func (w WaitStatus) Signal() syscall.Signal {
 | 
			
		||||
	sig := syscall.Signal(w & mask)
 | 
			
		||||
	if sig == stopped || sig == 0 {
 | 
			
		||||
		return -1
 | 
			
		||||
	}
 | 
			
		||||
	return sig
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 }
 | 
			
		||||
 | 
			
		||||
func (w WaitStatus) Stopped() bool { return w&mask == stopped && syscall.Signal(w>>shift) != SIGSTOP }
 | 
			
		||||
 | 
			
		||||
func (w WaitStatus) Killed() bool { return w&mask == killed && syscall.Signal(w>>shift) != SIGKILL }
 | 
			
		||||
 | 
			
		||||
func (w WaitStatus) Continued() bool { return w&mask == stopped && syscall.Signal(w>>shift) == SIGSTOP }
 | 
			
		||||
 | 
			
		||||
func (w WaitStatus) StopSignal() syscall.Signal {
 | 
			
		||||
	if !w.Stopped() {
 | 
			
		||||
		return -1
 | 
			
		||||
	}
 | 
			
		||||
	return syscall.Signal(w>>shift) & 0xFF
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (w WaitStatus) TrapCause() int { return -1 }
 | 
			
		||||
 | 
			
		||||
//sys	wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error)
 | 
			
		||||
 | 
			
		||||
func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {
 | 
			
		||||
	var status _C_int
 | 
			
		||||
	wpid, err = wait4(pid, &status, options, rusage)
 | 
			
		||||
	if wstatus != nil {
 | 
			
		||||
		*wstatus = WaitStatus(status)
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
 | 
			
		||||
//sys	bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
 | 
			
		||||
//sys	connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
 | 
			
		||||
//sysnb	socket(domain int, typ int, proto int) (fd int, err error)
 | 
			
		||||
//sys	getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
 | 
			
		||||
//sys	setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
 | 
			
		||||
//sysnb	getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
 | 
			
		||||
//sysnb	getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
 | 
			
		||||
//sys	Shutdown(s int, how int) (err error)
 | 
			
		||||
 | 
			
		||||
func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {
 | 
			
		||||
	if sa.Port < 0 || sa.Port > 0xFFFF {
 | 
			
		||||
		return nil, 0, EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	sa.raw.Len = SizeofSockaddrInet4
 | 
			
		||||
	sa.raw.Family = AF_INET
 | 
			
		||||
	p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
 | 
			
		||||
	p[0] = byte(sa.Port >> 8)
 | 
			
		||||
	p[1] = byte(sa.Port)
 | 
			
		||||
	for i := 0; i < len(sa.Addr); i++ {
 | 
			
		||||
		sa.raw.Addr[i] = sa.Addr[i]
 | 
			
		||||
	}
 | 
			
		||||
	return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {
 | 
			
		||||
	if sa.Port < 0 || sa.Port > 0xFFFF {
 | 
			
		||||
		return nil, 0, EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	sa.raw.Len = SizeofSockaddrInet6
 | 
			
		||||
	sa.raw.Family = AF_INET6
 | 
			
		||||
	p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
 | 
			
		||||
	p[0] = byte(sa.Port >> 8)
 | 
			
		||||
	p[1] = byte(sa.Port)
 | 
			
		||||
	sa.raw.Scope_id = sa.ZoneId
 | 
			
		||||
	for i := 0; i < len(sa.Addr); i++ {
 | 
			
		||||
		sa.raw.Addr[i] = sa.Addr[i]
 | 
			
		||||
	}
 | 
			
		||||
	return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {
 | 
			
		||||
	name := sa.Name
 | 
			
		||||
	n := len(name)
 | 
			
		||||
	if n >= len(sa.raw.Path) || n == 0 {
 | 
			
		||||
		return nil, 0, EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	sa.raw.Len = byte(3 + n) // 2 for Family, Len; 1 for NUL
 | 
			
		||||
	sa.raw.Family = AF_UNIX
 | 
			
		||||
	for i := 0; i < n; i++ {
 | 
			
		||||
		sa.raw.Path[i] = int8(name[i])
 | 
			
		||||
	}
 | 
			
		||||
	return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (sa *SockaddrDatalink) sockaddr() (unsafe.Pointer, _Socklen, error) {
 | 
			
		||||
	if sa.Index == 0 {
 | 
			
		||||
		return nil, 0, EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	sa.raw.Len = sa.Len
 | 
			
		||||
	sa.raw.Family = AF_LINK
 | 
			
		||||
	sa.raw.Index = sa.Index
 | 
			
		||||
	sa.raw.Type = sa.Type
 | 
			
		||||
	sa.raw.Nlen = sa.Nlen
 | 
			
		||||
	sa.raw.Alen = sa.Alen
 | 
			
		||||
	sa.raw.Slen = sa.Slen
 | 
			
		||||
	for i := 0; i < len(sa.raw.Data); i++ {
 | 
			
		||||
		sa.raw.Data[i] = sa.Data[i]
 | 
			
		||||
	}
 | 
			
		||||
	return unsafe.Pointer(&sa.raw), SizeofSockaddrDatalink, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
 | 
			
		||||
	switch rsa.Addr.Family {
 | 
			
		||||
	case AF_LINK:
 | 
			
		||||
		pp := (*RawSockaddrDatalink)(unsafe.Pointer(rsa))
 | 
			
		||||
		sa := new(SockaddrDatalink)
 | 
			
		||||
		sa.Len = pp.Len
 | 
			
		||||
		sa.Family = pp.Family
 | 
			
		||||
		sa.Index = pp.Index
 | 
			
		||||
		sa.Type = pp.Type
 | 
			
		||||
		sa.Nlen = pp.Nlen
 | 
			
		||||
		sa.Alen = pp.Alen
 | 
			
		||||
		sa.Slen = pp.Slen
 | 
			
		||||
		for i := 0; i < len(sa.Data); i++ {
 | 
			
		||||
			sa.Data[i] = pp.Data[i]
 | 
			
		||||
		}
 | 
			
		||||
		return sa, nil
 | 
			
		||||
 | 
			
		||||
	case AF_UNIX:
 | 
			
		||||
		pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))
 | 
			
		||||
		if pp.Len < 2 || pp.Len > SizeofSockaddrUnix {
 | 
			
		||||
			return nil, EINVAL
 | 
			
		||||
		}
 | 
			
		||||
		sa := new(SockaddrUnix)
 | 
			
		||||
 | 
			
		||||
		// Some BSDs include the trailing NUL in the length, whereas
 | 
			
		||||
		// others do not. Work around this by subtracting the leading
 | 
			
		||||
		// family and len. The path is then scanned to see if a NUL
 | 
			
		||||
		// terminator still exists within the length.
 | 
			
		||||
		n := int(pp.Len) - 2 // subtract leading Family, Len
 | 
			
		||||
		for i := 0; i < n; i++ {
 | 
			
		||||
			if pp.Path[i] == 0 {
 | 
			
		||||
				// found early NUL; assume Len included the NUL
 | 
			
		||||
				// or was overestimating.
 | 
			
		||||
				n = i
 | 
			
		||||
				break
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
 | 
			
		||||
		sa.Name = string(bytes)
 | 
			
		||||
		return sa, nil
 | 
			
		||||
 | 
			
		||||
	case AF_INET:
 | 
			
		||||
		pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))
 | 
			
		||||
		sa := new(SockaddrInet4)
 | 
			
		||||
		p := (*[2]byte)(unsafe.Pointer(&pp.Port))
 | 
			
		||||
		sa.Port = int(p[0])<<8 + int(p[1])
 | 
			
		||||
		for i := 0; i < len(sa.Addr); i++ {
 | 
			
		||||
			sa.Addr[i] = pp.Addr[i]
 | 
			
		||||
		}
 | 
			
		||||
		return sa, nil
 | 
			
		||||
 | 
			
		||||
	case AF_INET6:
 | 
			
		||||
		pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))
 | 
			
		||||
		sa := new(SockaddrInet6)
 | 
			
		||||
		p := (*[2]byte)(unsafe.Pointer(&pp.Port))
 | 
			
		||||
		sa.Port = int(p[0])<<8 + int(p[1])
 | 
			
		||||
		sa.ZoneId = pp.Scope_id
 | 
			
		||||
		for i := 0; i < len(sa.Addr); i++ {
 | 
			
		||||
			sa.Addr[i] = pp.Addr[i]
 | 
			
		||||
		}
 | 
			
		||||
		return sa, nil
 | 
			
		||||
	}
 | 
			
		||||
	return anyToSockaddrGOOS(fd, rsa)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Accept(fd int) (nfd int, sa Sockaddr, err error) {
 | 
			
		||||
	var rsa RawSockaddrAny
 | 
			
		||||
	var len _Socklen = SizeofSockaddrAny
 | 
			
		||||
	nfd, err = accept(fd, &rsa, &len)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if (runtime.GOOS == "darwin" || runtime.GOOS == "ios") && len == 0 {
 | 
			
		||||
		// Accepted socket has no address.
 | 
			
		||||
		// This is likely due to a bug in xnu kernels,
 | 
			
		||||
		// where instead of ECONNABORTED error socket
 | 
			
		||||
		// is accepted, but has no address.
 | 
			
		||||
		Close(nfd)
 | 
			
		||||
		return 0, nil, ECONNABORTED
 | 
			
		||||
	}
 | 
			
		||||
	sa, err = anyToSockaddr(fd, &rsa)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		Close(nfd)
 | 
			
		||||
		nfd = 0
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Getsockname(fd int) (sa Sockaddr, err error) {
 | 
			
		||||
	var rsa RawSockaddrAny
 | 
			
		||||
	var len _Socklen = SizeofSockaddrAny
 | 
			
		||||
	if err = getsockname(fd, &rsa, &len); err != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	// TODO(jsing): DragonFly has a "bug" (see issue 3349), which should be
 | 
			
		||||
	// reported upstream.
 | 
			
		||||
	if runtime.GOOS == "dragonfly" && rsa.Addr.Family == AF_UNSPEC && rsa.Addr.Len == 0 {
 | 
			
		||||
		rsa.Addr.Family = AF_UNIX
 | 
			
		||||
		rsa.Addr.Len = SizeofSockaddrUnix
 | 
			
		||||
	}
 | 
			
		||||
	return anyToSockaddr(fd, &rsa)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sysnb	socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
 | 
			
		||||
 | 
			
		||||
// GetsockoptString returns the string value of the socket option opt for the
 | 
			
		||||
// socket associated with fd at the given socket level.
 | 
			
		||||
func GetsockoptString(fd, level, opt int) (string, error) {
 | 
			
		||||
	buf := make([]byte, 256)
 | 
			
		||||
	vallen := _Socklen(len(buf))
 | 
			
		||||
	err := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
	return string(buf[:vallen-1]), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
 | 
			
		||||
//sys	sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
 | 
			
		||||
//sys	recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
 | 
			
		||||
 | 
			
		||||
func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
 | 
			
		||||
	var msg Msghdr
 | 
			
		||||
	var rsa RawSockaddrAny
 | 
			
		||||
	msg.Name = (*byte)(unsafe.Pointer(&rsa))
 | 
			
		||||
	msg.Namelen = uint32(SizeofSockaddrAny)
 | 
			
		||||
	var iov Iovec
 | 
			
		||||
	if len(p) > 0 {
 | 
			
		||||
		iov.Base = (*byte)(unsafe.Pointer(&p[0]))
 | 
			
		||||
		iov.SetLen(len(p))
 | 
			
		||||
	}
 | 
			
		||||
	var dummy byte
 | 
			
		||||
	if len(oob) > 0 {
 | 
			
		||||
		// receive at least one normal byte
 | 
			
		||||
		if len(p) == 0 {
 | 
			
		||||
			iov.Base = &dummy
 | 
			
		||||
			iov.SetLen(1)
 | 
			
		||||
		}
 | 
			
		||||
		msg.Control = (*byte)(unsafe.Pointer(&oob[0]))
 | 
			
		||||
		msg.SetControllen(len(oob))
 | 
			
		||||
	}
 | 
			
		||||
	msg.Iov = &iov
 | 
			
		||||
	msg.Iovlen = 1
 | 
			
		||||
	if n, err = recvmsg(fd, &msg, flags); err != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	oobn = int(msg.Controllen)
 | 
			
		||||
	recvflags = int(msg.Flags)
 | 
			
		||||
	// source address is only specified if the socket is unconnected
 | 
			
		||||
	if rsa.Addr.Family != AF_UNSPEC {
 | 
			
		||||
		from, err = anyToSockaddr(fd, &rsa)
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
 | 
			
		||||
 | 
			
		||||
func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) {
 | 
			
		||||
	_, err = SendmsgN(fd, p, oob, to, flags)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) {
 | 
			
		||||
	var ptr unsafe.Pointer
 | 
			
		||||
	var salen _Socklen
 | 
			
		||||
	if to != nil {
 | 
			
		||||
		ptr, salen, err = to.sockaddr()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return 0, err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	var msg Msghdr
 | 
			
		||||
	msg.Name = (*byte)(unsafe.Pointer(ptr))
 | 
			
		||||
	msg.Namelen = uint32(salen)
 | 
			
		||||
	var iov Iovec
 | 
			
		||||
	if len(p) > 0 {
 | 
			
		||||
		iov.Base = (*byte)(unsafe.Pointer(&p[0]))
 | 
			
		||||
		iov.SetLen(len(p))
 | 
			
		||||
	}
 | 
			
		||||
	var dummy byte
 | 
			
		||||
	if len(oob) > 0 {
 | 
			
		||||
		// send at least one normal byte
 | 
			
		||||
		if len(p) == 0 {
 | 
			
		||||
			iov.Base = &dummy
 | 
			
		||||
			iov.SetLen(1)
 | 
			
		||||
		}
 | 
			
		||||
		msg.Control = (*byte)(unsafe.Pointer(&oob[0]))
 | 
			
		||||
		msg.SetControllen(len(oob))
 | 
			
		||||
	}
 | 
			
		||||
	msg.Iov = &iov
 | 
			
		||||
	msg.Iovlen = 1
 | 
			
		||||
	if n, err = sendmsg(fd, &msg, flags); err != nil {
 | 
			
		||||
		return 0, err
 | 
			
		||||
	}
 | 
			
		||||
	if len(oob) > 0 && len(p) == 0 {
 | 
			
		||||
		n = 0
 | 
			
		||||
	}
 | 
			
		||||
	return n, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error)
 | 
			
		||||
 | 
			
		||||
func Kevent(kq int, changes, events []Kevent_t, timeout *Timespec) (n int, err error) {
 | 
			
		||||
	var change, event unsafe.Pointer
 | 
			
		||||
	if len(changes) > 0 {
 | 
			
		||||
		change = unsafe.Pointer(&changes[0])
 | 
			
		||||
	}
 | 
			
		||||
	if len(events) > 0 {
 | 
			
		||||
		event = unsafe.Pointer(&events[0])
 | 
			
		||||
	}
 | 
			
		||||
	return kevent(kq, change, len(changes), event, len(events), timeout)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// sysctlmib translates name to mib number and appends any additional args.
 | 
			
		||||
func sysctlmib(name string, args ...int) ([]_C_int, error) {
 | 
			
		||||
	// Translate name to mib number.
 | 
			
		||||
	mib, err := nametomib(name)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, a := range args {
 | 
			
		||||
		mib = append(mib, _C_int(a))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return mib, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Sysctl(name string) (string, error) {
 | 
			
		||||
	return SysctlArgs(name)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SysctlArgs(name string, args ...int) (string, error) {
 | 
			
		||||
	buf, err := SysctlRaw(name, args...)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
	n := len(buf)
 | 
			
		||||
 | 
			
		||||
	// Throw away terminating NUL.
 | 
			
		||||
	if n > 0 && buf[n-1] == '\x00' {
 | 
			
		||||
		n--
 | 
			
		||||
	}
 | 
			
		||||
	return string(buf[0:n]), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SysctlUint32(name string) (uint32, error) {
 | 
			
		||||
	return SysctlUint32Args(name)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SysctlUint32Args(name string, args ...int) (uint32, error) {
 | 
			
		||||
	mib, err := sysctlmib(name, args...)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return 0, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	n := uintptr(4)
 | 
			
		||||
	buf := make([]byte, 4)
 | 
			
		||||
	if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {
 | 
			
		||||
		return 0, err
 | 
			
		||||
	}
 | 
			
		||||
	if n != 4 {
 | 
			
		||||
		return 0, EIO
 | 
			
		||||
	}
 | 
			
		||||
	return *(*uint32)(unsafe.Pointer(&buf[0])), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SysctlUint64(name string, args ...int) (uint64, error) {
 | 
			
		||||
	mib, err := sysctlmib(name, args...)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return 0, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	n := uintptr(8)
 | 
			
		||||
	buf := make([]byte, 8)
 | 
			
		||||
	if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {
 | 
			
		||||
		return 0, err
 | 
			
		||||
	}
 | 
			
		||||
	if n != 8 {
 | 
			
		||||
		return 0, EIO
 | 
			
		||||
	}
 | 
			
		||||
	return *(*uint64)(unsafe.Pointer(&buf[0])), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SysctlRaw(name string, args ...int) ([]byte, error) {
 | 
			
		||||
	mib, err := sysctlmib(name, args...)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Find size.
 | 
			
		||||
	n := uintptr(0)
 | 
			
		||||
	if err := sysctl(mib, nil, &n, nil, 0); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if n == 0 {
 | 
			
		||||
		return nil, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Read into buffer of that size.
 | 
			
		||||
	buf := make([]byte, n)
 | 
			
		||||
	if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// The actual call may return less than the original reported required
 | 
			
		||||
	// size so ensure we deal with that.
 | 
			
		||||
	return buf[:n], nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SysctlClockinfo(name string) (*Clockinfo, error) {
 | 
			
		||||
	mib, err := sysctlmib(name)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	n := uintptr(SizeofClockinfo)
 | 
			
		||||
	var ci Clockinfo
 | 
			
		||||
	if err := sysctl(mib, (*byte)(unsafe.Pointer(&ci)), &n, nil, 0); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if n != SizeofClockinfo {
 | 
			
		||||
		return nil, EIO
 | 
			
		||||
	}
 | 
			
		||||
	return &ci, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SysctlTimeval(name string) (*Timeval, error) {
 | 
			
		||||
	mib, err := sysctlmib(name)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var tv Timeval
 | 
			
		||||
	n := uintptr(unsafe.Sizeof(tv))
 | 
			
		||||
	if err := sysctl(mib, (*byte)(unsafe.Pointer(&tv)), &n, nil, 0); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if n != unsafe.Sizeof(tv) {
 | 
			
		||||
		return nil, EIO
 | 
			
		||||
	}
 | 
			
		||||
	return &tv, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	utimes(path string, timeval *[2]Timeval) (err error)
 | 
			
		||||
 | 
			
		||||
func Utimes(path string, tv []Timeval) error {
 | 
			
		||||
	if tv == nil {
 | 
			
		||||
		return utimes(path, nil)
 | 
			
		||||
	}
 | 
			
		||||
	if len(tv) != 2 {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func UtimesNano(path string, ts []Timespec) error {
 | 
			
		||||
	if ts == nil {
 | 
			
		||||
		err := utimensat(AT_FDCWD, path, nil, 0)
 | 
			
		||||
		if err != ENOSYS {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		return utimes(path, nil)
 | 
			
		||||
	}
 | 
			
		||||
	if len(ts) != 2 {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	// Darwin setattrlist can set nanosecond timestamps
 | 
			
		||||
	err := setattrlistTimes(path, ts, 0)
 | 
			
		||||
	if err != ENOSYS {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	err = utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
 | 
			
		||||
	if err != ENOSYS {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	// Not as efficient as it could be because Timespec and
 | 
			
		||||
	// Timeval have different types in the different OSes
 | 
			
		||||
	tv := [2]Timeval{
 | 
			
		||||
		NsecToTimeval(TimespecToNsec(ts[0])),
 | 
			
		||||
		NsecToTimeval(TimespecToNsec(ts[1])),
 | 
			
		||||
	}
 | 
			
		||||
	return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {
 | 
			
		||||
	if ts == nil {
 | 
			
		||||
		return utimensat(dirfd, path, nil, flags)
 | 
			
		||||
	}
 | 
			
		||||
	if len(ts) != 2 {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	err := setattrlistTimes(path, ts, flags)
 | 
			
		||||
	if err != ENOSYS {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	futimes(fd int, timeval *[2]Timeval) (err error)
 | 
			
		||||
 | 
			
		||||
func Futimes(fd int, tv []Timeval) error {
 | 
			
		||||
	if tv == nil {
 | 
			
		||||
		return futimes(fd, nil)
 | 
			
		||||
	}
 | 
			
		||||
	if len(tv) != 2 {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	return futimes(fd, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	poll(fds *PollFd, nfds int, timeout int) (n int, err error)
 | 
			
		||||
 | 
			
		||||
func Poll(fds []PollFd, timeout int) (n int, err error) {
 | 
			
		||||
	if len(fds) == 0 {
 | 
			
		||||
		return poll(nil, 0, timeout)
 | 
			
		||||
	}
 | 
			
		||||
	return poll(&fds[0], len(fds), timeout)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TODO: wrap
 | 
			
		||||
//	Acct(name nil-string) (err error)
 | 
			
		||||
//	Gethostuuid(uuid *byte, timeout *Timespec) (err error)
 | 
			
		||||
//	Ptrace(req int, pid int, addr uintptr, data int) (ret uintptr, err error)
 | 
			
		||||
 | 
			
		||||
var mapper = &mmapper{
 | 
			
		||||
	active: make(map[*byte][]byte),
 | 
			
		||||
	mmap:   mmap,
 | 
			
		||||
	munmap: munmap,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {
 | 
			
		||||
	return mapper.Mmap(fd, offset, length, prot, flags)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Munmap(b []byte) (err error) {
 | 
			
		||||
	return mapper.Munmap(b)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	Madvise(b []byte, behav int) (err error)
 | 
			
		||||
//sys	Mlock(b []byte) (err error)
 | 
			
		||||
//sys	Mlockall(flags int) (err error)
 | 
			
		||||
//sys	Mprotect(b []byte, prot int) (err error)
 | 
			
		||||
//sys	Msync(b []byte, flags int) (err error)
 | 
			
		||||
//sys	Munlock(b []byte) (err error)
 | 
			
		||||
//sys	Munlockall() (err error)
 | 
			
		||||
							
								
								
									
										32
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin.1_12.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin.1_12.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
// Copyright 2019 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build darwin && go1.12 && !go1.13
 | 
			
		||||
// +build darwin,go1.12,!go1.13
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const _SYS_GETDIRENTRIES64 = 344
 | 
			
		||||
 | 
			
		||||
func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
 | 
			
		||||
	// To implement this using libSystem we'd need syscall_syscallPtr for
 | 
			
		||||
	// fdopendir. However, syscallPtr was only added in Go 1.13, so we fall
 | 
			
		||||
	// back to raw syscalls for this func on Go 1.12.
 | 
			
		||||
	var p unsafe.Pointer
 | 
			
		||||
	if len(buf) > 0 {
 | 
			
		||||
		p = unsafe.Pointer(&buf[0])
 | 
			
		||||
	} else {
 | 
			
		||||
		p = unsafe.Pointer(&_zero)
 | 
			
		||||
	}
 | 
			
		||||
	r0, _, e1 := Syscall6(_SYS_GETDIRENTRIES64, uintptr(fd), uintptr(p), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
 | 
			
		||||
	n = int(r0)
 | 
			
		||||
	if e1 != 0 {
 | 
			
		||||
		return n, errnoErr(e1)
 | 
			
		||||
	}
 | 
			
		||||
	return n, nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										108
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,108 @@
 | 
			
		||||
// Copyright 2019 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build darwin && go1.13
 | 
			
		||||
// +build darwin,go1.13
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"unsafe"
 | 
			
		||||
 | 
			
		||||
	"golang.org/x/sys/internal/unsafeheader"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
//sys	closedir(dir uintptr) (err error)
 | 
			
		||||
//sys	readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno)
 | 
			
		||||
 | 
			
		||||
func fdopendir(fd int) (dir uintptr, err error) {
 | 
			
		||||
	r0, _, e1 := syscall_syscallPtr(libc_fdopendir_trampoline_addr, uintptr(fd), 0, 0)
 | 
			
		||||
	dir = uintptr(r0)
 | 
			
		||||
	if e1 != 0 {
 | 
			
		||||
		err = errnoErr(e1)
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var libc_fdopendir_trampoline_addr uintptr
 | 
			
		||||
 | 
			
		||||
//go:cgo_import_dynamic libc_fdopendir fdopendir "/usr/lib/libSystem.B.dylib"
 | 
			
		||||
 | 
			
		||||
func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
 | 
			
		||||
	// Simulate Getdirentries using fdopendir/readdir_r/closedir.
 | 
			
		||||
	// We store the number of entries to skip in the seek
 | 
			
		||||
	// offset of fd. See issue #31368.
 | 
			
		||||
	// It's not the full required semantics, but should handle the case
 | 
			
		||||
	// of calling Getdirentries or ReadDirent repeatedly.
 | 
			
		||||
	// It won't handle assigning the results of lseek to *basep, or handle
 | 
			
		||||
	// the directory being edited underfoot.
 | 
			
		||||
	skip, err := Seek(fd, 0, 1 /* SEEK_CUR */)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return 0, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// We need to duplicate the incoming file descriptor
 | 
			
		||||
	// because the caller expects to retain control of it, but
 | 
			
		||||
	// fdopendir expects to take control of its argument.
 | 
			
		||||
	// Just Dup'ing the file descriptor is not enough, as the
 | 
			
		||||
	// result shares underlying state. Use Openat to make a really
 | 
			
		||||
	// new file descriptor referring to the same directory.
 | 
			
		||||
	fd2, err := Openat(fd, ".", O_RDONLY, 0)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return 0, err
 | 
			
		||||
	}
 | 
			
		||||
	d, err := fdopendir(fd2)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		Close(fd2)
 | 
			
		||||
		return 0, err
 | 
			
		||||
	}
 | 
			
		||||
	defer closedir(d)
 | 
			
		||||
 | 
			
		||||
	var cnt int64
 | 
			
		||||
	for {
 | 
			
		||||
		var entry Dirent
 | 
			
		||||
		var entryp *Dirent
 | 
			
		||||
		e := readdir_r(d, &entry, &entryp)
 | 
			
		||||
		if e != 0 {
 | 
			
		||||
			return n, errnoErr(e)
 | 
			
		||||
		}
 | 
			
		||||
		if entryp == nil {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		if skip > 0 {
 | 
			
		||||
			skip--
 | 
			
		||||
			cnt++
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		reclen := int(entry.Reclen)
 | 
			
		||||
		if reclen > len(buf) {
 | 
			
		||||
			// Not enough room. Return for now.
 | 
			
		||||
			// The counter will let us know where we should start up again.
 | 
			
		||||
			// Note: this strategy for suspending in the middle and
 | 
			
		||||
			// restarting is O(n^2) in the length of the directory. Oh well.
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Copy entry into return buffer.
 | 
			
		||||
		var s []byte
 | 
			
		||||
		hdr := (*unsafeheader.Slice)(unsafe.Pointer(&s))
 | 
			
		||||
		hdr.Data = unsafe.Pointer(&entry)
 | 
			
		||||
		hdr.Cap = reclen
 | 
			
		||||
		hdr.Len = reclen
 | 
			
		||||
		copy(buf, s)
 | 
			
		||||
 | 
			
		||||
		buf = buf[reclen:]
 | 
			
		||||
		n += reclen
 | 
			
		||||
		cnt++
 | 
			
		||||
	}
 | 
			
		||||
	// Set the seek offset of the input fd to record
 | 
			
		||||
	// how many files we've already returned.
 | 
			
		||||
	_, err = Seek(fd, cnt, 0 /* SEEK_SET */)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return n, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return n, nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										688
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										688
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,688 @@
 | 
			
		||||
// Copyright 2009,2010 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
// Darwin system calls.
 | 
			
		||||
// This file is compiled as ordinary Go code,
 | 
			
		||||
// but it is also input to mksyscall,
 | 
			
		||||
// which parses the //sys lines and generates system call stubs.
 | 
			
		||||
// Note that sometimes we use a lowercase //sys name and wrap
 | 
			
		||||
// it in our own nicer implementation, either here or in
 | 
			
		||||
// syscall_bsd.go or syscall_unix.go.
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"runtime"
 | 
			
		||||
	"syscall"
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.
 | 
			
		||||
type SockaddrDatalink struct {
 | 
			
		||||
	Len    uint8
 | 
			
		||||
	Family uint8
 | 
			
		||||
	Index  uint16
 | 
			
		||||
	Type   uint8
 | 
			
		||||
	Nlen   uint8
 | 
			
		||||
	Alen   uint8
 | 
			
		||||
	Slen   uint8
 | 
			
		||||
	Data   [12]int8
 | 
			
		||||
	raw    RawSockaddrDatalink
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SockaddrCtl implements the Sockaddr interface for AF_SYSTEM type sockets.
 | 
			
		||||
type SockaddrCtl struct {
 | 
			
		||||
	ID   uint32
 | 
			
		||||
	Unit uint32
 | 
			
		||||
	raw  RawSockaddrCtl
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (sa *SockaddrCtl) sockaddr() (unsafe.Pointer, _Socklen, error) {
 | 
			
		||||
	sa.raw.Sc_len = SizeofSockaddrCtl
 | 
			
		||||
	sa.raw.Sc_family = AF_SYSTEM
 | 
			
		||||
	sa.raw.Ss_sysaddr = AF_SYS_CONTROL
 | 
			
		||||
	sa.raw.Sc_id = sa.ID
 | 
			
		||||
	sa.raw.Sc_unit = sa.Unit
 | 
			
		||||
	return unsafe.Pointer(&sa.raw), SizeofSockaddrCtl, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
 | 
			
		||||
	switch rsa.Addr.Family {
 | 
			
		||||
	case AF_SYSTEM:
 | 
			
		||||
		pp := (*RawSockaddrCtl)(unsafe.Pointer(rsa))
 | 
			
		||||
		if pp.Ss_sysaddr == AF_SYS_CONTROL {
 | 
			
		||||
			sa := new(SockaddrCtl)
 | 
			
		||||
			sa.ID = pp.Sc_id
 | 
			
		||||
			sa.Unit = pp.Sc_unit
 | 
			
		||||
			return sa, nil
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return nil, EAFNOSUPPORT
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Some external packages rely on SYS___SYSCTL being defined to implement their
 | 
			
		||||
// own sysctl wrappers. Provide it here, even though direct syscalls are no
 | 
			
		||||
// longer supported on darwin.
 | 
			
		||||
const SYS___SYSCTL = SYS_SYSCTL
 | 
			
		||||
 | 
			
		||||
// Translate "kern.hostname" to []_C_int{0,1,2,3}.
 | 
			
		||||
func nametomib(name string) (mib []_C_int, err error) {
 | 
			
		||||
	const siz = unsafe.Sizeof(mib[0])
 | 
			
		||||
 | 
			
		||||
	// NOTE(rsc): It seems strange to set the buffer to have
 | 
			
		||||
	// size CTL_MAXNAME+2 but use only CTL_MAXNAME
 | 
			
		||||
	// as the size. I don't know why the +2 is here, but the
 | 
			
		||||
	// kernel uses +2 for its own implementation of this function.
 | 
			
		||||
	// I am scared that if we don't include the +2 here, the kernel
 | 
			
		||||
	// will silently write 2 words farther than we specify
 | 
			
		||||
	// and we'll get memory corruption.
 | 
			
		||||
	var buf [CTL_MAXNAME + 2]_C_int
 | 
			
		||||
	n := uintptr(CTL_MAXNAME) * siz
 | 
			
		||||
 | 
			
		||||
	p := (*byte)(unsafe.Pointer(&buf[0]))
 | 
			
		||||
	bytes, err := ByteSliceFromString(name)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Magic sysctl: "setting" 0.3 to a string name
 | 
			
		||||
	// lets you read back the array of integers form.
 | 
			
		||||
	if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return buf[0 : n/siz], nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func direntIno(buf []byte) (uint64, bool) {
 | 
			
		||||
	return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func direntReclen(buf []byte) (uint64, bool) {
 | 
			
		||||
	return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func direntNamlen(buf []byte) (uint64, bool) {
 | 
			
		||||
	return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) }
 | 
			
		||||
func PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) }
 | 
			
		||||
 | 
			
		||||
type attrList struct {
 | 
			
		||||
	bitmapCount uint16
 | 
			
		||||
	_           uint16
 | 
			
		||||
	CommonAttr  uint32
 | 
			
		||||
	VolAttr     uint32
 | 
			
		||||
	DirAttr     uint32
 | 
			
		||||
	FileAttr    uint32
 | 
			
		||||
	Forkattr    uint32
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sysnb	pipe(p *[2]int32) (err error)
 | 
			
		||||
 | 
			
		||||
func Pipe(p []int) (err error) {
 | 
			
		||||
	if len(p) != 2 {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	var x [2]int32
 | 
			
		||||
	err = pipe(&x)
 | 
			
		||||
	p[0] = int(x[0])
 | 
			
		||||
	p[1] = int(x[1])
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
 | 
			
		||||
	var _p0 unsafe.Pointer
 | 
			
		||||
	var bufsize uintptr
 | 
			
		||||
	if len(buf) > 0 {
 | 
			
		||||
		_p0 = unsafe.Pointer(&buf[0])
 | 
			
		||||
		bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
 | 
			
		||||
	}
 | 
			
		||||
	return getfsstat(_p0, bufsize, flags)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func xattrPointer(dest []byte) *byte {
 | 
			
		||||
	// It's only when dest is set to NULL that the OS X implementations of
 | 
			
		||||
	// getxattr() and listxattr() return the current sizes of the named attributes.
 | 
			
		||||
	// An empty byte array is not sufficient. To maintain the same behaviour as the
 | 
			
		||||
	// linux implementation, we wrap around the system calls and pass in NULL when
 | 
			
		||||
	// dest is empty.
 | 
			
		||||
	var destp *byte
 | 
			
		||||
	if len(dest) > 0 {
 | 
			
		||||
		destp = &dest[0]
 | 
			
		||||
	}
 | 
			
		||||
	return destp
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error)
 | 
			
		||||
 | 
			
		||||
func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
 | 
			
		||||
	return getxattr(path, attr, xattrPointer(dest), len(dest), 0, 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {
 | 
			
		||||
	return getxattr(link, attr, xattrPointer(dest), len(dest), 0, XATTR_NOFOLLOW)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error)
 | 
			
		||||
 | 
			
		||||
func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
 | 
			
		||||
	return fgetxattr(fd, attr, xattrPointer(dest), len(dest), 0, 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error)
 | 
			
		||||
 | 
			
		||||
func Setxattr(path string, attr string, data []byte, flags int) (err error) {
 | 
			
		||||
	// The parameters for the OS X implementation vary slightly compared to the
 | 
			
		||||
	// linux system call, specifically the position parameter:
 | 
			
		||||
	//
 | 
			
		||||
	//  linux:
 | 
			
		||||
	//      int setxattr(
 | 
			
		||||
	//          const char *path,
 | 
			
		||||
	//          const char *name,
 | 
			
		||||
	//          const void *value,
 | 
			
		||||
	//          size_t size,
 | 
			
		||||
	//          int flags
 | 
			
		||||
	//      );
 | 
			
		||||
	//
 | 
			
		||||
	//  darwin:
 | 
			
		||||
	//      int setxattr(
 | 
			
		||||
	//          const char *path,
 | 
			
		||||
	//          const char *name,
 | 
			
		||||
	//          void *value,
 | 
			
		||||
	//          size_t size,
 | 
			
		||||
	//          u_int32_t position,
 | 
			
		||||
	//          int options
 | 
			
		||||
	//      );
 | 
			
		||||
	//
 | 
			
		||||
	// position specifies the offset within the extended attribute. In the
 | 
			
		||||
	// current implementation, only the resource fork extended attribute makes
 | 
			
		||||
	// use of this argument. For all others, position is reserved. We simply
 | 
			
		||||
	// default to setting it to zero.
 | 
			
		||||
	return setxattr(path, attr, xattrPointer(data), len(data), 0, flags)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Lsetxattr(link string, attr string, data []byte, flags int) (err error) {
 | 
			
		||||
	return setxattr(link, attr, xattrPointer(data), len(data), 0, flags|XATTR_NOFOLLOW)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error)
 | 
			
		||||
 | 
			
		||||
func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) {
 | 
			
		||||
	return fsetxattr(fd, attr, xattrPointer(data), len(data), 0, 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	removexattr(path string, attr string, options int) (err error)
 | 
			
		||||
 | 
			
		||||
func Removexattr(path string, attr string) (err error) {
 | 
			
		||||
	// We wrap around and explicitly zero out the options provided to the OS X
 | 
			
		||||
	// implementation of removexattr, we do so for interoperability with the
 | 
			
		||||
	// linux variant.
 | 
			
		||||
	return removexattr(path, attr, 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Lremovexattr(link string, attr string) (err error) {
 | 
			
		||||
	return removexattr(link, attr, XATTR_NOFOLLOW)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	fremovexattr(fd int, attr string, options int) (err error)
 | 
			
		||||
 | 
			
		||||
func Fremovexattr(fd int, attr string) (err error) {
 | 
			
		||||
	return fremovexattr(fd, attr, 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	listxattr(path string, dest *byte, size int, options int) (sz int, err error)
 | 
			
		||||
 | 
			
		||||
func Listxattr(path string, dest []byte) (sz int, err error) {
 | 
			
		||||
	return listxattr(path, xattrPointer(dest), len(dest), 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Llistxattr(link string, dest []byte) (sz int, err error) {
 | 
			
		||||
	return listxattr(link, xattrPointer(dest), len(dest), XATTR_NOFOLLOW)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	flistxattr(fd int, dest *byte, size int, options int) (sz int, err error)
 | 
			
		||||
 | 
			
		||||
func Flistxattr(fd int, dest []byte) (sz int, err error) {
 | 
			
		||||
	return flistxattr(fd, xattrPointer(dest), len(dest), 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setattrlistTimes(path string, times []Timespec, flags int) error {
 | 
			
		||||
	_p0, err := BytePtrFromString(path)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var attrList attrList
 | 
			
		||||
	attrList.bitmapCount = ATTR_BIT_MAP_COUNT
 | 
			
		||||
	attrList.CommonAttr = ATTR_CMN_MODTIME | ATTR_CMN_ACCTIME
 | 
			
		||||
 | 
			
		||||
	// order is mtime, atime: the opposite of Chtimes
 | 
			
		||||
	attributes := [2]Timespec{times[1], times[0]}
 | 
			
		||||
	options := 0
 | 
			
		||||
	if flags&AT_SYMLINK_NOFOLLOW != 0 {
 | 
			
		||||
		options |= FSOPT_NOFOLLOW
 | 
			
		||||
	}
 | 
			
		||||
	return setattrlist(
 | 
			
		||||
		_p0,
 | 
			
		||||
		unsafe.Pointer(&attrList),
 | 
			
		||||
		unsafe.Pointer(&attributes),
 | 
			
		||||
		unsafe.Sizeof(attributes),
 | 
			
		||||
		options)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error)
 | 
			
		||||
 | 
			
		||||
func utimensat(dirfd int, path string, times *[2]Timespec, flags int) error {
 | 
			
		||||
	// Darwin doesn't support SYS_UTIMENSAT
 | 
			
		||||
	return ENOSYS
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Wrapped
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
//sys	fcntl(fd int, cmd int, arg int) (val int, err error)
 | 
			
		||||
 | 
			
		||||
//sys	kill(pid int, signum int, posix int) (err error)
 | 
			
		||||
 | 
			
		||||
func Kill(pid int, signum syscall.Signal) (err error) { return kill(pid, int(signum), 1) }
 | 
			
		||||
 | 
			
		||||
//sys	ioctl(fd int, req uint, arg uintptr) (err error)
 | 
			
		||||
 | 
			
		||||
func IoctlCtlInfo(fd int, ctlInfo *CtlInfo) error {
 | 
			
		||||
	err := ioctl(fd, CTLIOCGINFO, uintptr(unsafe.Pointer(ctlInfo)))
 | 
			
		||||
	runtime.KeepAlive(ctlInfo)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IfreqMTU is struct ifreq used to get or set a network device's MTU.
 | 
			
		||||
type IfreqMTU struct {
 | 
			
		||||
	Name [IFNAMSIZ]byte
 | 
			
		||||
	MTU  int32
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IoctlGetIfreqMTU performs the SIOCGIFMTU ioctl operation on fd to get the MTU
 | 
			
		||||
// of the network device specified by ifname.
 | 
			
		||||
func IoctlGetIfreqMTU(fd int, ifname string) (*IfreqMTU, error) {
 | 
			
		||||
	var ifreq IfreqMTU
 | 
			
		||||
	copy(ifreq.Name[:], ifname)
 | 
			
		||||
	err := ioctl(fd, SIOCGIFMTU, uintptr(unsafe.Pointer(&ifreq)))
 | 
			
		||||
	return &ifreq, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IoctlSetIfreqMTU performs the SIOCSIFMTU ioctl operation on fd to set the MTU
 | 
			
		||||
// of the network device specified by ifreq.Name.
 | 
			
		||||
func IoctlSetIfreqMTU(fd int, ifreq *IfreqMTU) error {
 | 
			
		||||
	err := ioctl(fd, SIOCSIFMTU, uintptr(unsafe.Pointer(ifreq)))
 | 
			
		||||
	runtime.KeepAlive(ifreq)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS_SYSCTL
 | 
			
		||||
 | 
			
		||||
func Uname(uname *Utsname) error {
 | 
			
		||||
	mib := []_C_int{CTL_KERN, KERN_OSTYPE}
 | 
			
		||||
	n := unsafe.Sizeof(uname.Sysname)
 | 
			
		||||
	if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	mib = []_C_int{CTL_KERN, KERN_HOSTNAME}
 | 
			
		||||
	n = unsafe.Sizeof(uname.Nodename)
 | 
			
		||||
	if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	mib = []_C_int{CTL_KERN, KERN_OSRELEASE}
 | 
			
		||||
	n = unsafe.Sizeof(uname.Release)
 | 
			
		||||
	if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	mib = []_C_int{CTL_KERN, KERN_VERSION}
 | 
			
		||||
	n = unsafe.Sizeof(uname.Version)
 | 
			
		||||
	if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// The version might have newlines or tabs in it, convert them to
 | 
			
		||||
	// spaces.
 | 
			
		||||
	for i, b := range uname.Version {
 | 
			
		||||
		if b == '\n' || b == '\t' {
 | 
			
		||||
			if i == len(uname.Version)-1 {
 | 
			
		||||
				uname.Version[i] = 0
 | 
			
		||||
			} else {
 | 
			
		||||
				uname.Version[i] = ' '
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	mib = []_C_int{CTL_HW, HW_MACHINE}
 | 
			
		||||
	n = unsafe.Sizeof(uname.Machine)
 | 
			
		||||
	if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
 | 
			
		||||
	if raceenabled {
 | 
			
		||||
		raceReleaseMerge(unsafe.Pointer(&ioSync))
 | 
			
		||||
	}
 | 
			
		||||
	var length = int64(count)
 | 
			
		||||
	err = sendfile(infd, outfd, *offset, &length, nil, 0)
 | 
			
		||||
	written = int(length)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {
 | 
			
		||||
	var value IPMreqn
 | 
			
		||||
	vallen := _Socklen(SizeofIPMreqn)
 | 
			
		||||
	errno := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
 | 
			
		||||
	return &value, errno
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) {
 | 
			
		||||
	return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetsockoptXucred is a getsockopt wrapper that returns an Xucred struct.
 | 
			
		||||
// The usual level and opt are SOL_LOCAL and LOCAL_PEERCRED, respectively.
 | 
			
		||||
func GetsockoptXucred(fd, level, opt int) (*Xucred, error) {
 | 
			
		||||
	x := new(Xucred)
 | 
			
		||||
	vallen := _Socklen(SizeofXucred)
 | 
			
		||||
	err := getsockopt(fd, level, opt, unsafe.Pointer(x), &vallen)
 | 
			
		||||
	return x, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Exposed directly
 | 
			
		||||
 */
 | 
			
		||||
//sys	Access(path string, mode uint32) (err error)
 | 
			
		||||
//sys	Adjtime(delta *Timeval, olddelta *Timeval) (err error)
 | 
			
		||||
//sys	Chdir(path string) (err error)
 | 
			
		||||
//sys	Chflags(path string, flags int) (err error)
 | 
			
		||||
//sys	Chmod(path string, mode uint32) (err error)
 | 
			
		||||
//sys	Chown(path string, uid int, gid int) (err error)
 | 
			
		||||
//sys	Chroot(path string) (err error)
 | 
			
		||||
//sys	ClockGettime(clockid int32, time *Timespec) (err error)
 | 
			
		||||
//sys	Close(fd int) (err error)
 | 
			
		||||
//sys	Clonefile(src string, dst string, flags int) (err error)
 | 
			
		||||
//sys	Clonefileat(srcDirfd int, src string, dstDirfd int, dst string, flags int) (err error)
 | 
			
		||||
//sys	Dup(fd int) (nfd int, err error)
 | 
			
		||||
//sys	Dup2(from int, to int) (err error)
 | 
			
		||||
//sys	Exchangedata(path1 string, path2 string, options int) (err error)
 | 
			
		||||
//sys	Exit(code int)
 | 
			
		||||
//sys	Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
 | 
			
		||||
//sys	Fchdir(fd int) (err error)
 | 
			
		||||
//sys	Fchflags(fd int, flags int) (err error)
 | 
			
		||||
//sys	Fchmod(fd int, mode uint32) (err error)
 | 
			
		||||
//sys	Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
 | 
			
		||||
//sys	Fchown(fd int, uid int, gid int) (err error)
 | 
			
		||||
//sys	Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
 | 
			
		||||
//sys	Fclonefileat(srcDirfd int, dstDirfd int, dst string, flags int) (err error)
 | 
			
		||||
//sys	Flock(fd int, how int) (err error)
 | 
			
		||||
//sys	Fpathconf(fd int, name int) (val int, err error)
 | 
			
		||||
//sys	Fsync(fd int) (err error)
 | 
			
		||||
//sys	Ftruncate(fd int, length int64) (err error)
 | 
			
		||||
//sys	Getcwd(buf []byte) (n int, err error)
 | 
			
		||||
//sys	Getdtablesize() (size int)
 | 
			
		||||
//sysnb	Getegid() (egid int)
 | 
			
		||||
//sysnb	Geteuid() (uid int)
 | 
			
		||||
//sysnb	Getgid() (gid int)
 | 
			
		||||
//sysnb	Getpgid(pid int) (pgid int, err error)
 | 
			
		||||
//sysnb	Getpgrp() (pgrp int)
 | 
			
		||||
//sysnb	Getpid() (pid int)
 | 
			
		||||
//sysnb	Getppid() (ppid int)
 | 
			
		||||
//sys	Getpriority(which int, who int) (prio int, err error)
 | 
			
		||||
//sysnb	Getrlimit(which int, lim *Rlimit) (err error)
 | 
			
		||||
//sysnb	Getrusage(who int, rusage *Rusage) (err error)
 | 
			
		||||
//sysnb	Getsid(pid int) (sid int, err error)
 | 
			
		||||
//sysnb	Gettimeofday(tp *Timeval) (err error)
 | 
			
		||||
//sysnb	Getuid() (uid int)
 | 
			
		||||
//sysnb	Issetugid() (tainted bool)
 | 
			
		||||
//sys	Kqueue() (fd int, err error)
 | 
			
		||||
//sys	Lchown(path string, uid int, gid int) (err error)
 | 
			
		||||
//sys	Link(path string, link string) (err error)
 | 
			
		||||
//sys	Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
 | 
			
		||||
//sys	Listen(s int, backlog int) (err error)
 | 
			
		||||
//sys	Mkdir(path string, mode uint32) (err error)
 | 
			
		||||
//sys	Mkdirat(dirfd int, path string, mode uint32) (err error)
 | 
			
		||||
//sys	Mkfifo(path string, mode uint32) (err error)
 | 
			
		||||
//sys	Mknod(path string, mode uint32, dev int) (err error)
 | 
			
		||||
//sys	Open(path string, mode int, perm uint32) (fd int, err error)
 | 
			
		||||
//sys	Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error)
 | 
			
		||||
//sys	Pathconf(path string, name int) (val int, err error)
 | 
			
		||||
//sys	Pread(fd int, p []byte, offset int64) (n int, err error)
 | 
			
		||||
//sys	Pwrite(fd int, p []byte, offset int64) (n int, err error)
 | 
			
		||||
//sys	read(fd int, p []byte) (n int, err error)
 | 
			
		||||
//sys	Readlink(path string, buf []byte) (n int, err error)
 | 
			
		||||
//sys	Readlinkat(dirfd int, path string, buf []byte) (n int, err error)
 | 
			
		||||
//sys	Rename(from string, to string) (err error)
 | 
			
		||||
//sys	Renameat(fromfd int, from string, tofd int, to string) (err error)
 | 
			
		||||
//sys	Revoke(path string) (err error)
 | 
			
		||||
//sys	Rmdir(path string) (err error)
 | 
			
		||||
//sys	Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
 | 
			
		||||
//sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
 | 
			
		||||
//sys	Setegid(egid int) (err error)
 | 
			
		||||
//sysnb	Seteuid(euid int) (err error)
 | 
			
		||||
//sysnb	Setgid(gid int) (err error)
 | 
			
		||||
//sys	Setlogin(name string) (err error)
 | 
			
		||||
//sysnb	Setpgid(pid int, pgid int) (err error)
 | 
			
		||||
//sys	Setpriority(which int, who int, prio int) (err error)
 | 
			
		||||
//sys	Setprivexec(flag int) (err error)
 | 
			
		||||
//sysnb	Setregid(rgid int, egid int) (err error)
 | 
			
		||||
//sysnb	Setreuid(ruid int, euid int) (err error)
 | 
			
		||||
//sysnb	Setrlimit(which int, lim *Rlimit) (err error)
 | 
			
		||||
//sysnb	Setsid() (pid int, err error)
 | 
			
		||||
//sysnb	Settimeofday(tp *Timeval) (err error)
 | 
			
		||||
//sysnb	Setuid(uid int) (err error)
 | 
			
		||||
//sys	Symlink(path string, link string) (err error)
 | 
			
		||||
//sys	Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
 | 
			
		||||
//sys	Sync() (err error)
 | 
			
		||||
//sys	Truncate(path string, length int64) (err error)
 | 
			
		||||
//sys	Umask(newmask int) (oldmask int)
 | 
			
		||||
//sys	Undelete(path string) (err error)
 | 
			
		||||
//sys	Unlink(path string) (err error)
 | 
			
		||||
//sys	Unlinkat(dirfd int, path string, flags int) (err error)
 | 
			
		||||
//sys	Unmount(path string, flags int) (err error)
 | 
			
		||||
//sys	write(fd int, p []byte) (n int, err error)
 | 
			
		||||
//sys	mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
 | 
			
		||||
//sys	munmap(addr uintptr, length uintptr) (err error)
 | 
			
		||||
//sys	readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ
 | 
			
		||||
//sys	writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Unimplemented
 | 
			
		||||
 */
 | 
			
		||||
// Profil
 | 
			
		||||
// Sigaction
 | 
			
		||||
// Sigprocmask
 | 
			
		||||
// Getlogin
 | 
			
		||||
// Sigpending
 | 
			
		||||
// Sigaltstack
 | 
			
		||||
// Ioctl
 | 
			
		||||
// Reboot
 | 
			
		||||
// Execve
 | 
			
		||||
// Vfork
 | 
			
		||||
// Sbrk
 | 
			
		||||
// Sstk
 | 
			
		||||
// Ovadvise
 | 
			
		||||
// Mincore
 | 
			
		||||
// Setitimer
 | 
			
		||||
// Swapon
 | 
			
		||||
// Select
 | 
			
		||||
// Sigsuspend
 | 
			
		||||
// Readv
 | 
			
		||||
// Writev
 | 
			
		||||
// Nfssvc
 | 
			
		||||
// Getfh
 | 
			
		||||
// Quotactl
 | 
			
		||||
// Mount
 | 
			
		||||
// Csops
 | 
			
		||||
// Waitid
 | 
			
		||||
// Add_profil
 | 
			
		||||
// Kdebug_trace
 | 
			
		||||
// Sigreturn
 | 
			
		||||
// Atsocket
 | 
			
		||||
// Kqueue_from_portset_np
 | 
			
		||||
// Kqueue_portset
 | 
			
		||||
// Getattrlist
 | 
			
		||||
// Setattrlist
 | 
			
		||||
// Getdirentriesattr
 | 
			
		||||
// Searchfs
 | 
			
		||||
// Delete
 | 
			
		||||
// Copyfile
 | 
			
		||||
// Watchevent
 | 
			
		||||
// Waitevent
 | 
			
		||||
// Modwatch
 | 
			
		||||
// Fsctl
 | 
			
		||||
// Initgroups
 | 
			
		||||
// Posix_spawn
 | 
			
		||||
// Nfsclnt
 | 
			
		||||
// Fhopen
 | 
			
		||||
// Minherit
 | 
			
		||||
// Semsys
 | 
			
		||||
// Msgsys
 | 
			
		||||
// Shmsys
 | 
			
		||||
// Semctl
 | 
			
		||||
// Semget
 | 
			
		||||
// Semop
 | 
			
		||||
// Msgctl
 | 
			
		||||
// Msgget
 | 
			
		||||
// Msgsnd
 | 
			
		||||
// Msgrcv
 | 
			
		||||
// Shmat
 | 
			
		||||
// Shmctl
 | 
			
		||||
// Shmdt
 | 
			
		||||
// Shmget
 | 
			
		||||
// Shm_open
 | 
			
		||||
// Shm_unlink
 | 
			
		||||
// Sem_open
 | 
			
		||||
// Sem_close
 | 
			
		||||
// Sem_unlink
 | 
			
		||||
// Sem_wait
 | 
			
		||||
// Sem_trywait
 | 
			
		||||
// Sem_post
 | 
			
		||||
// Sem_getvalue
 | 
			
		||||
// Sem_init
 | 
			
		||||
// Sem_destroy
 | 
			
		||||
// Open_extended
 | 
			
		||||
// Umask_extended
 | 
			
		||||
// Stat_extended
 | 
			
		||||
// Lstat_extended
 | 
			
		||||
// Fstat_extended
 | 
			
		||||
// Chmod_extended
 | 
			
		||||
// Fchmod_extended
 | 
			
		||||
// Access_extended
 | 
			
		||||
// Settid
 | 
			
		||||
// Gettid
 | 
			
		||||
// Setsgroups
 | 
			
		||||
// Getsgroups
 | 
			
		||||
// Setwgroups
 | 
			
		||||
// Getwgroups
 | 
			
		||||
// Mkfifo_extended
 | 
			
		||||
// Mkdir_extended
 | 
			
		||||
// Identitysvc
 | 
			
		||||
// Shared_region_check_np
 | 
			
		||||
// Shared_region_map_np
 | 
			
		||||
// __pthread_mutex_destroy
 | 
			
		||||
// __pthread_mutex_init
 | 
			
		||||
// __pthread_mutex_lock
 | 
			
		||||
// __pthread_mutex_trylock
 | 
			
		||||
// __pthread_mutex_unlock
 | 
			
		||||
// __pthread_cond_init
 | 
			
		||||
// __pthread_cond_destroy
 | 
			
		||||
// __pthread_cond_broadcast
 | 
			
		||||
// __pthread_cond_signal
 | 
			
		||||
// Setsid_with_pid
 | 
			
		||||
// __pthread_cond_timedwait
 | 
			
		||||
// Aio_fsync
 | 
			
		||||
// Aio_return
 | 
			
		||||
// Aio_suspend
 | 
			
		||||
// Aio_cancel
 | 
			
		||||
// Aio_error
 | 
			
		||||
// Aio_read
 | 
			
		||||
// Aio_write
 | 
			
		||||
// Lio_listio
 | 
			
		||||
// __pthread_cond_wait
 | 
			
		||||
// Iopolicysys
 | 
			
		||||
// __pthread_kill
 | 
			
		||||
// __pthread_sigmask
 | 
			
		||||
// __sigwait
 | 
			
		||||
// __disable_threadsignal
 | 
			
		||||
// __pthread_markcancel
 | 
			
		||||
// __pthread_canceled
 | 
			
		||||
// __semwait_signal
 | 
			
		||||
// Proc_info
 | 
			
		||||
// sendfile
 | 
			
		||||
// Stat64_extended
 | 
			
		||||
// Lstat64_extended
 | 
			
		||||
// Fstat64_extended
 | 
			
		||||
// __pthread_chdir
 | 
			
		||||
// __pthread_fchdir
 | 
			
		||||
// Audit
 | 
			
		||||
// Auditon
 | 
			
		||||
// Getauid
 | 
			
		||||
// Setauid
 | 
			
		||||
// Getaudit
 | 
			
		||||
// Setaudit
 | 
			
		||||
// Getaudit_addr
 | 
			
		||||
// Setaudit_addr
 | 
			
		||||
// Auditctl
 | 
			
		||||
// Bsdthread_create
 | 
			
		||||
// Bsdthread_terminate
 | 
			
		||||
// Stack_snapshot
 | 
			
		||||
// Bsdthread_register
 | 
			
		||||
// Workq_open
 | 
			
		||||
// Workq_ops
 | 
			
		||||
// __mac_execve
 | 
			
		||||
// __mac_syscall
 | 
			
		||||
// __mac_get_file
 | 
			
		||||
// __mac_set_file
 | 
			
		||||
// __mac_get_link
 | 
			
		||||
// __mac_set_link
 | 
			
		||||
// __mac_get_proc
 | 
			
		||||
// __mac_set_proc
 | 
			
		||||
// __mac_get_fd
 | 
			
		||||
// __mac_set_fd
 | 
			
		||||
// __mac_get_pid
 | 
			
		||||
// __mac_get_lcid
 | 
			
		||||
// __mac_get_lctx
 | 
			
		||||
// __mac_set_lctx
 | 
			
		||||
// Setlcid
 | 
			
		||||
// Read_nocancel
 | 
			
		||||
// Write_nocancel
 | 
			
		||||
// Open_nocancel
 | 
			
		||||
// Close_nocancel
 | 
			
		||||
// Wait4_nocancel
 | 
			
		||||
// Recvmsg_nocancel
 | 
			
		||||
// Sendmsg_nocancel
 | 
			
		||||
// Recvfrom_nocancel
 | 
			
		||||
// Accept_nocancel
 | 
			
		||||
// Fcntl_nocancel
 | 
			
		||||
// Select_nocancel
 | 
			
		||||
// Fsync_nocancel
 | 
			
		||||
// Connect_nocancel
 | 
			
		||||
// Sigsuspend_nocancel
 | 
			
		||||
// Readv_nocancel
 | 
			
		||||
// Writev_nocancel
 | 
			
		||||
// Sendto_nocancel
 | 
			
		||||
// Pread_nocancel
 | 
			
		||||
// Pwrite_nocancel
 | 
			
		||||
// Waitid_nocancel
 | 
			
		||||
// Poll_nocancel
 | 
			
		||||
// Msgsnd_nocancel
 | 
			
		||||
// Msgrcv_nocancel
 | 
			
		||||
// Sem_wait_nocancel
 | 
			
		||||
// Aio_suspend_nocancel
 | 
			
		||||
// __sigwait_nocancel
 | 
			
		||||
// __semwait_signal_nocancel
 | 
			
		||||
// __mac_mount
 | 
			
		||||
// __mac_get_mount
 | 
			
		||||
// __mac_getfsstat
 | 
			
		||||
							
								
								
									
										51
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,51 @@
 | 
			
		||||
// Copyright 2009 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build amd64 && darwin
 | 
			
		||||
// +build amd64,darwin
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import "syscall"
 | 
			
		||||
 | 
			
		||||
func setTimespec(sec, nsec int64) Timespec {
 | 
			
		||||
	return Timespec{Sec: sec, Nsec: nsec}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setTimeval(sec, usec int64) Timeval {
 | 
			
		||||
	return Timeval{Sec: sec, Usec: int32(usec)}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SetKevent(k *Kevent_t, fd, mode, flags int) {
 | 
			
		||||
	k.Ident = uint64(fd)
 | 
			
		||||
	k.Filter = int16(mode)
 | 
			
		||||
	k.Flags = uint16(flags)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (iov *Iovec) SetLen(length int) {
 | 
			
		||||
	iov.Len = uint64(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetControllen(length int) {
 | 
			
		||||
	msghdr.Controllen = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetIovlen(length int) {
 | 
			
		||||
	msghdr.Iovlen = int32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (cmsg *Cmsghdr) SetLen(length int) {
 | 
			
		||||
	cmsg.Len = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
 | 
			
		||||
 | 
			
		||||
//sys	Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
 | 
			
		||||
//sys	Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
 | 
			
		||||
//sys	Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64
 | 
			
		||||
//sys	getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT64
 | 
			
		||||
//sys	Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
 | 
			
		||||
//sys	ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) = SYS_ptrace
 | 
			
		||||
//sys	Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
 | 
			
		||||
//sys	Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64
 | 
			
		||||
							
								
								
									
										51
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,51 @@
 | 
			
		||||
// Copyright 2015 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build arm64 && darwin
 | 
			
		||||
// +build arm64,darwin
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import "syscall"
 | 
			
		||||
 | 
			
		||||
func setTimespec(sec, nsec int64) Timespec {
 | 
			
		||||
	return Timespec{Sec: sec, Nsec: nsec}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setTimeval(sec, usec int64) Timeval {
 | 
			
		||||
	return Timeval{Sec: sec, Usec: int32(usec)}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SetKevent(k *Kevent_t, fd, mode, flags int) {
 | 
			
		||||
	k.Ident = uint64(fd)
 | 
			
		||||
	k.Filter = int16(mode)
 | 
			
		||||
	k.Flags = uint16(flags)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (iov *Iovec) SetLen(length int) {
 | 
			
		||||
	iov.Len = uint64(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetControllen(length int) {
 | 
			
		||||
	msghdr.Controllen = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetIovlen(length int) {
 | 
			
		||||
	msghdr.Iovlen = int32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (cmsg *Cmsghdr) SetLen(length int) {
 | 
			
		||||
	cmsg.Len = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic
 | 
			
		||||
 | 
			
		||||
//sys	Fstat(fd int, stat *Stat_t) (err error)
 | 
			
		||||
//sys	Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
 | 
			
		||||
//sys	Fstatfs(fd int, stat *Statfs_t) (err error)
 | 
			
		||||
//sys	getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT
 | 
			
		||||
//sys	Lstat(path string, stat *Stat_t) (err error)
 | 
			
		||||
//sys	ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) = SYS_ptrace
 | 
			
		||||
//sys	Stat(path string, stat *Stat_t) (err error)
 | 
			
		||||
//sys	Statfs(path string, stat *Statfs_t) (err error)
 | 
			
		||||
							
								
								
									
										27
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
// Copyright 2018 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build darwin && go1.12
 | 
			
		||||
// +build darwin,go1.12
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import _ "unsafe"
 | 
			
		||||
 | 
			
		||||
// Implemented in the runtime package (runtime/sys_darwin.go)
 | 
			
		||||
func syscall_syscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
 | 
			
		||||
func syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
 | 
			
		||||
func syscall_syscall6X(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
 | 
			
		||||
func syscall_syscall9(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) // 32-bit only
 | 
			
		||||
func syscall_rawSyscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
 | 
			
		||||
func syscall_rawSyscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
 | 
			
		||||
func syscall_syscallPtr(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
 | 
			
		||||
 | 
			
		||||
//go:linkname syscall_syscall syscall.syscall
 | 
			
		||||
//go:linkname syscall_syscall6 syscall.syscall6
 | 
			
		||||
//go:linkname syscall_syscall6X syscall.syscall6X
 | 
			
		||||
//go:linkname syscall_syscall9 syscall.syscall9
 | 
			
		||||
//go:linkname syscall_rawSyscall syscall.rawSyscall
 | 
			
		||||
//go:linkname syscall_rawSyscall6 syscall.rawSyscall6
 | 
			
		||||
//go:linkname syscall_syscallPtr syscall.syscallPtr
 | 
			
		||||
							
								
								
									
										541
									
								
								vendor/golang.org/x/sys/unix/syscall_dragonfly.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										541
									
								
								vendor/golang.org/x/sys/unix/syscall_dragonfly.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,541 @@
 | 
			
		||||
// Copyright 2009 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
// DragonFly BSD system calls.
 | 
			
		||||
// This file is compiled as ordinary Go code,
 | 
			
		||||
// but it is also input to mksyscall,
 | 
			
		||||
// which parses the //sys lines and generates system call stubs.
 | 
			
		||||
// Note that sometimes we use a lowercase //sys name and wrap
 | 
			
		||||
// it in our own nicer implementation, either here or in
 | 
			
		||||
// syscall_bsd.go or syscall_unix.go.
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"sync"
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// See version list in https://github.com/DragonFlyBSD/DragonFlyBSD/blob/master/sys/sys/param.h
 | 
			
		||||
var (
 | 
			
		||||
	osreldateOnce sync.Once
 | 
			
		||||
	osreldate     uint32
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// First __DragonFly_version after September 2019 ABI changes
 | 
			
		||||
// http://lists.dragonflybsd.org/pipermail/users/2019-September/358280.html
 | 
			
		||||
const _dragonflyABIChangeVersion = 500705
 | 
			
		||||
 | 
			
		||||
func supportsABI(ver uint32) bool {
 | 
			
		||||
	osreldateOnce.Do(func() { osreldate, _ = SysctlUint32("kern.osreldate") })
 | 
			
		||||
	return osreldate >= ver
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.
 | 
			
		||||
type SockaddrDatalink struct {
 | 
			
		||||
	Len    uint8
 | 
			
		||||
	Family uint8
 | 
			
		||||
	Index  uint16
 | 
			
		||||
	Type   uint8
 | 
			
		||||
	Nlen   uint8
 | 
			
		||||
	Alen   uint8
 | 
			
		||||
	Slen   uint8
 | 
			
		||||
	Data   [12]int8
 | 
			
		||||
	Rcf    uint16
 | 
			
		||||
	Route  [16]uint16
 | 
			
		||||
	raw    RawSockaddrDatalink
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
 | 
			
		||||
	return nil, EAFNOSUPPORT
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Translate "kern.hostname" to []_C_int{0,1,2,3}.
 | 
			
		||||
func nametomib(name string) (mib []_C_int, err error) {
 | 
			
		||||
	const siz = unsafe.Sizeof(mib[0])
 | 
			
		||||
 | 
			
		||||
	// NOTE(rsc): It seems strange to set the buffer to have
 | 
			
		||||
	// size CTL_MAXNAME+2 but use only CTL_MAXNAME
 | 
			
		||||
	// as the size. I don't know why the +2 is here, but the
 | 
			
		||||
	// kernel uses +2 for its own implementation of this function.
 | 
			
		||||
	// I am scared that if we don't include the +2 here, the kernel
 | 
			
		||||
	// will silently write 2 words farther than we specify
 | 
			
		||||
	// and we'll get memory corruption.
 | 
			
		||||
	var buf [CTL_MAXNAME + 2]_C_int
 | 
			
		||||
	n := uintptr(CTL_MAXNAME) * siz
 | 
			
		||||
 | 
			
		||||
	p := (*byte)(unsafe.Pointer(&buf[0]))
 | 
			
		||||
	bytes, err := ByteSliceFromString(name)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Magic sysctl: "setting" 0.3 to a string name
 | 
			
		||||
	// lets you read back the array of integers form.
 | 
			
		||||
	if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return buf[0 : n/siz], nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func direntIno(buf []byte) (uint64, bool) {
 | 
			
		||||
	return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func direntReclen(buf []byte) (uint64, bool) {
 | 
			
		||||
	namlen, ok := direntNamlen(buf)
 | 
			
		||||
	if !ok {
 | 
			
		||||
		return 0, false
 | 
			
		||||
	}
 | 
			
		||||
	return (16 + namlen + 1 + 7) &^ 7, true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func direntNamlen(buf []byte) (uint64, bool) {
 | 
			
		||||
	return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sysnb	pipe() (r int, w int, err error)
 | 
			
		||||
 | 
			
		||||
func Pipe(p []int) (err error) {
 | 
			
		||||
	if len(p) != 2 {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	p[0], p[1], err = pipe()
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sysnb	pipe2(p *[2]_C_int, flags int) (r int, w int, err error)
 | 
			
		||||
 | 
			
		||||
func Pipe2(p []int, flags int) (err error) {
 | 
			
		||||
	if len(p) != 2 {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	var pp [2]_C_int
 | 
			
		||||
	// pipe2 on dragonfly takes an fds array as an argument, but still
 | 
			
		||||
	// returns the file descriptors.
 | 
			
		||||
	p[0], p[1], err = pipe2(&pp, flags)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	extpread(fd int, p []byte, flags int, offset int64) (n int, err error)
 | 
			
		||||
func Pread(fd int, p []byte, offset int64) (n int, err error) {
 | 
			
		||||
	return extpread(fd, p, 0, offset)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error)
 | 
			
		||||
func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
 | 
			
		||||
	return extpwrite(fd, p, 0, offset)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) {
 | 
			
		||||
	var rsa RawSockaddrAny
 | 
			
		||||
	var len _Socklen = SizeofSockaddrAny
 | 
			
		||||
	nfd, err = accept4(fd, &rsa, &len, flags)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if len > SizeofSockaddrAny {
 | 
			
		||||
		panic("RawSockaddrAny too small")
 | 
			
		||||
	}
 | 
			
		||||
	sa, err = anyToSockaddr(fd, &rsa)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		Close(nfd)
 | 
			
		||||
		nfd = 0
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	Getcwd(buf []byte) (n int, err error) = SYS___GETCWD
 | 
			
		||||
 | 
			
		||||
func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
 | 
			
		||||
	var _p0 unsafe.Pointer
 | 
			
		||||
	var bufsize uintptr
 | 
			
		||||
	if len(buf) > 0 {
 | 
			
		||||
		_p0 = unsafe.Pointer(&buf[0])
 | 
			
		||||
		bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
 | 
			
		||||
	}
 | 
			
		||||
	r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags))
 | 
			
		||||
	n = int(r0)
 | 
			
		||||
	if e1 != 0 {
 | 
			
		||||
		err = e1
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setattrlistTimes(path string, times []Timespec, flags int) error {
 | 
			
		||||
	// used on Darwin for UtimesNano
 | 
			
		||||
	return ENOSYS
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	ioctl(fd int, req uint, arg uintptr) (err error)
 | 
			
		||||
 | 
			
		||||
//sys	sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
 | 
			
		||||
 | 
			
		||||
func sysctlUname(mib []_C_int, old *byte, oldlen *uintptr) error {
 | 
			
		||||
	err := sysctl(mib, old, oldlen, nil, 0)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		// Utsname members on Dragonfly are only 32 bytes and
 | 
			
		||||
		// the syscall returns ENOMEM in case the actual value
 | 
			
		||||
		// is longer.
 | 
			
		||||
		if err == ENOMEM {
 | 
			
		||||
			err = nil
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Uname(uname *Utsname) error {
 | 
			
		||||
	mib := []_C_int{CTL_KERN, KERN_OSTYPE}
 | 
			
		||||
	n := unsafe.Sizeof(uname.Sysname)
 | 
			
		||||
	if err := sysctlUname(mib, &uname.Sysname[0], &n); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	uname.Sysname[unsafe.Sizeof(uname.Sysname)-1] = 0
 | 
			
		||||
 | 
			
		||||
	mib = []_C_int{CTL_KERN, KERN_HOSTNAME}
 | 
			
		||||
	n = unsafe.Sizeof(uname.Nodename)
 | 
			
		||||
	if err := sysctlUname(mib, &uname.Nodename[0], &n); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	uname.Nodename[unsafe.Sizeof(uname.Nodename)-1] = 0
 | 
			
		||||
 | 
			
		||||
	mib = []_C_int{CTL_KERN, KERN_OSRELEASE}
 | 
			
		||||
	n = unsafe.Sizeof(uname.Release)
 | 
			
		||||
	if err := sysctlUname(mib, &uname.Release[0], &n); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	uname.Release[unsafe.Sizeof(uname.Release)-1] = 0
 | 
			
		||||
 | 
			
		||||
	mib = []_C_int{CTL_KERN, KERN_VERSION}
 | 
			
		||||
	n = unsafe.Sizeof(uname.Version)
 | 
			
		||||
	if err := sysctlUname(mib, &uname.Version[0], &n); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// The version might have newlines or tabs in it, convert them to
 | 
			
		||||
	// spaces.
 | 
			
		||||
	for i, b := range uname.Version {
 | 
			
		||||
		if b == '\n' || b == '\t' {
 | 
			
		||||
			if i == len(uname.Version)-1 {
 | 
			
		||||
				uname.Version[i] = 0
 | 
			
		||||
			} else {
 | 
			
		||||
				uname.Version[i] = ' '
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	mib = []_C_int{CTL_HW, HW_MACHINE}
 | 
			
		||||
	n = unsafe.Sizeof(uname.Machine)
 | 
			
		||||
	if err := sysctlUname(mib, &uname.Machine[0], &n); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	uname.Machine[unsafe.Sizeof(uname.Machine)-1] = 0
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
 | 
			
		||||
	if raceenabled {
 | 
			
		||||
		raceReleaseMerge(unsafe.Pointer(&ioSync))
 | 
			
		||||
	}
 | 
			
		||||
	return sendfile(outfd, infd, offset, count)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Exposed directly
 | 
			
		||||
 */
 | 
			
		||||
//sys	Access(path string, mode uint32) (err error)
 | 
			
		||||
//sys	Adjtime(delta *Timeval, olddelta *Timeval) (err error)
 | 
			
		||||
//sys	Chdir(path string) (err error)
 | 
			
		||||
//sys	Chflags(path string, flags int) (err error)
 | 
			
		||||
//sys	Chmod(path string, mode uint32) (err error)
 | 
			
		||||
//sys	Chown(path string, uid int, gid int) (err error)
 | 
			
		||||
//sys	Chroot(path string) (err error)
 | 
			
		||||
//sys	Close(fd int) (err error)
 | 
			
		||||
//sys	Dup(fd int) (nfd int, err error)
 | 
			
		||||
//sys	Dup2(from int, to int) (err error)
 | 
			
		||||
//sys	Exit(code int)
 | 
			
		||||
//sys	Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
 | 
			
		||||
//sys	Fchdir(fd int) (err error)
 | 
			
		||||
//sys	Fchflags(fd int, flags int) (err error)
 | 
			
		||||
//sys	Fchmod(fd int, mode uint32) (err error)
 | 
			
		||||
//sys	Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
 | 
			
		||||
//sys	Fchown(fd int, uid int, gid int) (err error)
 | 
			
		||||
//sys	Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
 | 
			
		||||
//sys	Flock(fd int, how int) (err error)
 | 
			
		||||
//sys	Fpathconf(fd int, name int) (val int, err error)
 | 
			
		||||
//sys	Fstat(fd int, stat *Stat_t) (err error)
 | 
			
		||||
//sys	Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
 | 
			
		||||
//sys	Fstatfs(fd int, stat *Statfs_t) (err error)
 | 
			
		||||
//sys	Fsync(fd int) (err error)
 | 
			
		||||
//sys	Ftruncate(fd int, length int64) (err error)
 | 
			
		||||
//sys	Getdents(fd int, buf []byte) (n int, err error)
 | 
			
		||||
//sys	Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error)
 | 
			
		||||
//sys	Getdtablesize() (size int)
 | 
			
		||||
//sysnb	Getegid() (egid int)
 | 
			
		||||
//sysnb	Geteuid() (uid int)
 | 
			
		||||
//sysnb	Getgid() (gid int)
 | 
			
		||||
//sysnb	Getpgid(pid int) (pgid int, err error)
 | 
			
		||||
//sysnb	Getpgrp() (pgrp int)
 | 
			
		||||
//sysnb	Getpid() (pid int)
 | 
			
		||||
//sysnb	Getppid() (ppid int)
 | 
			
		||||
//sys	Getpriority(which int, who int) (prio int, err error)
 | 
			
		||||
//sysnb	Getrlimit(which int, lim *Rlimit) (err error)
 | 
			
		||||
//sysnb	Getrusage(who int, rusage *Rusage) (err error)
 | 
			
		||||
//sysnb	Getsid(pid int) (sid int, err error)
 | 
			
		||||
//sysnb	Gettimeofday(tv *Timeval) (err error)
 | 
			
		||||
//sysnb	Getuid() (uid int)
 | 
			
		||||
//sys	Issetugid() (tainted bool)
 | 
			
		||||
//sys	Kill(pid int, signum syscall.Signal) (err error)
 | 
			
		||||
//sys	Kqueue() (fd int, err error)
 | 
			
		||||
//sys	Lchown(path string, uid int, gid int) (err error)
 | 
			
		||||
//sys	Link(path string, link string) (err error)
 | 
			
		||||
//sys	Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
 | 
			
		||||
//sys	Listen(s int, backlog int) (err error)
 | 
			
		||||
//sys	Lstat(path string, stat *Stat_t) (err error)
 | 
			
		||||
//sys	Mkdir(path string, mode uint32) (err error)
 | 
			
		||||
//sys	Mkdirat(dirfd int, path string, mode uint32) (err error)
 | 
			
		||||
//sys	Mkfifo(path string, mode uint32) (err error)
 | 
			
		||||
//sys	Mknod(path string, mode uint32, dev int) (err error)
 | 
			
		||||
//sys	Mknodat(fd int, path string, mode uint32, dev int) (err error)
 | 
			
		||||
//sys	Nanosleep(time *Timespec, leftover *Timespec) (err error)
 | 
			
		||||
//sys	Open(path string, mode int, perm uint32) (fd int, err error)
 | 
			
		||||
//sys	Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error)
 | 
			
		||||
//sys	Pathconf(path string, name int) (val int, err error)
 | 
			
		||||
//sys	read(fd int, p []byte) (n int, err error)
 | 
			
		||||
//sys	Readlink(path string, buf []byte) (n int, err error)
 | 
			
		||||
//sys	Rename(from string, to string) (err error)
 | 
			
		||||
//sys	Renameat(fromfd int, from string, tofd int, to string) (err error)
 | 
			
		||||
//sys	Revoke(path string) (err error)
 | 
			
		||||
//sys	Rmdir(path string) (err error)
 | 
			
		||||
//sys	Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
 | 
			
		||||
//sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
 | 
			
		||||
//sysnb	Setegid(egid int) (err error)
 | 
			
		||||
//sysnb	Seteuid(euid int) (err error)
 | 
			
		||||
//sysnb	Setgid(gid int) (err error)
 | 
			
		||||
//sys	Setlogin(name string) (err error)
 | 
			
		||||
//sysnb	Setpgid(pid int, pgid int) (err error)
 | 
			
		||||
//sys	Setpriority(which int, who int, prio int) (err error)
 | 
			
		||||
//sysnb	Setregid(rgid int, egid int) (err error)
 | 
			
		||||
//sysnb	Setreuid(ruid int, euid int) (err error)
 | 
			
		||||
//sysnb	Setresgid(rgid int, egid int, sgid int) (err error)
 | 
			
		||||
//sysnb	Setresuid(ruid int, euid int, suid int) (err error)
 | 
			
		||||
//sysnb	Setrlimit(which int, lim *Rlimit) (err error)
 | 
			
		||||
//sysnb	Setsid() (pid int, err error)
 | 
			
		||||
//sysnb	Settimeofday(tp *Timeval) (err error)
 | 
			
		||||
//sysnb	Setuid(uid int) (err error)
 | 
			
		||||
//sys	Stat(path string, stat *Stat_t) (err error)
 | 
			
		||||
//sys	Statfs(path string, stat *Statfs_t) (err error)
 | 
			
		||||
//sys	Symlink(path string, link string) (err error)
 | 
			
		||||
//sys	Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
 | 
			
		||||
//sys	Sync() (err error)
 | 
			
		||||
//sys	Truncate(path string, length int64) (err error)
 | 
			
		||||
//sys	Umask(newmask int) (oldmask int)
 | 
			
		||||
//sys	Undelete(path string) (err error)
 | 
			
		||||
//sys	Unlink(path string) (err error)
 | 
			
		||||
//sys	Unlinkat(dirfd int, path string, flags int) (err error)
 | 
			
		||||
//sys	Unmount(path string, flags int) (err error)
 | 
			
		||||
//sys	write(fd int, p []byte) (n int, err error)
 | 
			
		||||
//sys	mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
 | 
			
		||||
//sys	munmap(addr uintptr, length uintptr) (err error)
 | 
			
		||||
//sys	readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ
 | 
			
		||||
//sys	writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE
 | 
			
		||||
//sys	accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error)
 | 
			
		||||
//sys	utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Unimplemented
 | 
			
		||||
 * TODO(jsing): Update this list for DragonFly.
 | 
			
		||||
 */
 | 
			
		||||
// Profil
 | 
			
		||||
// Sigaction
 | 
			
		||||
// Sigprocmask
 | 
			
		||||
// Getlogin
 | 
			
		||||
// Sigpending
 | 
			
		||||
// Sigaltstack
 | 
			
		||||
// Reboot
 | 
			
		||||
// Execve
 | 
			
		||||
// Vfork
 | 
			
		||||
// Sbrk
 | 
			
		||||
// Sstk
 | 
			
		||||
// Ovadvise
 | 
			
		||||
// Mincore
 | 
			
		||||
// Setitimer
 | 
			
		||||
// Swapon
 | 
			
		||||
// Select
 | 
			
		||||
// Sigsuspend
 | 
			
		||||
// Readv
 | 
			
		||||
// Writev
 | 
			
		||||
// Nfssvc
 | 
			
		||||
// Getfh
 | 
			
		||||
// Quotactl
 | 
			
		||||
// Mount
 | 
			
		||||
// Csops
 | 
			
		||||
// Waitid
 | 
			
		||||
// Add_profil
 | 
			
		||||
// Kdebug_trace
 | 
			
		||||
// Sigreturn
 | 
			
		||||
// Atsocket
 | 
			
		||||
// Kqueue_from_portset_np
 | 
			
		||||
// Kqueue_portset
 | 
			
		||||
// Getattrlist
 | 
			
		||||
// Setattrlist
 | 
			
		||||
// Getdirentriesattr
 | 
			
		||||
// Searchfs
 | 
			
		||||
// Delete
 | 
			
		||||
// Copyfile
 | 
			
		||||
// Watchevent
 | 
			
		||||
// Waitevent
 | 
			
		||||
// Modwatch
 | 
			
		||||
// Getxattr
 | 
			
		||||
// Fgetxattr
 | 
			
		||||
// Setxattr
 | 
			
		||||
// Fsetxattr
 | 
			
		||||
// Removexattr
 | 
			
		||||
// Fremovexattr
 | 
			
		||||
// Listxattr
 | 
			
		||||
// Flistxattr
 | 
			
		||||
// Fsctl
 | 
			
		||||
// Initgroups
 | 
			
		||||
// Posix_spawn
 | 
			
		||||
// Nfsclnt
 | 
			
		||||
// Fhopen
 | 
			
		||||
// Minherit
 | 
			
		||||
// Semsys
 | 
			
		||||
// Msgsys
 | 
			
		||||
// Shmsys
 | 
			
		||||
// Semctl
 | 
			
		||||
// Semget
 | 
			
		||||
// Semop
 | 
			
		||||
// Msgctl
 | 
			
		||||
// Msgget
 | 
			
		||||
// Msgsnd
 | 
			
		||||
// Msgrcv
 | 
			
		||||
// Shmat
 | 
			
		||||
// Shmctl
 | 
			
		||||
// Shmdt
 | 
			
		||||
// Shmget
 | 
			
		||||
// Shm_open
 | 
			
		||||
// Shm_unlink
 | 
			
		||||
// Sem_open
 | 
			
		||||
// Sem_close
 | 
			
		||||
// Sem_unlink
 | 
			
		||||
// Sem_wait
 | 
			
		||||
// Sem_trywait
 | 
			
		||||
// Sem_post
 | 
			
		||||
// Sem_getvalue
 | 
			
		||||
// Sem_init
 | 
			
		||||
// Sem_destroy
 | 
			
		||||
// Open_extended
 | 
			
		||||
// Umask_extended
 | 
			
		||||
// Stat_extended
 | 
			
		||||
// Lstat_extended
 | 
			
		||||
// Fstat_extended
 | 
			
		||||
// Chmod_extended
 | 
			
		||||
// Fchmod_extended
 | 
			
		||||
// Access_extended
 | 
			
		||||
// Settid
 | 
			
		||||
// Gettid
 | 
			
		||||
// Setsgroups
 | 
			
		||||
// Getsgroups
 | 
			
		||||
// Setwgroups
 | 
			
		||||
// Getwgroups
 | 
			
		||||
// Mkfifo_extended
 | 
			
		||||
// Mkdir_extended
 | 
			
		||||
// Identitysvc
 | 
			
		||||
// Shared_region_check_np
 | 
			
		||||
// Shared_region_map_np
 | 
			
		||||
// __pthread_mutex_destroy
 | 
			
		||||
// __pthread_mutex_init
 | 
			
		||||
// __pthread_mutex_lock
 | 
			
		||||
// __pthread_mutex_trylock
 | 
			
		||||
// __pthread_mutex_unlock
 | 
			
		||||
// __pthread_cond_init
 | 
			
		||||
// __pthread_cond_destroy
 | 
			
		||||
// __pthread_cond_broadcast
 | 
			
		||||
// __pthread_cond_signal
 | 
			
		||||
// Setsid_with_pid
 | 
			
		||||
// __pthread_cond_timedwait
 | 
			
		||||
// Aio_fsync
 | 
			
		||||
// Aio_return
 | 
			
		||||
// Aio_suspend
 | 
			
		||||
// Aio_cancel
 | 
			
		||||
// Aio_error
 | 
			
		||||
// Aio_read
 | 
			
		||||
// Aio_write
 | 
			
		||||
// Lio_listio
 | 
			
		||||
// __pthread_cond_wait
 | 
			
		||||
// Iopolicysys
 | 
			
		||||
// __pthread_kill
 | 
			
		||||
// __pthread_sigmask
 | 
			
		||||
// __sigwait
 | 
			
		||||
// __disable_threadsignal
 | 
			
		||||
// __pthread_markcancel
 | 
			
		||||
// __pthread_canceled
 | 
			
		||||
// __semwait_signal
 | 
			
		||||
// Proc_info
 | 
			
		||||
// Stat64_extended
 | 
			
		||||
// Lstat64_extended
 | 
			
		||||
// Fstat64_extended
 | 
			
		||||
// __pthread_chdir
 | 
			
		||||
// __pthread_fchdir
 | 
			
		||||
// Audit
 | 
			
		||||
// Auditon
 | 
			
		||||
// Getauid
 | 
			
		||||
// Setauid
 | 
			
		||||
// Getaudit
 | 
			
		||||
// Setaudit
 | 
			
		||||
// Getaudit_addr
 | 
			
		||||
// Setaudit_addr
 | 
			
		||||
// Auditctl
 | 
			
		||||
// Bsdthread_create
 | 
			
		||||
// Bsdthread_terminate
 | 
			
		||||
// Stack_snapshot
 | 
			
		||||
// Bsdthread_register
 | 
			
		||||
// Workq_open
 | 
			
		||||
// Workq_ops
 | 
			
		||||
// __mac_execve
 | 
			
		||||
// __mac_syscall
 | 
			
		||||
// __mac_get_file
 | 
			
		||||
// __mac_set_file
 | 
			
		||||
// __mac_get_link
 | 
			
		||||
// __mac_set_link
 | 
			
		||||
// __mac_get_proc
 | 
			
		||||
// __mac_set_proc
 | 
			
		||||
// __mac_get_fd
 | 
			
		||||
// __mac_set_fd
 | 
			
		||||
// __mac_get_pid
 | 
			
		||||
// __mac_get_lcid
 | 
			
		||||
// __mac_get_lctx
 | 
			
		||||
// __mac_set_lctx
 | 
			
		||||
// Setlcid
 | 
			
		||||
// Read_nocancel
 | 
			
		||||
// Write_nocancel
 | 
			
		||||
// Open_nocancel
 | 
			
		||||
// Close_nocancel
 | 
			
		||||
// Wait4_nocancel
 | 
			
		||||
// Recvmsg_nocancel
 | 
			
		||||
// Sendmsg_nocancel
 | 
			
		||||
// Recvfrom_nocancel
 | 
			
		||||
// Accept_nocancel
 | 
			
		||||
// Fcntl_nocancel
 | 
			
		||||
// Select_nocancel
 | 
			
		||||
// Fsync_nocancel
 | 
			
		||||
// Connect_nocancel
 | 
			
		||||
// Sigsuspend_nocancel
 | 
			
		||||
// Readv_nocancel
 | 
			
		||||
// Writev_nocancel
 | 
			
		||||
// Sendto_nocancel
 | 
			
		||||
// Pread_nocancel
 | 
			
		||||
// Pwrite_nocancel
 | 
			
		||||
// Waitid_nocancel
 | 
			
		||||
// Msgsnd_nocancel
 | 
			
		||||
// Msgrcv_nocancel
 | 
			
		||||
// Sem_wait_nocancel
 | 
			
		||||
// Aio_suspend_nocancel
 | 
			
		||||
// __sigwait_nocancel
 | 
			
		||||
// __semwait_signal_nocancel
 | 
			
		||||
// __mac_mount
 | 
			
		||||
// __mac_get_mount
 | 
			
		||||
// __mac_getfsstat
 | 
			
		||||
							
								
								
									
										57
									
								
								vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
// Copyright 2009 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build amd64 && dragonfly
 | 
			
		||||
// +build amd64,dragonfly
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"syscall"
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func setTimespec(sec, nsec int64) Timespec {
 | 
			
		||||
	return Timespec{Sec: sec, Nsec: nsec}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setTimeval(sec, usec int64) Timeval {
 | 
			
		||||
	return Timeval{Sec: sec, Usec: usec}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SetKevent(k *Kevent_t, fd, mode, flags int) {
 | 
			
		||||
	k.Ident = uint64(fd)
 | 
			
		||||
	k.Filter = int16(mode)
 | 
			
		||||
	k.Flags = uint16(flags)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (iov *Iovec) SetLen(length int) {
 | 
			
		||||
	iov.Len = uint64(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetControllen(length int) {
 | 
			
		||||
	msghdr.Controllen = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetIovlen(length int) {
 | 
			
		||||
	msghdr.Iovlen = int32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (cmsg *Cmsghdr) SetLen(length int) {
 | 
			
		||||
	cmsg.Len = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
 | 
			
		||||
	var writtenOut uint64 = 0
 | 
			
		||||
	_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0)
 | 
			
		||||
 | 
			
		||||
	written = int(writtenOut)
 | 
			
		||||
 | 
			
		||||
	if e1 != 0 {
 | 
			
		||||
		err = e1
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
 | 
			
		||||
							
								
								
									
										872
									
								
								vendor/golang.org/x/sys/unix/syscall_freebsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										872
									
								
								vendor/golang.org/x/sys/unix/syscall_freebsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,872 @@
 | 
			
		||||
// Copyright 2009,2010 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
// FreeBSD system calls.
 | 
			
		||||
// This file is compiled as ordinary Go code,
 | 
			
		||||
// but it is also input to mksyscall,
 | 
			
		||||
// which parses the //sys lines and generates system call stubs.
 | 
			
		||||
// Note that sometimes we use a lowercase //sys name and wrap
 | 
			
		||||
// it in our own nicer implementation, either here or in
 | 
			
		||||
// syscall_bsd.go or syscall_unix.go.
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"sync"
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	SYS_FSTAT_FREEBSD12         = 551 // { int fstat(int fd, _Out_ struct stat *sb); }
 | 
			
		||||
	SYS_FSTATAT_FREEBSD12       = 552 // { int fstatat(int fd, _In_z_ char *path, \
 | 
			
		||||
	SYS_GETDIRENTRIES_FREEBSD12 = 554 // { ssize_t getdirentries(int fd, \
 | 
			
		||||
	SYS_STATFS_FREEBSD12        = 555 // { int statfs(_In_z_ char *path, \
 | 
			
		||||
	SYS_FSTATFS_FREEBSD12       = 556 // { int fstatfs(int fd, \
 | 
			
		||||
	SYS_GETFSSTAT_FREEBSD12     = 557 // { int getfsstat( \
 | 
			
		||||
	SYS_MKNODAT_FREEBSD12       = 559 // { int mknodat(int fd, _In_z_ char *path, \
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// See https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/versions.html.
 | 
			
		||||
var (
 | 
			
		||||
	osreldateOnce sync.Once
 | 
			
		||||
	osreldate     uint32
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// INO64_FIRST from /usr/src/lib/libc/sys/compat-ino64.h
 | 
			
		||||
const _ino64First = 1200031
 | 
			
		||||
 | 
			
		||||
func supportsABI(ver uint32) bool {
 | 
			
		||||
	osreldateOnce.Do(func() { osreldate, _ = SysctlUint32("kern.osreldate") })
 | 
			
		||||
	return osreldate >= ver
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.
 | 
			
		||||
type SockaddrDatalink struct {
 | 
			
		||||
	Len    uint8
 | 
			
		||||
	Family uint8
 | 
			
		||||
	Index  uint16
 | 
			
		||||
	Type   uint8
 | 
			
		||||
	Nlen   uint8
 | 
			
		||||
	Alen   uint8
 | 
			
		||||
	Slen   uint8
 | 
			
		||||
	Data   [46]int8
 | 
			
		||||
	raw    RawSockaddrDatalink
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
 | 
			
		||||
	return nil, EAFNOSUPPORT
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Translate "kern.hostname" to []_C_int{0,1,2,3}.
 | 
			
		||||
func nametomib(name string) (mib []_C_int, err error) {
 | 
			
		||||
	const siz = unsafe.Sizeof(mib[0])
 | 
			
		||||
 | 
			
		||||
	// NOTE(rsc): It seems strange to set the buffer to have
 | 
			
		||||
	// size CTL_MAXNAME+2 but use only CTL_MAXNAME
 | 
			
		||||
	// as the size. I don't know why the +2 is here, but the
 | 
			
		||||
	// kernel uses +2 for its own implementation of this function.
 | 
			
		||||
	// I am scared that if we don't include the +2 here, the kernel
 | 
			
		||||
	// will silently write 2 words farther than we specify
 | 
			
		||||
	// and we'll get memory corruption.
 | 
			
		||||
	var buf [CTL_MAXNAME + 2]_C_int
 | 
			
		||||
	n := uintptr(CTL_MAXNAME) * siz
 | 
			
		||||
 | 
			
		||||
	p := (*byte)(unsafe.Pointer(&buf[0]))
 | 
			
		||||
	bytes, err := ByteSliceFromString(name)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Magic sysctl: "setting" 0.3 to a string name
 | 
			
		||||
	// lets you read back the array of integers form.
 | 
			
		||||
	if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return buf[0 : n/siz], nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func direntIno(buf []byte) (uint64, bool) {
 | 
			
		||||
	return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func direntReclen(buf []byte) (uint64, bool) {
 | 
			
		||||
	return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func direntNamlen(buf []byte) (uint64, bool) {
 | 
			
		||||
	return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Pipe(p []int) (err error) {
 | 
			
		||||
	return Pipe2(p, 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sysnb	pipe2(p *[2]_C_int, flags int) (err error)
 | 
			
		||||
 | 
			
		||||
func Pipe2(p []int, flags int) error {
 | 
			
		||||
	if len(p) != 2 {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	var pp [2]_C_int
 | 
			
		||||
	err := pipe2(&pp, flags)
 | 
			
		||||
	p[0] = int(pp[0])
 | 
			
		||||
	p[1] = int(pp[1])
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {
 | 
			
		||||
	var value IPMreqn
 | 
			
		||||
	vallen := _Socklen(SizeofIPMreqn)
 | 
			
		||||
	errno := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
 | 
			
		||||
	return &value, errno
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) {
 | 
			
		||||
	return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetsockoptXucred is a getsockopt wrapper that returns an Xucred struct.
 | 
			
		||||
// The usual level and opt are SOL_LOCAL and LOCAL_PEERCRED, respectively.
 | 
			
		||||
func GetsockoptXucred(fd, level, opt int) (*Xucred, error) {
 | 
			
		||||
	x := new(Xucred)
 | 
			
		||||
	vallen := _Socklen(SizeofXucred)
 | 
			
		||||
	err := getsockopt(fd, level, opt, unsafe.Pointer(x), &vallen)
 | 
			
		||||
	return x, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) {
 | 
			
		||||
	var rsa RawSockaddrAny
 | 
			
		||||
	var len _Socklen = SizeofSockaddrAny
 | 
			
		||||
	nfd, err = accept4(fd, &rsa, &len, flags)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if len > SizeofSockaddrAny {
 | 
			
		||||
		panic("RawSockaddrAny too small")
 | 
			
		||||
	}
 | 
			
		||||
	sa, err = anyToSockaddr(fd, &rsa)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		Close(nfd)
 | 
			
		||||
		nfd = 0
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	Getcwd(buf []byte) (n int, err error) = SYS___GETCWD
 | 
			
		||||
 | 
			
		||||
func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
 | 
			
		||||
	var (
 | 
			
		||||
		_p0          unsafe.Pointer
 | 
			
		||||
		bufsize      uintptr
 | 
			
		||||
		oldBuf       []statfs_freebsd11_t
 | 
			
		||||
		needsConvert bool
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	if len(buf) > 0 {
 | 
			
		||||
		if supportsABI(_ino64First) {
 | 
			
		||||
			_p0 = unsafe.Pointer(&buf[0])
 | 
			
		||||
			bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
 | 
			
		||||
		} else {
 | 
			
		||||
			n := len(buf)
 | 
			
		||||
			oldBuf = make([]statfs_freebsd11_t, n)
 | 
			
		||||
			_p0 = unsafe.Pointer(&oldBuf[0])
 | 
			
		||||
			bufsize = unsafe.Sizeof(statfs_freebsd11_t{}) * uintptr(n)
 | 
			
		||||
			needsConvert = true
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	var sysno uintptr = SYS_GETFSSTAT
 | 
			
		||||
	if supportsABI(_ino64First) {
 | 
			
		||||
		sysno = SYS_GETFSSTAT_FREEBSD12
 | 
			
		||||
	}
 | 
			
		||||
	r0, _, e1 := Syscall(sysno, uintptr(_p0), bufsize, uintptr(flags))
 | 
			
		||||
	n = int(r0)
 | 
			
		||||
	if e1 != 0 {
 | 
			
		||||
		err = e1
 | 
			
		||||
	}
 | 
			
		||||
	if e1 == 0 && needsConvert {
 | 
			
		||||
		for i := range oldBuf {
 | 
			
		||||
			buf[i].convertFrom(&oldBuf[i])
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setattrlistTimes(path string, times []Timespec, flags int) error {
 | 
			
		||||
	// used on Darwin for UtimesNano
 | 
			
		||||
	return ENOSYS
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	ioctl(fd int, req uint, arg uintptr) (err error)
 | 
			
		||||
 | 
			
		||||
//sys	sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
 | 
			
		||||
 | 
			
		||||
func Uname(uname *Utsname) error {
 | 
			
		||||
	mib := []_C_int{CTL_KERN, KERN_OSTYPE}
 | 
			
		||||
	n := unsafe.Sizeof(uname.Sysname)
 | 
			
		||||
	if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	mib = []_C_int{CTL_KERN, KERN_HOSTNAME}
 | 
			
		||||
	n = unsafe.Sizeof(uname.Nodename)
 | 
			
		||||
	if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	mib = []_C_int{CTL_KERN, KERN_OSRELEASE}
 | 
			
		||||
	n = unsafe.Sizeof(uname.Release)
 | 
			
		||||
	if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	mib = []_C_int{CTL_KERN, KERN_VERSION}
 | 
			
		||||
	n = unsafe.Sizeof(uname.Version)
 | 
			
		||||
	if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// The version might have newlines or tabs in it, convert them to
 | 
			
		||||
	// spaces.
 | 
			
		||||
	for i, b := range uname.Version {
 | 
			
		||||
		if b == '\n' || b == '\t' {
 | 
			
		||||
			if i == len(uname.Version)-1 {
 | 
			
		||||
				uname.Version[i] = 0
 | 
			
		||||
			} else {
 | 
			
		||||
				uname.Version[i] = ' '
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	mib = []_C_int{CTL_HW, HW_MACHINE}
 | 
			
		||||
	n = unsafe.Sizeof(uname.Machine)
 | 
			
		||||
	if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Stat(path string, st *Stat_t) (err error) {
 | 
			
		||||
	var oldStat stat_freebsd11_t
 | 
			
		||||
	if supportsABI(_ino64First) {
 | 
			
		||||
		return fstatat_freebsd12(AT_FDCWD, path, st, 0)
 | 
			
		||||
	}
 | 
			
		||||
	err = stat(path, &oldStat)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	st.convertFrom(&oldStat)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Lstat(path string, st *Stat_t) (err error) {
 | 
			
		||||
	var oldStat stat_freebsd11_t
 | 
			
		||||
	if supportsABI(_ino64First) {
 | 
			
		||||
		return fstatat_freebsd12(AT_FDCWD, path, st, AT_SYMLINK_NOFOLLOW)
 | 
			
		||||
	}
 | 
			
		||||
	err = lstat(path, &oldStat)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	st.convertFrom(&oldStat)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Fstat(fd int, st *Stat_t) (err error) {
 | 
			
		||||
	var oldStat stat_freebsd11_t
 | 
			
		||||
	if supportsABI(_ino64First) {
 | 
			
		||||
		return fstat_freebsd12(fd, st)
 | 
			
		||||
	}
 | 
			
		||||
	err = fstat(fd, &oldStat)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	st.convertFrom(&oldStat)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Fstatat(fd int, path string, st *Stat_t, flags int) (err error) {
 | 
			
		||||
	var oldStat stat_freebsd11_t
 | 
			
		||||
	if supportsABI(_ino64First) {
 | 
			
		||||
		return fstatat_freebsd12(fd, path, st, flags)
 | 
			
		||||
	}
 | 
			
		||||
	err = fstatat(fd, path, &oldStat, flags)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	st.convertFrom(&oldStat)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Statfs(path string, st *Statfs_t) (err error) {
 | 
			
		||||
	var oldStatfs statfs_freebsd11_t
 | 
			
		||||
	if supportsABI(_ino64First) {
 | 
			
		||||
		return statfs_freebsd12(path, st)
 | 
			
		||||
	}
 | 
			
		||||
	err = statfs(path, &oldStatfs)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	st.convertFrom(&oldStatfs)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Fstatfs(fd int, st *Statfs_t) (err error) {
 | 
			
		||||
	var oldStatfs statfs_freebsd11_t
 | 
			
		||||
	if supportsABI(_ino64First) {
 | 
			
		||||
		return fstatfs_freebsd12(fd, st)
 | 
			
		||||
	}
 | 
			
		||||
	err = fstatfs(fd, &oldStatfs)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	st.convertFrom(&oldStatfs)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Getdents(fd int, buf []byte) (n int, err error) {
 | 
			
		||||
	return Getdirentries(fd, buf, nil)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
 | 
			
		||||
	if supportsABI(_ino64First) {
 | 
			
		||||
		if basep == nil || unsafe.Sizeof(*basep) == 8 {
 | 
			
		||||
			return getdirentries_freebsd12(fd, buf, (*uint64)(unsafe.Pointer(basep)))
 | 
			
		||||
		}
 | 
			
		||||
		// The freebsd12 syscall needs a 64-bit base. On 32-bit machines
 | 
			
		||||
		// we can't just use the basep passed in. See #32498.
 | 
			
		||||
		var base uint64 = uint64(*basep)
 | 
			
		||||
		n, err = getdirentries_freebsd12(fd, buf, &base)
 | 
			
		||||
		*basep = uintptr(base)
 | 
			
		||||
		if base>>32 != 0 {
 | 
			
		||||
			// We can't stuff the base back into a uintptr, so any
 | 
			
		||||
			// future calls would be suspect. Generate an error.
 | 
			
		||||
			// EIO is allowed by getdirentries.
 | 
			
		||||
			err = EIO
 | 
			
		||||
		}
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// The old syscall entries are smaller than the new. Use 1/4 of the original
 | 
			
		||||
	// buffer size rounded up to DIRBLKSIZ (see /usr/src/lib/libc/sys/getdirentries.c).
 | 
			
		||||
	oldBufLen := roundup(len(buf)/4, _dirblksiz)
 | 
			
		||||
	oldBuf := make([]byte, oldBufLen)
 | 
			
		||||
	n, err = getdirentries(fd, oldBuf, basep)
 | 
			
		||||
	if err == nil && n > 0 {
 | 
			
		||||
		n = convertFromDirents11(buf, oldBuf[:n])
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Mknod(path string, mode uint32, dev uint64) (err error) {
 | 
			
		||||
	var oldDev int
 | 
			
		||||
	if supportsABI(_ino64First) {
 | 
			
		||||
		return mknodat_freebsd12(AT_FDCWD, path, mode, dev)
 | 
			
		||||
	}
 | 
			
		||||
	oldDev = int(dev)
 | 
			
		||||
	return mknod(path, mode, oldDev)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Mknodat(fd int, path string, mode uint32, dev uint64) (err error) {
 | 
			
		||||
	var oldDev int
 | 
			
		||||
	if supportsABI(_ino64First) {
 | 
			
		||||
		return mknodat_freebsd12(fd, path, mode, dev)
 | 
			
		||||
	}
 | 
			
		||||
	oldDev = int(dev)
 | 
			
		||||
	return mknodat(fd, path, mode, oldDev)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// round x to the nearest multiple of y, larger or equal to x.
 | 
			
		||||
//
 | 
			
		||||
// from /usr/include/sys/param.h Macros for counting and rounding.
 | 
			
		||||
// #define roundup(x, y)   ((((x)+((y)-1))/(y))*(y))
 | 
			
		||||
func roundup(x, y int) int {
 | 
			
		||||
	return ((x + y - 1) / y) * y
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *Stat_t) convertFrom(old *stat_freebsd11_t) {
 | 
			
		||||
	*s = Stat_t{
 | 
			
		||||
		Dev:     uint64(old.Dev),
 | 
			
		||||
		Ino:     uint64(old.Ino),
 | 
			
		||||
		Nlink:   uint64(old.Nlink),
 | 
			
		||||
		Mode:    old.Mode,
 | 
			
		||||
		Uid:     old.Uid,
 | 
			
		||||
		Gid:     old.Gid,
 | 
			
		||||
		Rdev:    uint64(old.Rdev),
 | 
			
		||||
		Atim:    old.Atim,
 | 
			
		||||
		Mtim:    old.Mtim,
 | 
			
		||||
		Ctim:    old.Ctim,
 | 
			
		||||
		Btim:    old.Btim,
 | 
			
		||||
		Size:    old.Size,
 | 
			
		||||
		Blocks:  old.Blocks,
 | 
			
		||||
		Blksize: old.Blksize,
 | 
			
		||||
		Flags:   old.Flags,
 | 
			
		||||
		Gen:     uint64(old.Gen),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *Statfs_t) convertFrom(old *statfs_freebsd11_t) {
 | 
			
		||||
	*s = Statfs_t{
 | 
			
		||||
		Version:     _statfsVersion,
 | 
			
		||||
		Type:        old.Type,
 | 
			
		||||
		Flags:       old.Flags,
 | 
			
		||||
		Bsize:       old.Bsize,
 | 
			
		||||
		Iosize:      old.Iosize,
 | 
			
		||||
		Blocks:      old.Blocks,
 | 
			
		||||
		Bfree:       old.Bfree,
 | 
			
		||||
		Bavail:      old.Bavail,
 | 
			
		||||
		Files:       old.Files,
 | 
			
		||||
		Ffree:       old.Ffree,
 | 
			
		||||
		Syncwrites:  old.Syncwrites,
 | 
			
		||||
		Asyncwrites: old.Asyncwrites,
 | 
			
		||||
		Syncreads:   old.Syncreads,
 | 
			
		||||
		Asyncreads:  old.Asyncreads,
 | 
			
		||||
		// Spare
 | 
			
		||||
		Namemax: old.Namemax,
 | 
			
		||||
		Owner:   old.Owner,
 | 
			
		||||
		Fsid:    old.Fsid,
 | 
			
		||||
		// Charspare
 | 
			
		||||
		// Fstypename
 | 
			
		||||
		// Mntfromname
 | 
			
		||||
		// Mntonname
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	sl := old.Fstypename[:]
 | 
			
		||||
	n := clen(*(*[]byte)(unsafe.Pointer(&sl)))
 | 
			
		||||
	copy(s.Fstypename[:], old.Fstypename[:n])
 | 
			
		||||
 | 
			
		||||
	sl = old.Mntfromname[:]
 | 
			
		||||
	n = clen(*(*[]byte)(unsafe.Pointer(&sl)))
 | 
			
		||||
	copy(s.Mntfromname[:], old.Mntfromname[:n])
 | 
			
		||||
 | 
			
		||||
	sl = old.Mntonname[:]
 | 
			
		||||
	n = clen(*(*[]byte)(unsafe.Pointer(&sl)))
 | 
			
		||||
	copy(s.Mntonname[:], old.Mntonname[:n])
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func convertFromDirents11(buf []byte, old []byte) int {
 | 
			
		||||
	const (
 | 
			
		||||
		fixedSize    = int(unsafe.Offsetof(Dirent{}.Name))
 | 
			
		||||
		oldFixedSize = int(unsafe.Offsetof(dirent_freebsd11{}.Name))
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	dstPos := 0
 | 
			
		||||
	srcPos := 0
 | 
			
		||||
	for dstPos+fixedSize < len(buf) && srcPos+oldFixedSize < len(old) {
 | 
			
		||||
		var dstDirent Dirent
 | 
			
		||||
		var srcDirent dirent_freebsd11
 | 
			
		||||
 | 
			
		||||
		// If multiple direntries are written, sometimes when we reach the final one,
 | 
			
		||||
		// we may have cap of old less than size of dirent_freebsd11.
 | 
			
		||||
		copy((*[unsafe.Sizeof(srcDirent)]byte)(unsafe.Pointer(&srcDirent))[:], old[srcPos:])
 | 
			
		||||
 | 
			
		||||
		reclen := roundup(fixedSize+int(srcDirent.Namlen)+1, 8)
 | 
			
		||||
		if dstPos+reclen > len(buf) {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		dstDirent.Fileno = uint64(srcDirent.Fileno)
 | 
			
		||||
		dstDirent.Off = 0
 | 
			
		||||
		dstDirent.Reclen = uint16(reclen)
 | 
			
		||||
		dstDirent.Type = srcDirent.Type
 | 
			
		||||
		dstDirent.Pad0 = 0
 | 
			
		||||
		dstDirent.Namlen = uint16(srcDirent.Namlen)
 | 
			
		||||
		dstDirent.Pad1 = 0
 | 
			
		||||
 | 
			
		||||
		copy(dstDirent.Name[:], srcDirent.Name[:srcDirent.Namlen])
 | 
			
		||||
		copy(buf[dstPos:], (*[unsafe.Sizeof(dstDirent)]byte)(unsafe.Pointer(&dstDirent))[:])
 | 
			
		||||
		padding := buf[dstPos+fixedSize+int(dstDirent.Namlen) : dstPos+reclen]
 | 
			
		||||
		for i := range padding {
 | 
			
		||||
			padding[i] = 0
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		dstPos += int(dstDirent.Reclen)
 | 
			
		||||
		srcPos += int(srcDirent.Reclen)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return dstPos
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
 | 
			
		||||
	if raceenabled {
 | 
			
		||||
		raceReleaseMerge(unsafe.Pointer(&ioSync))
 | 
			
		||||
	}
 | 
			
		||||
	return sendfile(outfd, infd, offset, count)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	ptrace(request int, pid int, addr uintptr, data int) (err error)
 | 
			
		||||
 | 
			
		||||
func PtraceAttach(pid int) (err error) {
 | 
			
		||||
	return ptrace(PTRACE_ATTACH, pid, 0, 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PtraceCont(pid int, signal int) (err error) {
 | 
			
		||||
	return ptrace(PTRACE_CONT, pid, 1, signal)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PtraceDetach(pid int) (err error) {
 | 
			
		||||
	return ptrace(PTRACE_DETACH, pid, 1, 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PtraceGetFpRegs(pid int, fpregsout *FpReg) (err error) {
 | 
			
		||||
	return ptrace(PTRACE_GETFPREGS, pid, uintptr(unsafe.Pointer(fpregsout)), 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PtraceGetRegs(pid int, regsout *Reg) (err error) {
 | 
			
		||||
	return ptrace(PTRACE_GETREGS, pid, uintptr(unsafe.Pointer(regsout)), 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PtraceLwpEvents(pid int, enable int) (err error) {
 | 
			
		||||
	return ptrace(PTRACE_LWPEVENTS, pid, 0, enable)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PtraceLwpInfo(pid int, info uintptr) (err error) {
 | 
			
		||||
	return ptrace(PTRACE_LWPINFO, pid, info, int(unsafe.Sizeof(PtraceLwpInfoStruct{})))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) {
 | 
			
		||||
	return PtraceIO(PIOD_READ_D, pid, addr, out, SizeofLong)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) {
 | 
			
		||||
	return PtraceIO(PIOD_READ_I, pid, addr, out, SizeofLong)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) {
 | 
			
		||||
	return PtraceIO(PIOD_WRITE_D, pid, addr, data, SizeofLong)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) {
 | 
			
		||||
	return PtraceIO(PIOD_WRITE_I, pid, addr, data, SizeofLong)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PtraceSetRegs(pid int, regs *Reg) (err error) {
 | 
			
		||||
	return ptrace(PTRACE_SETREGS, pid, uintptr(unsafe.Pointer(regs)), 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PtraceSingleStep(pid int) (err error) {
 | 
			
		||||
	return ptrace(PTRACE_SINGLESTEP, pid, 1, 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Exposed directly
 | 
			
		||||
 */
 | 
			
		||||
//sys	Access(path string, mode uint32) (err error)
 | 
			
		||||
//sys	Adjtime(delta *Timeval, olddelta *Timeval) (err error)
 | 
			
		||||
//sys	CapEnter() (err error)
 | 
			
		||||
//sys	capRightsGet(version int, fd int, rightsp *CapRights) (err error) = SYS___CAP_RIGHTS_GET
 | 
			
		||||
//sys	capRightsLimit(fd int, rightsp *CapRights) (err error)
 | 
			
		||||
//sys	Chdir(path string) (err error)
 | 
			
		||||
//sys	Chflags(path string, flags int) (err error)
 | 
			
		||||
//sys	Chmod(path string, mode uint32) (err error)
 | 
			
		||||
//sys	Chown(path string, uid int, gid int) (err error)
 | 
			
		||||
//sys	Chroot(path string) (err error)
 | 
			
		||||
//sys	Close(fd int) (err error)
 | 
			
		||||
//sys	Dup(fd int) (nfd int, err error)
 | 
			
		||||
//sys	Dup2(from int, to int) (err error)
 | 
			
		||||
//sys	Exit(code int)
 | 
			
		||||
//sys	ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
 | 
			
		||||
//sys	ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
 | 
			
		||||
//sys	ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error)
 | 
			
		||||
//sys	ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
 | 
			
		||||
//sys	ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
 | 
			
		||||
//sys	ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
 | 
			
		||||
//sys	ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error)
 | 
			
		||||
//sys	ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
 | 
			
		||||
//sys	ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
 | 
			
		||||
//sys	ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
 | 
			
		||||
//sys	ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error)
 | 
			
		||||
//sys	ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
 | 
			
		||||
//sys	Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE
 | 
			
		||||
//sys	Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
 | 
			
		||||
//sys	Fchdir(fd int) (err error)
 | 
			
		||||
//sys	Fchflags(fd int, flags int) (err error)
 | 
			
		||||
//sys	Fchmod(fd int, mode uint32) (err error)
 | 
			
		||||
//sys	Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
 | 
			
		||||
//sys	Fchown(fd int, uid int, gid int) (err error)
 | 
			
		||||
//sys	Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
 | 
			
		||||
//sys	Flock(fd int, how int) (err error)
 | 
			
		||||
//sys	Fpathconf(fd int, name int) (val int, err error)
 | 
			
		||||
//sys	fstat(fd int, stat *stat_freebsd11_t) (err error)
 | 
			
		||||
//sys	fstat_freebsd12(fd int, stat *Stat_t) (err error)
 | 
			
		||||
//sys	fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error)
 | 
			
		||||
//sys	fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error)
 | 
			
		||||
//sys	fstatfs(fd int, stat *statfs_freebsd11_t) (err error)
 | 
			
		||||
//sys	fstatfs_freebsd12(fd int, stat *Statfs_t) (err error)
 | 
			
		||||
//sys	Fsync(fd int) (err error)
 | 
			
		||||
//sys	Ftruncate(fd int, length int64) (err error)
 | 
			
		||||
//sys	getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error)
 | 
			
		||||
//sys	getdirentries_freebsd12(fd int, buf []byte, basep *uint64) (n int, err error)
 | 
			
		||||
//sys	Getdtablesize() (size int)
 | 
			
		||||
//sysnb	Getegid() (egid int)
 | 
			
		||||
//sysnb	Geteuid() (uid int)
 | 
			
		||||
//sysnb	Getgid() (gid int)
 | 
			
		||||
//sysnb	Getpgid(pid int) (pgid int, err error)
 | 
			
		||||
//sysnb	Getpgrp() (pgrp int)
 | 
			
		||||
//sysnb	Getpid() (pid int)
 | 
			
		||||
//sysnb	Getppid() (ppid int)
 | 
			
		||||
//sys	Getpriority(which int, who int) (prio int, err error)
 | 
			
		||||
//sysnb	Getrlimit(which int, lim *Rlimit) (err error)
 | 
			
		||||
//sysnb	Getrusage(who int, rusage *Rusage) (err error)
 | 
			
		||||
//sysnb	Getsid(pid int) (sid int, err error)
 | 
			
		||||
//sysnb	Gettimeofday(tv *Timeval) (err error)
 | 
			
		||||
//sysnb	Getuid() (uid int)
 | 
			
		||||
//sys	Issetugid() (tainted bool)
 | 
			
		||||
//sys	Kill(pid int, signum syscall.Signal) (err error)
 | 
			
		||||
//sys	Kqueue() (fd int, err error)
 | 
			
		||||
//sys	Lchown(path string, uid int, gid int) (err error)
 | 
			
		||||
//sys	Link(path string, link string) (err error)
 | 
			
		||||
//sys	Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
 | 
			
		||||
//sys	Listen(s int, backlog int) (err error)
 | 
			
		||||
//sys	lstat(path string, stat *stat_freebsd11_t) (err error)
 | 
			
		||||
//sys	Mkdir(path string, mode uint32) (err error)
 | 
			
		||||
//sys	Mkdirat(dirfd int, path string, mode uint32) (err error)
 | 
			
		||||
//sys	Mkfifo(path string, mode uint32) (err error)
 | 
			
		||||
//sys	mknod(path string, mode uint32, dev int) (err error)
 | 
			
		||||
//sys	mknodat(fd int, path string, mode uint32, dev int) (err error)
 | 
			
		||||
//sys	mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error)
 | 
			
		||||
//sys	Nanosleep(time *Timespec, leftover *Timespec) (err error)
 | 
			
		||||
//sys	Open(path string, mode int, perm uint32) (fd int, err error)
 | 
			
		||||
//sys	Openat(fdat int, path string, mode int, perm uint32) (fd int, err error)
 | 
			
		||||
//sys	Pathconf(path string, name int) (val int, err error)
 | 
			
		||||
//sys	Pread(fd int, p []byte, offset int64) (n int, err error)
 | 
			
		||||
//sys	Pwrite(fd int, p []byte, offset int64) (n int, err error)
 | 
			
		||||
//sys	read(fd int, p []byte) (n int, err error)
 | 
			
		||||
//sys	Readlink(path string, buf []byte) (n int, err error)
 | 
			
		||||
//sys	Readlinkat(dirfd int, path string, buf []byte) (n int, err error)
 | 
			
		||||
//sys	Rename(from string, to string) (err error)
 | 
			
		||||
//sys	Renameat(fromfd int, from string, tofd int, to string) (err error)
 | 
			
		||||
//sys	Revoke(path string) (err error)
 | 
			
		||||
//sys	Rmdir(path string) (err error)
 | 
			
		||||
//sys	Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
 | 
			
		||||
//sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
 | 
			
		||||
//sysnb	Setegid(egid int) (err error)
 | 
			
		||||
//sysnb	Seteuid(euid int) (err error)
 | 
			
		||||
//sysnb	Setgid(gid int) (err error)
 | 
			
		||||
//sys	Setlogin(name string) (err error)
 | 
			
		||||
//sysnb	Setpgid(pid int, pgid int) (err error)
 | 
			
		||||
//sys	Setpriority(which int, who int, prio int) (err error)
 | 
			
		||||
//sysnb	Setregid(rgid int, egid int) (err error)
 | 
			
		||||
//sysnb	Setreuid(ruid int, euid int) (err error)
 | 
			
		||||
//sysnb	Setresgid(rgid int, egid int, sgid int) (err error)
 | 
			
		||||
//sysnb	Setresuid(ruid int, euid int, suid int) (err error)
 | 
			
		||||
//sysnb	Setrlimit(which int, lim *Rlimit) (err error)
 | 
			
		||||
//sysnb	Setsid() (pid int, err error)
 | 
			
		||||
//sysnb	Settimeofday(tp *Timeval) (err error)
 | 
			
		||||
//sysnb	Setuid(uid int) (err error)
 | 
			
		||||
//sys	stat(path string, stat *stat_freebsd11_t) (err error)
 | 
			
		||||
//sys	statfs(path string, stat *statfs_freebsd11_t) (err error)
 | 
			
		||||
//sys	statfs_freebsd12(path string, stat *Statfs_t) (err error)
 | 
			
		||||
//sys	Symlink(path string, link string) (err error)
 | 
			
		||||
//sys	Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
 | 
			
		||||
//sys	Sync() (err error)
 | 
			
		||||
//sys	Truncate(path string, length int64) (err error)
 | 
			
		||||
//sys	Umask(newmask int) (oldmask int)
 | 
			
		||||
//sys	Undelete(path string) (err error)
 | 
			
		||||
//sys	Unlink(path string) (err error)
 | 
			
		||||
//sys	Unlinkat(dirfd int, path string, flags int) (err error)
 | 
			
		||||
//sys	Unmount(path string, flags int) (err error)
 | 
			
		||||
//sys	write(fd int, p []byte) (n int, err error)
 | 
			
		||||
//sys	mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
 | 
			
		||||
//sys	munmap(addr uintptr, length uintptr) (err error)
 | 
			
		||||
//sys	readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ
 | 
			
		||||
//sys	writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE
 | 
			
		||||
//sys	accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error)
 | 
			
		||||
//sys	utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Unimplemented
 | 
			
		||||
 */
 | 
			
		||||
// Profil
 | 
			
		||||
// Sigaction
 | 
			
		||||
// Sigprocmask
 | 
			
		||||
// Getlogin
 | 
			
		||||
// Sigpending
 | 
			
		||||
// Sigaltstack
 | 
			
		||||
// Ioctl
 | 
			
		||||
// Reboot
 | 
			
		||||
// Execve
 | 
			
		||||
// Vfork
 | 
			
		||||
// Sbrk
 | 
			
		||||
// Sstk
 | 
			
		||||
// Ovadvise
 | 
			
		||||
// Mincore
 | 
			
		||||
// Setitimer
 | 
			
		||||
// Swapon
 | 
			
		||||
// Select
 | 
			
		||||
// Sigsuspend
 | 
			
		||||
// Readv
 | 
			
		||||
// Writev
 | 
			
		||||
// Nfssvc
 | 
			
		||||
// Getfh
 | 
			
		||||
// Quotactl
 | 
			
		||||
// Mount
 | 
			
		||||
// Csops
 | 
			
		||||
// Waitid
 | 
			
		||||
// Add_profil
 | 
			
		||||
// Kdebug_trace
 | 
			
		||||
// Sigreturn
 | 
			
		||||
// Atsocket
 | 
			
		||||
// Kqueue_from_portset_np
 | 
			
		||||
// Kqueue_portset
 | 
			
		||||
// Getattrlist
 | 
			
		||||
// Setattrlist
 | 
			
		||||
// Getdents
 | 
			
		||||
// Getdirentriesattr
 | 
			
		||||
// Searchfs
 | 
			
		||||
// Delete
 | 
			
		||||
// Copyfile
 | 
			
		||||
// Watchevent
 | 
			
		||||
// Waitevent
 | 
			
		||||
// Modwatch
 | 
			
		||||
// Fsctl
 | 
			
		||||
// Initgroups
 | 
			
		||||
// Posix_spawn
 | 
			
		||||
// Nfsclnt
 | 
			
		||||
// Fhopen
 | 
			
		||||
// Minherit
 | 
			
		||||
// Semsys
 | 
			
		||||
// Msgsys
 | 
			
		||||
// Shmsys
 | 
			
		||||
// Semctl
 | 
			
		||||
// Semget
 | 
			
		||||
// Semop
 | 
			
		||||
// Msgctl
 | 
			
		||||
// Msgget
 | 
			
		||||
// Msgsnd
 | 
			
		||||
// Msgrcv
 | 
			
		||||
// Shmat
 | 
			
		||||
// Shmctl
 | 
			
		||||
// Shmdt
 | 
			
		||||
// Shmget
 | 
			
		||||
// Shm_open
 | 
			
		||||
// Shm_unlink
 | 
			
		||||
// Sem_open
 | 
			
		||||
// Sem_close
 | 
			
		||||
// Sem_unlink
 | 
			
		||||
// Sem_wait
 | 
			
		||||
// Sem_trywait
 | 
			
		||||
// Sem_post
 | 
			
		||||
// Sem_getvalue
 | 
			
		||||
// Sem_init
 | 
			
		||||
// Sem_destroy
 | 
			
		||||
// Open_extended
 | 
			
		||||
// Umask_extended
 | 
			
		||||
// Stat_extended
 | 
			
		||||
// Lstat_extended
 | 
			
		||||
// Fstat_extended
 | 
			
		||||
// Chmod_extended
 | 
			
		||||
// Fchmod_extended
 | 
			
		||||
// Access_extended
 | 
			
		||||
// Settid
 | 
			
		||||
// Gettid
 | 
			
		||||
// Setsgroups
 | 
			
		||||
// Getsgroups
 | 
			
		||||
// Setwgroups
 | 
			
		||||
// Getwgroups
 | 
			
		||||
// Mkfifo_extended
 | 
			
		||||
// Mkdir_extended
 | 
			
		||||
// Identitysvc
 | 
			
		||||
// Shared_region_check_np
 | 
			
		||||
// Shared_region_map_np
 | 
			
		||||
// __pthread_mutex_destroy
 | 
			
		||||
// __pthread_mutex_init
 | 
			
		||||
// __pthread_mutex_lock
 | 
			
		||||
// __pthread_mutex_trylock
 | 
			
		||||
// __pthread_mutex_unlock
 | 
			
		||||
// __pthread_cond_init
 | 
			
		||||
// __pthread_cond_destroy
 | 
			
		||||
// __pthread_cond_broadcast
 | 
			
		||||
// __pthread_cond_signal
 | 
			
		||||
// Setsid_with_pid
 | 
			
		||||
// __pthread_cond_timedwait
 | 
			
		||||
// Aio_fsync
 | 
			
		||||
// Aio_return
 | 
			
		||||
// Aio_suspend
 | 
			
		||||
// Aio_cancel
 | 
			
		||||
// Aio_error
 | 
			
		||||
// Aio_read
 | 
			
		||||
// Aio_write
 | 
			
		||||
// Lio_listio
 | 
			
		||||
// __pthread_cond_wait
 | 
			
		||||
// Iopolicysys
 | 
			
		||||
// __pthread_kill
 | 
			
		||||
// __pthread_sigmask
 | 
			
		||||
// __sigwait
 | 
			
		||||
// __disable_threadsignal
 | 
			
		||||
// __pthread_markcancel
 | 
			
		||||
// __pthread_canceled
 | 
			
		||||
// __semwait_signal
 | 
			
		||||
// Proc_info
 | 
			
		||||
// Stat64_extended
 | 
			
		||||
// Lstat64_extended
 | 
			
		||||
// Fstat64_extended
 | 
			
		||||
// __pthread_chdir
 | 
			
		||||
// __pthread_fchdir
 | 
			
		||||
// Audit
 | 
			
		||||
// Auditon
 | 
			
		||||
// Getauid
 | 
			
		||||
// Setauid
 | 
			
		||||
// Getaudit
 | 
			
		||||
// Setaudit
 | 
			
		||||
// Getaudit_addr
 | 
			
		||||
// Setaudit_addr
 | 
			
		||||
// Auditctl
 | 
			
		||||
// Bsdthread_create
 | 
			
		||||
// Bsdthread_terminate
 | 
			
		||||
// Stack_snapshot
 | 
			
		||||
// Bsdthread_register
 | 
			
		||||
// Workq_open
 | 
			
		||||
// Workq_ops
 | 
			
		||||
// __mac_execve
 | 
			
		||||
// __mac_syscall
 | 
			
		||||
// __mac_get_file
 | 
			
		||||
// __mac_set_file
 | 
			
		||||
// __mac_get_link
 | 
			
		||||
// __mac_set_link
 | 
			
		||||
// __mac_get_proc
 | 
			
		||||
// __mac_set_proc
 | 
			
		||||
// __mac_get_fd
 | 
			
		||||
// __mac_set_fd
 | 
			
		||||
// __mac_get_pid
 | 
			
		||||
// __mac_get_lcid
 | 
			
		||||
// __mac_get_lctx
 | 
			
		||||
// __mac_set_lctx
 | 
			
		||||
// Setlcid
 | 
			
		||||
// Read_nocancel
 | 
			
		||||
// Write_nocancel
 | 
			
		||||
// Open_nocancel
 | 
			
		||||
// Close_nocancel
 | 
			
		||||
// Wait4_nocancel
 | 
			
		||||
// Recvmsg_nocancel
 | 
			
		||||
// Sendmsg_nocancel
 | 
			
		||||
// Recvfrom_nocancel
 | 
			
		||||
// Accept_nocancel
 | 
			
		||||
// Fcntl_nocancel
 | 
			
		||||
// Select_nocancel
 | 
			
		||||
// Fsync_nocancel
 | 
			
		||||
// Connect_nocancel
 | 
			
		||||
// Sigsuspend_nocancel
 | 
			
		||||
// Readv_nocancel
 | 
			
		||||
// Writev_nocancel
 | 
			
		||||
// Sendto_nocancel
 | 
			
		||||
// Pread_nocancel
 | 
			
		||||
// Pwrite_nocancel
 | 
			
		||||
// Waitid_nocancel
 | 
			
		||||
// Poll_nocancel
 | 
			
		||||
// Msgsnd_nocancel
 | 
			
		||||
// Msgrcv_nocancel
 | 
			
		||||
// Sem_wait_nocancel
 | 
			
		||||
// Aio_suspend_nocancel
 | 
			
		||||
// __sigwait_nocancel
 | 
			
		||||
// __semwait_signal_nocancel
 | 
			
		||||
// __mac_mount
 | 
			
		||||
// __mac_get_mount
 | 
			
		||||
// __mac_getfsstat
 | 
			
		||||
							
								
								
									
										67
									
								
								vendor/golang.org/x/sys/unix/syscall_freebsd_386.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								vendor/golang.org/x/sys/unix/syscall_freebsd_386.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
			
		||||
// Copyright 2009 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build 386 && freebsd
 | 
			
		||||
// +build 386,freebsd
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"syscall"
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func setTimespec(sec, nsec int64) Timespec {
 | 
			
		||||
	return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setTimeval(sec, usec int64) Timeval {
 | 
			
		||||
	return Timeval{Sec: int32(sec), Usec: int32(usec)}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SetKevent(k *Kevent_t, fd, mode, flags int) {
 | 
			
		||||
	k.Ident = uint32(fd)
 | 
			
		||||
	k.Filter = int16(mode)
 | 
			
		||||
	k.Flags = uint16(flags)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (iov *Iovec) SetLen(length int) {
 | 
			
		||||
	iov.Len = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetControllen(length int) {
 | 
			
		||||
	msghdr.Controllen = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetIovlen(length int) {
 | 
			
		||||
	msghdr.Iovlen = int32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (cmsg *Cmsghdr) SetLen(length int) {
 | 
			
		||||
	cmsg.Len = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
 | 
			
		||||
	var writtenOut uint64 = 0
 | 
			
		||||
	_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0)
 | 
			
		||||
 | 
			
		||||
	written = int(writtenOut)
 | 
			
		||||
 | 
			
		||||
	if e1 != 0 {
 | 
			
		||||
		err = e1
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
 | 
			
		||||
 | 
			
		||||
func PtraceGetFsBase(pid int, fsbase *int64) (err error) {
 | 
			
		||||
	return ptrace(PTRACE_GETFSBASE, pid, uintptr(unsafe.Pointer(fsbase)), 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
 | 
			
		||||
	ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint32(countin)}
 | 
			
		||||
	err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
 | 
			
		||||
	return int(ioDesc.Len), err
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										67
									
								
								vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
			
		||||
// Copyright 2009 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build amd64 && freebsd
 | 
			
		||||
// +build amd64,freebsd
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"syscall"
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func setTimespec(sec, nsec int64) Timespec {
 | 
			
		||||
	return Timespec{Sec: sec, Nsec: nsec}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setTimeval(sec, usec int64) Timeval {
 | 
			
		||||
	return Timeval{Sec: sec, Usec: usec}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SetKevent(k *Kevent_t, fd, mode, flags int) {
 | 
			
		||||
	k.Ident = uint64(fd)
 | 
			
		||||
	k.Filter = int16(mode)
 | 
			
		||||
	k.Flags = uint16(flags)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (iov *Iovec) SetLen(length int) {
 | 
			
		||||
	iov.Len = uint64(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetControllen(length int) {
 | 
			
		||||
	msghdr.Controllen = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetIovlen(length int) {
 | 
			
		||||
	msghdr.Iovlen = int32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (cmsg *Cmsghdr) SetLen(length int) {
 | 
			
		||||
	cmsg.Len = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
 | 
			
		||||
	var writtenOut uint64 = 0
 | 
			
		||||
	_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0)
 | 
			
		||||
 | 
			
		||||
	written = int(writtenOut)
 | 
			
		||||
 | 
			
		||||
	if e1 != 0 {
 | 
			
		||||
		err = e1
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
 | 
			
		||||
 | 
			
		||||
func PtraceGetFsBase(pid int, fsbase *int64) (err error) {
 | 
			
		||||
	return ptrace(PTRACE_GETFSBASE, pid, uintptr(unsafe.Pointer(fsbase)), 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
 | 
			
		||||
	ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint64(countin)}
 | 
			
		||||
	err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
 | 
			
		||||
	return int(ioDesc.Len), err
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										63
									
								
								vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
			
		||||
// Copyright 2012 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build arm && freebsd
 | 
			
		||||
// +build arm,freebsd
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"syscall"
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func setTimespec(sec, nsec int64) Timespec {
 | 
			
		||||
	return Timespec{Sec: sec, Nsec: int32(nsec)}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setTimeval(sec, usec int64) Timeval {
 | 
			
		||||
	return Timeval{Sec: sec, Usec: int32(usec)}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SetKevent(k *Kevent_t, fd, mode, flags int) {
 | 
			
		||||
	k.Ident = uint32(fd)
 | 
			
		||||
	k.Filter = int16(mode)
 | 
			
		||||
	k.Flags = uint16(flags)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (iov *Iovec) SetLen(length int) {
 | 
			
		||||
	iov.Len = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetControllen(length int) {
 | 
			
		||||
	msghdr.Controllen = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetIovlen(length int) {
 | 
			
		||||
	msghdr.Iovlen = int32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (cmsg *Cmsghdr) SetLen(length int) {
 | 
			
		||||
	cmsg.Len = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
 | 
			
		||||
	var writtenOut uint64 = 0
 | 
			
		||||
	_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0)
 | 
			
		||||
 | 
			
		||||
	written = int(writtenOut)
 | 
			
		||||
 | 
			
		||||
	if e1 != 0 {
 | 
			
		||||
		err = e1
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
 | 
			
		||||
 | 
			
		||||
func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
 | 
			
		||||
	ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint32(countin)}
 | 
			
		||||
	err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
 | 
			
		||||
	return int(ioDesc.Len), err
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										63
									
								
								vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
			
		||||
// Copyright 2018 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build arm64 && freebsd
 | 
			
		||||
// +build arm64,freebsd
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"syscall"
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func setTimespec(sec, nsec int64) Timespec {
 | 
			
		||||
	return Timespec{Sec: sec, Nsec: nsec}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setTimeval(sec, usec int64) Timeval {
 | 
			
		||||
	return Timeval{Sec: sec, Usec: usec}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SetKevent(k *Kevent_t, fd, mode, flags int) {
 | 
			
		||||
	k.Ident = uint64(fd)
 | 
			
		||||
	k.Filter = int16(mode)
 | 
			
		||||
	k.Flags = uint16(flags)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (iov *Iovec) SetLen(length int) {
 | 
			
		||||
	iov.Len = uint64(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetControllen(length int) {
 | 
			
		||||
	msghdr.Controllen = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetIovlen(length int) {
 | 
			
		||||
	msghdr.Iovlen = int32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (cmsg *Cmsghdr) SetLen(length int) {
 | 
			
		||||
	cmsg.Len = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
 | 
			
		||||
	var writtenOut uint64 = 0
 | 
			
		||||
	_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0)
 | 
			
		||||
 | 
			
		||||
	written = int(writtenOut)
 | 
			
		||||
 | 
			
		||||
	if e1 != 0 {
 | 
			
		||||
		err = e1
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
 | 
			
		||||
 | 
			
		||||
func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
 | 
			
		||||
	ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint64(countin)}
 | 
			
		||||
	err = ptrace(PTRACE_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
 | 
			
		||||
	return int(ioDesc.Len), err
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										178
									
								
								vendor/golang.org/x/sys/unix/syscall_illumos.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										178
									
								
								vendor/golang.org/x/sys/unix/syscall_illumos.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,178 @@
 | 
			
		||||
// Copyright 2021 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
// illumos system calls not present on Solaris.
 | 
			
		||||
 | 
			
		||||
//go:build amd64 && illumos
 | 
			
		||||
// +build amd64,illumos
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"runtime"
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func bytes2iovec(bs [][]byte) []Iovec {
 | 
			
		||||
	iovecs := make([]Iovec, len(bs))
 | 
			
		||||
	for i, b := range bs {
 | 
			
		||||
		iovecs[i].SetLen(len(b))
 | 
			
		||||
		if len(b) > 0 {
 | 
			
		||||
			// somehow Iovec.Base on illumos is (*int8), not (*byte)
 | 
			
		||||
			iovecs[i].Base = (*int8)(unsafe.Pointer(&b[0]))
 | 
			
		||||
		} else {
 | 
			
		||||
			iovecs[i].Base = (*int8)(unsafe.Pointer(&_zero))
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return iovecs
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	readv(fd int, iovs []Iovec) (n int, err error)
 | 
			
		||||
 | 
			
		||||
func Readv(fd int, iovs [][]byte) (n int, err error) {
 | 
			
		||||
	iovecs := bytes2iovec(iovs)
 | 
			
		||||
	n, err = readv(fd, iovecs)
 | 
			
		||||
	return n, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	preadv(fd int, iovs []Iovec, off int64) (n int, err error)
 | 
			
		||||
 | 
			
		||||
func Preadv(fd int, iovs [][]byte, off int64) (n int, err error) {
 | 
			
		||||
	iovecs := bytes2iovec(iovs)
 | 
			
		||||
	n, err = preadv(fd, iovecs, off)
 | 
			
		||||
	return n, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	writev(fd int, iovs []Iovec) (n int, err error)
 | 
			
		||||
 | 
			
		||||
func Writev(fd int, iovs [][]byte) (n int, err error) {
 | 
			
		||||
	iovecs := bytes2iovec(iovs)
 | 
			
		||||
	n, err = writev(fd, iovecs)
 | 
			
		||||
	return n, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	pwritev(fd int, iovs []Iovec, off int64) (n int, err error)
 | 
			
		||||
 | 
			
		||||
func Pwritev(fd int, iovs [][]byte, off int64) (n int, err error) {
 | 
			
		||||
	iovecs := bytes2iovec(iovs)
 | 
			
		||||
	n, err = pwritev(fd, iovecs, off)
 | 
			
		||||
	return n, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) = libsocket.accept4
 | 
			
		||||
 | 
			
		||||
func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) {
 | 
			
		||||
	var rsa RawSockaddrAny
 | 
			
		||||
	var len _Socklen = SizeofSockaddrAny
 | 
			
		||||
	nfd, err = accept4(fd, &rsa, &len, flags)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if len > SizeofSockaddrAny {
 | 
			
		||||
		panic("RawSockaddrAny too small")
 | 
			
		||||
	}
 | 
			
		||||
	sa, err = anyToSockaddr(fd, &rsa)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		Close(nfd)
 | 
			
		||||
		nfd = 0
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	putmsg(fd int, clptr *strbuf, dataptr *strbuf, flags int) (err error)
 | 
			
		||||
 | 
			
		||||
func Putmsg(fd int, cl []byte, data []byte, flags int) (err error) {
 | 
			
		||||
	var clp, datap *strbuf
 | 
			
		||||
	if len(cl) > 0 {
 | 
			
		||||
		clp = &strbuf{
 | 
			
		||||
			Len: int32(len(cl)),
 | 
			
		||||
			Buf: (*int8)(unsafe.Pointer(&cl[0])),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if len(data) > 0 {
 | 
			
		||||
		datap = &strbuf{
 | 
			
		||||
			Len: int32(len(data)),
 | 
			
		||||
			Buf: (*int8)(unsafe.Pointer(&data[0])),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return putmsg(fd, clp, datap, flags)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	getmsg(fd int, clptr *strbuf, dataptr *strbuf, flags *int) (err error)
 | 
			
		||||
 | 
			
		||||
func Getmsg(fd int, cl []byte, data []byte) (retCl []byte, retData []byte, flags int, err error) {
 | 
			
		||||
	var clp, datap *strbuf
 | 
			
		||||
	if len(cl) > 0 {
 | 
			
		||||
		clp = &strbuf{
 | 
			
		||||
			Maxlen: int32(len(cl)),
 | 
			
		||||
			Buf:    (*int8)(unsafe.Pointer(&cl[0])),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if len(data) > 0 {
 | 
			
		||||
		datap = &strbuf{
 | 
			
		||||
			Maxlen: int32(len(data)),
 | 
			
		||||
			Buf:    (*int8)(unsafe.Pointer(&data[0])),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err = getmsg(fd, clp, datap, &flags); err != nil {
 | 
			
		||||
		return nil, nil, 0, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if len(cl) > 0 {
 | 
			
		||||
		retCl = cl[:clp.Len]
 | 
			
		||||
	}
 | 
			
		||||
	if len(data) > 0 {
 | 
			
		||||
		retData = data[:datap.Len]
 | 
			
		||||
	}
 | 
			
		||||
	return retCl, retData, flags, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func IoctlSetIntRetInt(fd int, req uint, arg int) (int, error) {
 | 
			
		||||
	return ioctlRet(fd, req, uintptr(arg))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func IoctlSetString(fd int, req uint, val string) error {
 | 
			
		||||
	bs := make([]byte, len(val)+1)
 | 
			
		||||
	copy(bs[:len(bs)-1], val)
 | 
			
		||||
	err := ioctl(fd, req, uintptr(unsafe.Pointer(&bs[0])))
 | 
			
		||||
	runtime.KeepAlive(&bs[0])
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Lifreq Helpers
 | 
			
		||||
 | 
			
		||||
func (l *Lifreq) SetName(name string) error {
 | 
			
		||||
	if len(name) >= len(l.Name) {
 | 
			
		||||
		return fmt.Errorf("name cannot be more than %d characters", len(l.Name)-1)
 | 
			
		||||
	}
 | 
			
		||||
	for i := range name {
 | 
			
		||||
		l.Name[i] = int8(name[i])
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l *Lifreq) SetLifruInt(d int) {
 | 
			
		||||
	*(*int)(unsafe.Pointer(&l.Lifru[0])) = d
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l *Lifreq) GetLifruInt() int {
 | 
			
		||||
	return *(*int)(unsafe.Pointer(&l.Lifru[0]))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func IoctlLifreq(fd int, req uint, l *Lifreq) error {
 | 
			
		||||
	return ioctl(fd, req, uintptr(unsafe.Pointer(l)))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Strioctl Helpers
 | 
			
		||||
 | 
			
		||||
func (s *Strioctl) SetInt(i int) {
 | 
			
		||||
	s.Len = int32(unsafe.Sizeof(i))
 | 
			
		||||
	s.Dp = (*int8)(unsafe.Pointer(&i))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func IoctlSetStrioctlRetInt(fd int, req uint, s *Strioctl) (int, error) {
 | 
			
		||||
	return ioctlRet(fd, req, uintptr(unsafe.Pointer(s)))
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										2329
									
								
								vendor/golang.org/x/sys/unix/syscall_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2329
									
								
								vendor/golang.org/x/sys/unix/syscall_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										388
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_386.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										388
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_386.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,388 @@
 | 
			
		||||
// Copyright 2009 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build 386 && linux
 | 
			
		||||
// +build 386,linux
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func setTimespec(sec, nsec int64) Timespec {
 | 
			
		||||
	return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setTimeval(sec, usec int64) Timeval {
 | 
			
		||||
	return Timeval{Sec: int32(sec), Usec: int32(usec)}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sysnb	pipe(p *[2]_C_int) (err error)
 | 
			
		||||
 | 
			
		||||
func Pipe(p []int) (err error) {
 | 
			
		||||
	if len(p) != 2 {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	var pp [2]_C_int
 | 
			
		||||
	err = pipe(&pp)
 | 
			
		||||
	p[0] = int(pp[0])
 | 
			
		||||
	p[1] = int(pp[1])
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sysnb	pipe2(p *[2]_C_int, flags int) (err error)
 | 
			
		||||
 | 
			
		||||
func Pipe2(p []int, flags int) (err error) {
 | 
			
		||||
	if len(p) != 2 {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	var pp [2]_C_int
 | 
			
		||||
	err = pipe2(&pp, flags)
 | 
			
		||||
	p[0] = int(pp[0])
 | 
			
		||||
	p[1] = int(pp[1])
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 64-bit file system and 32-bit uid calls
 | 
			
		||||
// (386 default is 32-bit file system and 16-bit uid).
 | 
			
		||||
//sys	dup2(oldfd int, newfd int) (err error)
 | 
			
		||||
//sysnb	EpollCreate(size int) (fd int, err error)
 | 
			
		||||
//sys	EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
 | 
			
		||||
//sys	Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64_64
 | 
			
		||||
//sys	Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32
 | 
			
		||||
//sys	Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
 | 
			
		||||
//sys	Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
 | 
			
		||||
//sys	Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64
 | 
			
		||||
//sysnb	Getegid() (egid int) = SYS_GETEGID32
 | 
			
		||||
//sysnb	Geteuid() (euid int) = SYS_GETEUID32
 | 
			
		||||
//sysnb	Getgid() (gid int) = SYS_GETGID32
 | 
			
		||||
//sysnb	Getuid() (uid int) = SYS_GETUID32
 | 
			
		||||
//sysnb	InotifyInit() (fd int, err error)
 | 
			
		||||
//sys	Ioperm(from int, num int, on int) (err error)
 | 
			
		||||
//sys	Iopl(level int) (err error)
 | 
			
		||||
//sys	Lchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32
 | 
			
		||||
//sys	Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
 | 
			
		||||
//sys	Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
 | 
			
		||||
//sys	Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
 | 
			
		||||
//sys	Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
 | 
			
		||||
//sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
 | 
			
		||||
//sys	setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32
 | 
			
		||||
//sys	setfsuid(uid int) (prev int, err error) = SYS_SETFSUID32
 | 
			
		||||
//sysnb	Setregid(rgid int, egid int) (err error) = SYS_SETREGID32
 | 
			
		||||
//sysnb	Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32
 | 
			
		||||
//sysnb	Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32
 | 
			
		||||
//sysnb	Setreuid(ruid int, euid int) (err error) = SYS_SETREUID32
 | 
			
		||||
//sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
 | 
			
		||||
//sys	Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
 | 
			
		||||
//sys	SyncFileRange(fd int, off int64, n int64, flags int) (err error)
 | 
			
		||||
//sys	Truncate(path string, length int64) (err error) = SYS_TRUNCATE64
 | 
			
		||||
//sys	Ustat(dev int, ubuf *Ustat_t) (err error)
 | 
			
		||||
//sysnb	getgroups(n int, list *_Gid_t) (nn int, err error) = SYS_GETGROUPS32
 | 
			
		||||
//sysnb	setgroups(n int, list *_Gid_t) (err error) = SYS_SETGROUPS32
 | 
			
		||||
//sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
 | 
			
		||||
 | 
			
		||||
//sys	mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error)
 | 
			
		||||
//sys	Pause() (err error)
 | 
			
		||||
 | 
			
		||||
func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
 | 
			
		||||
	page := uintptr(offset / 4096)
 | 
			
		||||
	if offset != int64(page)*4096 {
 | 
			
		||||
		return 0, EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	return mmap2(addr, length, prot, flags, fd, page)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type rlimit32 struct {
 | 
			
		||||
	Cur uint32
 | 
			
		||||
	Max uint32
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sysnb	getrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT
 | 
			
		||||
 | 
			
		||||
const rlimInf32 = ^uint32(0)
 | 
			
		||||
const rlimInf64 = ^uint64(0)
 | 
			
		||||
 | 
			
		||||
func Getrlimit(resource int, rlim *Rlimit) (err error) {
 | 
			
		||||
	err = prlimit(0, resource, nil, rlim)
 | 
			
		||||
	if err != ENOSYS {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	rl := rlimit32{}
 | 
			
		||||
	err = getrlimit(resource, &rl)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if rl.Cur == rlimInf32 {
 | 
			
		||||
		rlim.Cur = rlimInf64
 | 
			
		||||
	} else {
 | 
			
		||||
		rlim.Cur = uint64(rl.Cur)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if rl.Max == rlimInf32 {
 | 
			
		||||
		rlim.Max = rlimInf64
 | 
			
		||||
	} else {
 | 
			
		||||
		rlim.Max = uint64(rl.Max)
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sysnb	setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
 | 
			
		||||
 | 
			
		||||
func Setrlimit(resource int, rlim *Rlimit) (err error) {
 | 
			
		||||
	err = prlimit(0, resource, rlim, nil)
 | 
			
		||||
	if err != ENOSYS {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	rl := rlimit32{}
 | 
			
		||||
	if rlim.Cur == rlimInf64 {
 | 
			
		||||
		rl.Cur = rlimInf32
 | 
			
		||||
	} else if rlim.Cur < uint64(rlimInf32) {
 | 
			
		||||
		rl.Cur = uint32(rlim.Cur)
 | 
			
		||||
	} else {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	if rlim.Max == rlimInf64 {
 | 
			
		||||
		rl.Max = rlimInf32
 | 
			
		||||
	} else if rlim.Max < uint64(rlimInf32) {
 | 
			
		||||
		rl.Max = uint32(rlim.Max)
 | 
			
		||||
	} else {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return setrlimit(resource, &rl)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
 | 
			
		||||
	newoffset, errno := seek(fd, offset, whence)
 | 
			
		||||
	if errno != 0 {
 | 
			
		||||
		return 0, errno
 | 
			
		||||
	}
 | 
			
		||||
	return newoffset, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	futimesat(dirfd int, path string, times *[2]Timeval) (err error)
 | 
			
		||||
//sysnb	Gettimeofday(tv *Timeval) (err error)
 | 
			
		||||
//sysnb	Time(t *Time_t) (tt Time_t, err error)
 | 
			
		||||
//sys	Utime(path string, buf *Utimbuf) (err error)
 | 
			
		||||
//sys	utimes(path string, times *[2]Timeval) (err error)
 | 
			
		||||
 | 
			
		||||
// On x86 Linux, all the socket calls go through an extra indirection,
 | 
			
		||||
// I think because the 5-register system call interface can't handle
 | 
			
		||||
// the 6-argument calls like sendto and recvfrom. Instead the
 | 
			
		||||
// arguments to the underlying system call are the number below
 | 
			
		||||
// and a pointer to an array of uintptr. We hide the pointer in the
 | 
			
		||||
// socketcall assembly to avoid allocation on every system call.
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	// see linux/net.h
 | 
			
		||||
	_SOCKET      = 1
 | 
			
		||||
	_BIND        = 2
 | 
			
		||||
	_CONNECT     = 3
 | 
			
		||||
	_LISTEN      = 4
 | 
			
		||||
	_ACCEPT      = 5
 | 
			
		||||
	_GETSOCKNAME = 6
 | 
			
		||||
	_GETPEERNAME = 7
 | 
			
		||||
	_SOCKETPAIR  = 8
 | 
			
		||||
	_SEND        = 9
 | 
			
		||||
	_RECV        = 10
 | 
			
		||||
	_SENDTO      = 11
 | 
			
		||||
	_RECVFROM    = 12
 | 
			
		||||
	_SHUTDOWN    = 13
 | 
			
		||||
	_SETSOCKOPT  = 14
 | 
			
		||||
	_GETSOCKOPT  = 15
 | 
			
		||||
	_SENDMSG     = 16
 | 
			
		||||
	_RECVMSG     = 17
 | 
			
		||||
	_ACCEPT4     = 18
 | 
			
		||||
	_RECVMMSG    = 19
 | 
			
		||||
	_SENDMMSG    = 20
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
 | 
			
		||||
	fd, e := socketcall(_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		err = e
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
 | 
			
		||||
	fd, e := socketcall(_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		err = e
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func getsockname(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
 | 
			
		||||
	_, e := rawsocketcall(_GETSOCKNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		err = e
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func getpeername(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
 | 
			
		||||
	_, e := rawsocketcall(_GETPEERNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		err = e
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) {
 | 
			
		||||
	_, e := rawsocketcall(_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd)), 0, 0)
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		err = e
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
 | 
			
		||||
	_, e := socketcall(_BIND, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		err = e
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
 | 
			
		||||
	_, e := socketcall(_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		err = e
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func socket(domain int, typ int, proto int) (fd int, err error) {
 | 
			
		||||
	fd, e := rawsocketcall(_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0)
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		err = e
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
 | 
			
		||||
	_, e := socketcall(_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		err = e
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
 | 
			
		||||
	_, e := socketcall(_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), vallen, 0)
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		err = e
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func recvfrom(s int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
 | 
			
		||||
	var base uintptr
 | 
			
		||||
	if len(p) > 0 {
 | 
			
		||||
		base = uintptr(unsafe.Pointer(&p[0]))
 | 
			
		||||
	}
 | 
			
		||||
	n, e := socketcall(_RECVFROM, uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		err = e
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func sendto(s int, p []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
 | 
			
		||||
	var base uintptr
 | 
			
		||||
	if len(p) > 0 {
 | 
			
		||||
		base = uintptr(unsafe.Pointer(&p[0]))
 | 
			
		||||
	}
 | 
			
		||||
	_, e := socketcall(_SENDTO, uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(to), uintptr(addrlen))
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		err = e
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
 | 
			
		||||
	n, e := socketcall(_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		err = e
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
 | 
			
		||||
	n, e := socketcall(_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		err = e
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Listen(s int, n int) (err error) {
 | 
			
		||||
	_, e := socketcall(_LISTEN, uintptr(s), uintptr(n), 0, 0, 0, 0)
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		err = e
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Shutdown(s, how int) (err error) {
 | 
			
		||||
	_, e := socketcall(_SHUTDOWN, uintptr(s), uintptr(how), 0, 0, 0, 0)
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		err = e
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Fstatfs(fd int, buf *Statfs_t) (err error) {
 | 
			
		||||
	_, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		err = e
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Statfs(path string, buf *Statfs_t) (err error) {
 | 
			
		||||
	pathp, err := BytePtrFromString(path)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	_, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		err = e
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r *PtraceRegs) PC() uint64 { return uint64(uint32(r.Eip)) }
 | 
			
		||||
 | 
			
		||||
func (r *PtraceRegs) SetPC(pc uint64) { r.Eip = int32(pc) }
 | 
			
		||||
 | 
			
		||||
func (iov *Iovec) SetLen(length int) {
 | 
			
		||||
	iov.Len = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetControllen(length int) {
 | 
			
		||||
	msghdr.Controllen = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetIovlen(length int) {
 | 
			
		||||
	msghdr.Iovlen = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (cmsg *Cmsghdr) SetLen(length int) {
 | 
			
		||||
	cmsg.Len = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	poll(fds *PollFd, nfds int, timeout int) (n int, err error)
 | 
			
		||||
 | 
			
		||||
func Poll(fds []PollFd, timeout int) (n int, err error) {
 | 
			
		||||
	if len(fds) == 0 {
 | 
			
		||||
		return poll(nil, 0, timeout)
 | 
			
		||||
	}
 | 
			
		||||
	return poll(&fds[0], len(fds), timeout)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										195
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										195
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,195 @@
 | 
			
		||||
// Copyright 2009 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build amd64 && linux
 | 
			
		||||
// +build amd64,linux
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
//sys	dup2(oldfd int, newfd int) (err error)
 | 
			
		||||
//sysnb	EpollCreate(size int) (fd int, err error)
 | 
			
		||||
//sys	EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
 | 
			
		||||
//sys	Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
 | 
			
		||||
//sys	Fchown(fd int, uid int, gid int) (err error)
 | 
			
		||||
//sys	Fstat(fd int, stat *Stat_t) (err error)
 | 
			
		||||
//sys	Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT
 | 
			
		||||
//sys	Fstatfs(fd int, buf *Statfs_t) (err error)
 | 
			
		||||
//sys	Ftruncate(fd int, length int64) (err error)
 | 
			
		||||
//sysnb	Getegid() (egid int)
 | 
			
		||||
//sysnb	Geteuid() (euid int)
 | 
			
		||||
//sysnb	Getgid() (gid int)
 | 
			
		||||
//sysnb	Getrlimit(resource int, rlim *Rlimit) (err error)
 | 
			
		||||
//sysnb	Getuid() (uid int)
 | 
			
		||||
//sysnb	inotifyInit() (fd int, err error)
 | 
			
		||||
 | 
			
		||||
func InotifyInit() (fd int, err error) {
 | 
			
		||||
	// First try inotify_init1, because Android's seccomp policy blocks the latter.
 | 
			
		||||
	fd, err = InotifyInit1(0)
 | 
			
		||||
	if err == ENOSYS {
 | 
			
		||||
		fd, err = inotifyInit()
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	Ioperm(from int, num int, on int) (err error)
 | 
			
		||||
//sys	Iopl(level int) (err error)
 | 
			
		||||
//sys	Lchown(path string, uid int, gid int) (err error)
 | 
			
		||||
//sys	Listen(s int, n int) (err error)
 | 
			
		||||
 | 
			
		||||
func Lstat(path string, stat *Stat_t) (err error) {
 | 
			
		||||
	return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	Pause() (err error)
 | 
			
		||||
//sys	Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
 | 
			
		||||
//sys	Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
 | 
			
		||||
//sys	Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
 | 
			
		||||
//sys	Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
 | 
			
		||||
 | 
			
		||||
func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
 | 
			
		||||
	var ts *Timespec
 | 
			
		||||
	if timeout != nil {
 | 
			
		||||
		ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}
 | 
			
		||||
	}
 | 
			
		||||
	return Pselect(nfd, r, w, e, ts, nil)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
 | 
			
		||||
//sys	setfsgid(gid int) (prev int, err error)
 | 
			
		||||
//sys	setfsuid(uid int) (prev int, err error)
 | 
			
		||||
//sysnb	Setregid(rgid int, egid int) (err error)
 | 
			
		||||
//sysnb	Setresgid(rgid int, egid int, sgid int) (err error)
 | 
			
		||||
//sysnb	Setresuid(ruid int, euid int, suid int) (err error)
 | 
			
		||||
//sysnb	Setrlimit(resource int, rlim *Rlimit) (err error)
 | 
			
		||||
//sysnb	Setreuid(ruid int, euid int) (err error)
 | 
			
		||||
//sys	Shutdown(fd int, how int) (err error)
 | 
			
		||||
//sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
 | 
			
		||||
 | 
			
		||||
func Stat(path string, stat *Stat_t) (err error) {
 | 
			
		||||
	// Use fstatat, because Android's seccomp policy blocks stat.
 | 
			
		||||
	return Fstatat(AT_FDCWD, path, stat, 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	Statfs(path string, buf *Statfs_t) (err error)
 | 
			
		||||
//sys	SyncFileRange(fd int, off int64, n int64, flags int) (err error)
 | 
			
		||||
//sys	Truncate(path string, length int64) (err error)
 | 
			
		||||
//sys	Ustat(dev int, ubuf *Ustat_t) (err error)
 | 
			
		||||
//sys	accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
 | 
			
		||||
//sys	accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
 | 
			
		||||
//sys	bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
 | 
			
		||||
//sys	connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
 | 
			
		||||
//sysnb	getgroups(n int, list *_Gid_t) (nn int, err error)
 | 
			
		||||
//sysnb	setgroups(n int, list *_Gid_t) (err error)
 | 
			
		||||
//sys	getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
 | 
			
		||||
//sys	setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
 | 
			
		||||
//sysnb	socket(domain int, typ int, proto int) (fd int, err error)
 | 
			
		||||
//sysnb	socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
 | 
			
		||||
//sysnb	getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
 | 
			
		||||
//sysnb	getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
 | 
			
		||||
//sys	recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
 | 
			
		||||
//sys	sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
 | 
			
		||||
//sys	recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
 | 
			
		||||
//sys	sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
 | 
			
		||||
//sys	mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)
 | 
			
		||||
 | 
			
		||||
//sys	futimesat(dirfd int, path string, times *[2]Timeval) (err error)
 | 
			
		||||
 | 
			
		||||
func Gettimeofday(tv *Timeval) (err error) {
 | 
			
		||||
	errno := gettimeofday(tv)
 | 
			
		||||
	if errno != 0 {
 | 
			
		||||
		return errno
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Time(t *Time_t) (tt Time_t, err error) {
 | 
			
		||||
	var tv Timeval
 | 
			
		||||
	errno := gettimeofday(&tv)
 | 
			
		||||
	if errno != 0 {
 | 
			
		||||
		return 0, errno
 | 
			
		||||
	}
 | 
			
		||||
	if t != nil {
 | 
			
		||||
		*t = Time_t(tv.Sec)
 | 
			
		||||
	}
 | 
			
		||||
	return Time_t(tv.Sec), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	Utime(path string, buf *Utimbuf) (err error)
 | 
			
		||||
//sys	utimes(path string, times *[2]Timeval) (err error)
 | 
			
		||||
 | 
			
		||||
func setTimespec(sec, nsec int64) Timespec {
 | 
			
		||||
	return Timespec{Sec: sec, Nsec: nsec}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setTimeval(sec, usec int64) Timeval {
 | 
			
		||||
	return Timeval{Sec: sec, Usec: usec}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sysnb	pipe(p *[2]_C_int) (err error)
 | 
			
		||||
 | 
			
		||||
func Pipe(p []int) (err error) {
 | 
			
		||||
	if len(p) != 2 {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	var pp [2]_C_int
 | 
			
		||||
	err = pipe(&pp)
 | 
			
		||||
	p[0] = int(pp[0])
 | 
			
		||||
	p[1] = int(pp[1])
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sysnb	pipe2(p *[2]_C_int, flags int) (err error)
 | 
			
		||||
 | 
			
		||||
func Pipe2(p []int, flags int) (err error) {
 | 
			
		||||
	if len(p) != 2 {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	var pp [2]_C_int
 | 
			
		||||
	err = pipe2(&pp, flags)
 | 
			
		||||
	p[0] = int(pp[0])
 | 
			
		||||
	p[1] = int(pp[1])
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r *PtraceRegs) PC() uint64 { return r.Rip }
 | 
			
		||||
 | 
			
		||||
func (r *PtraceRegs) SetPC(pc uint64) { r.Rip = pc }
 | 
			
		||||
 | 
			
		||||
func (iov *Iovec) SetLen(length int) {
 | 
			
		||||
	iov.Len = uint64(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetControllen(length int) {
 | 
			
		||||
	msghdr.Controllen = uint64(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetIovlen(length int) {
 | 
			
		||||
	msghdr.Iovlen = uint64(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (cmsg *Cmsghdr) SetLen(length int) {
 | 
			
		||||
	cmsg.Len = uint64(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	poll(fds *PollFd, nfds int, timeout int) (n int, err error)
 | 
			
		||||
 | 
			
		||||
func Poll(fds []PollFd, timeout int) (n int, err error) {
 | 
			
		||||
	if len(fds) == 0 {
 | 
			
		||||
		return poll(nil, 0, timeout)
 | 
			
		||||
	}
 | 
			
		||||
	return poll(&fds[0], len(fds), timeout)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)
 | 
			
		||||
 | 
			
		||||
func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
 | 
			
		||||
	cmdlineLen := len(cmdline)
 | 
			
		||||
	if cmdlineLen > 0 {
 | 
			
		||||
		// Account for the additional NULL byte added by
 | 
			
		||||
		// BytePtrFromString in kexecFileLoad. The kexec_file_load
 | 
			
		||||
		// syscall expects a NULL-terminated string.
 | 
			
		||||
		cmdlineLen++
 | 
			
		||||
	}
 | 
			
		||||
	return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										13
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
// Copyright 2016 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build amd64 && linux && gc
 | 
			
		||||
// +build amd64,linux,gc
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import "syscall"
 | 
			
		||||
 | 
			
		||||
//go:noescape
 | 
			
		||||
func gettimeofday(tv *Timeval) (err syscall.Errno)
 | 
			
		||||
							
								
								
									
										287
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_arm.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										287
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_arm.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,287 @@
 | 
			
		||||
// Copyright 2009 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build arm && linux
 | 
			
		||||
// +build arm,linux
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func setTimespec(sec, nsec int64) Timespec {
 | 
			
		||||
	return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setTimeval(sec, usec int64) Timeval {
 | 
			
		||||
	return Timeval{Sec: int32(sec), Usec: int32(usec)}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sysnb	pipe(p *[2]_C_int) (err error)
 | 
			
		||||
 | 
			
		||||
func Pipe(p []int) (err error) {
 | 
			
		||||
	if len(p) != 2 {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	var pp [2]_C_int
 | 
			
		||||
	// Try pipe2 first for Android O, then try pipe for kernel 2.6.23.
 | 
			
		||||
	err = pipe2(&pp, 0)
 | 
			
		||||
	if err == ENOSYS {
 | 
			
		||||
		err = pipe(&pp)
 | 
			
		||||
	}
 | 
			
		||||
	p[0] = int(pp[0])
 | 
			
		||||
	p[1] = int(pp[1])
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sysnb	pipe2(p *[2]_C_int, flags int) (err error)
 | 
			
		||||
 | 
			
		||||
func Pipe2(p []int, flags int) (err error) {
 | 
			
		||||
	if len(p) != 2 {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	var pp [2]_C_int
 | 
			
		||||
	err = pipe2(&pp, flags)
 | 
			
		||||
	p[0] = int(pp[0])
 | 
			
		||||
	p[1] = int(pp[1])
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
 | 
			
		||||
	newoffset, errno := seek(fd, offset, whence)
 | 
			
		||||
	if errno != 0 {
 | 
			
		||||
		return 0, errno
 | 
			
		||||
	}
 | 
			
		||||
	return newoffset, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
 | 
			
		||||
//sys	accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
 | 
			
		||||
//sys	bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
 | 
			
		||||
//sys	connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
 | 
			
		||||
//sysnb	getgroups(n int, list *_Gid_t) (nn int, err error) = SYS_GETGROUPS32
 | 
			
		||||
//sysnb	setgroups(n int, list *_Gid_t) (err error) = SYS_SETGROUPS32
 | 
			
		||||
//sys	getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
 | 
			
		||||
//sys	setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
 | 
			
		||||
//sysnb	socket(domain int, typ int, proto int) (fd int, err error)
 | 
			
		||||
//sysnb	getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
 | 
			
		||||
//sysnb	getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
 | 
			
		||||
//sys	recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
 | 
			
		||||
//sys	sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
 | 
			
		||||
//sysnb	socketpair(domain int, typ int, flags int, fd *[2]int32) (err error)
 | 
			
		||||
//sys	recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
 | 
			
		||||
//sys	sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
 | 
			
		||||
 | 
			
		||||
// 64-bit file system and 32-bit uid calls
 | 
			
		||||
// (16-bit uid calls are not always supported in newer kernels)
 | 
			
		||||
//sys	dup2(oldfd int, newfd int) (err error)
 | 
			
		||||
//sysnb	EpollCreate(size int) (fd int, err error)
 | 
			
		||||
//sys	EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
 | 
			
		||||
//sys	Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32
 | 
			
		||||
//sys	Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
 | 
			
		||||
//sys	Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
 | 
			
		||||
//sysnb	Getegid() (egid int) = SYS_GETEGID32
 | 
			
		||||
//sysnb	Geteuid() (euid int) = SYS_GETEUID32
 | 
			
		||||
//sysnb	Getgid() (gid int) = SYS_GETGID32
 | 
			
		||||
//sysnb	Getuid() (uid int) = SYS_GETUID32
 | 
			
		||||
//sysnb	InotifyInit() (fd int, err error)
 | 
			
		||||
//sys	Lchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32
 | 
			
		||||
//sys	Listen(s int, n int) (err error)
 | 
			
		||||
//sys	Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
 | 
			
		||||
//sys	Pause() (err error)
 | 
			
		||||
//sys	Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
 | 
			
		||||
//sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
 | 
			
		||||
//sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
 | 
			
		||||
//sys	setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32
 | 
			
		||||
//sys	setfsuid(uid int) (prev int, err error) = SYS_SETFSUID32
 | 
			
		||||
//sysnb	Setregid(rgid int, egid int) (err error) = SYS_SETREGID32
 | 
			
		||||
//sysnb	Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32
 | 
			
		||||
//sysnb	Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32
 | 
			
		||||
//sysnb	Setreuid(ruid int, euid int) (err error) = SYS_SETREUID32
 | 
			
		||||
//sys	Shutdown(fd int, how int) (err error)
 | 
			
		||||
//sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
 | 
			
		||||
//sys	Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
 | 
			
		||||
//sys	Ustat(dev int, ubuf *Ustat_t) (err error)
 | 
			
		||||
 | 
			
		||||
//sys	futimesat(dirfd int, path string, times *[2]Timeval) (err error)
 | 
			
		||||
//sysnb	Gettimeofday(tv *Timeval) (err error)
 | 
			
		||||
 | 
			
		||||
func Time(t *Time_t) (Time_t, error) {
 | 
			
		||||
	var tv Timeval
 | 
			
		||||
	err := Gettimeofday(&tv)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return 0, err
 | 
			
		||||
	}
 | 
			
		||||
	if t != nil {
 | 
			
		||||
		*t = Time_t(tv.Sec)
 | 
			
		||||
	}
 | 
			
		||||
	return Time_t(tv.Sec), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Utime(path string, buf *Utimbuf) error {
 | 
			
		||||
	tv := []Timeval{
 | 
			
		||||
		{Sec: buf.Actime},
 | 
			
		||||
		{Sec: buf.Modtime},
 | 
			
		||||
	}
 | 
			
		||||
	return Utimes(path, tv)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	utimes(path string, times *[2]Timeval) (err error)
 | 
			
		||||
 | 
			
		||||
//sys	Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
 | 
			
		||||
//sys	Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
 | 
			
		||||
//sys	Truncate(path string, length int64) (err error) = SYS_TRUNCATE64
 | 
			
		||||
//sys	Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64
 | 
			
		||||
 | 
			
		||||
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
 | 
			
		||||
	_, _, e1 := Syscall6(SYS_ARM_FADVISE64_64, uintptr(fd), uintptr(advice), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32))
 | 
			
		||||
	if e1 != 0 {
 | 
			
		||||
		err = errnoErr(e1)
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error)
 | 
			
		||||
 | 
			
		||||
func Fstatfs(fd int, buf *Statfs_t) (err error) {
 | 
			
		||||
	_, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		err = e
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Statfs(path string, buf *Statfs_t) (err error) {
 | 
			
		||||
	pathp, err := BytePtrFromString(path)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	_, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		err = e
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
 | 
			
		||||
	page := uintptr(offset / 4096)
 | 
			
		||||
	if offset != int64(page)*4096 {
 | 
			
		||||
		return 0, EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	return mmap2(addr, length, prot, flags, fd, page)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type rlimit32 struct {
 | 
			
		||||
	Cur uint32
 | 
			
		||||
	Max uint32
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sysnb	getrlimit(resource int, rlim *rlimit32) (err error) = SYS_UGETRLIMIT
 | 
			
		||||
 | 
			
		||||
const rlimInf32 = ^uint32(0)
 | 
			
		||||
const rlimInf64 = ^uint64(0)
 | 
			
		||||
 | 
			
		||||
func Getrlimit(resource int, rlim *Rlimit) (err error) {
 | 
			
		||||
	err = prlimit(0, resource, nil, rlim)
 | 
			
		||||
	if err != ENOSYS {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	rl := rlimit32{}
 | 
			
		||||
	err = getrlimit(resource, &rl)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if rl.Cur == rlimInf32 {
 | 
			
		||||
		rlim.Cur = rlimInf64
 | 
			
		||||
	} else {
 | 
			
		||||
		rlim.Cur = uint64(rl.Cur)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if rl.Max == rlimInf32 {
 | 
			
		||||
		rlim.Max = rlimInf64
 | 
			
		||||
	} else {
 | 
			
		||||
		rlim.Max = uint64(rl.Max)
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sysnb	setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
 | 
			
		||||
 | 
			
		||||
func Setrlimit(resource int, rlim *Rlimit) (err error) {
 | 
			
		||||
	err = prlimit(0, resource, rlim, nil)
 | 
			
		||||
	if err != ENOSYS {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	rl := rlimit32{}
 | 
			
		||||
	if rlim.Cur == rlimInf64 {
 | 
			
		||||
		rl.Cur = rlimInf32
 | 
			
		||||
	} else if rlim.Cur < uint64(rlimInf32) {
 | 
			
		||||
		rl.Cur = uint32(rlim.Cur)
 | 
			
		||||
	} else {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	if rlim.Max == rlimInf64 {
 | 
			
		||||
		rl.Max = rlimInf32
 | 
			
		||||
	} else if rlim.Max < uint64(rlimInf32) {
 | 
			
		||||
		rl.Max = uint32(rlim.Max)
 | 
			
		||||
	} else {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return setrlimit(resource, &rl)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r *PtraceRegs) PC() uint64 { return uint64(r.Uregs[15]) }
 | 
			
		||||
 | 
			
		||||
func (r *PtraceRegs) SetPC(pc uint64) { r.Uregs[15] = uint32(pc) }
 | 
			
		||||
 | 
			
		||||
func (iov *Iovec) SetLen(length int) {
 | 
			
		||||
	iov.Len = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetControllen(length int) {
 | 
			
		||||
	msghdr.Controllen = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetIovlen(length int) {
 | 
			
		||||
	msghdr.Iovlen = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (cmsg *Cmsghdr) SetLen(length int) {
 | 
			
		||||
	cmsg.Len = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	poll(fds *PollFd, nfds int, timeout int) (n int, err error)
 | 
			
		||||
 | 
			
		||||
func Poll(fds []PollFd, timeout int) (n int, err error) {
 | 
			
		||||
	if len(fds) == 0 {
 | 
			
		||||
		return poll(nil, 0, timeout)
 | 
			
		||||
	}
 | 
			
		||||
	return poll(&fds[0], len(fds), timeout)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	armSyncFileRange(fd int, flags int, off int64, n int64) (err error) = SYS_ARM_SYNC_FILE_RANGE
 | 
			
		||||
 | 
			
		||||
func SyncFileRange(fd int, off int64, n int64, flags int) error {
 | 
			
		||||
	// The sync_file_range and arm_sync_file_range syscalls differ only in the
 | 
			
		||||
	// order of their arguments.
 | 
			
		||||
	return armSyncFileRange(fd, flags, off, n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)
 | 
			
		||||
 | 
			
		||||
func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
 | 
			
		||||
	cmdlineLen := len(cmdline)
 | 
			
		||||
	if cmdlineLen > 0 {
 | 
			
		||||
		// Account for the additional NULL byte added by
 | 
			
		||||
		// BytePtrFromString in kexecFileLoad. The kexec_file_load
 | 
			
		||||
		// syscall expects a NULL-terminated string.
 | 
			
		||||
		cmdlineLen++
 | 
			
		||||
	}
 | 
			
		||||
	return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										246
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										246
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,246 @@
 | 
			
		||||
// Copyright 2015 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build arm64 && linux
 | 
			
		||||
// +build arm64,linux
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import "unsafe"
 | 
			
		||||
 | 
			
		||||
func EpollCreate(size int) (fd int, err error) {
 | 
			
		||||
	if size <= 0 {
 | 
			
		||||
		return -1, EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	return EpollCreate1(0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
 | 
			
		||||
//sys	Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
 | 
			
		||||
//sys	Fchown(fd int, uid int, gid int) (err error)
 | 
			
		||||
//sys	Fstat(fd int, stat *Stat_t) (err error)
 | 
			
		||||
//sys	Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
 | 
			
		||||
//sys	Fstatfs(fd int, buf *Statfs_t) (err error)
 | 
			
		||||
//sys	Ftruncate(fd int, length int64) (err error)
 | 
			
		||||
//sysnb	Getegid() (egid int)
 | 
			
		||||
//sysnb	Geteuid() (euid int)
 | 
			
		||||
//sysnb	Getgid() (gid int)
 | 
			
		||||
//sysnb	getrlimit(resource int, rlim *Rlimit) (err error)
 | 
			
		||||
//sysnb	Getuid() (uid int)
 | 
			
		||||
//sys	Listen(s int, n int) (err error)
 | 
			
		||||
//sys	Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
 | 
			
		||||
//sys	Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
 | 
			
		||||
//sys	Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
 | 
			
		||||
//sys	Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
 | 
			
		||||
 | 
			
		||||
func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
 | 
			
		||||
	var ts *Timespec
 | 
			
		||||
	if timeout != nil {
 | 
			
		||||
		ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}
 | 
			
		||||
	}
 | 
			
		||||
	return Pselect(nfd, r, w, e, ts, nil)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
 | 
			
		||||
//sys	setfsgid(gid int) (prev int, err error)
 | 
			
		||||
//sys	setfsuid(uid int) (prev int, err error)
 | 
			
		||||
//sysnb	Setregid(rgid int, egid int) (err error)
 | 
			
		||||
//sysnb	Setresgid(rgid int, egid int, sgid int) (err error)
 | 
			
		||||
//sysnb	Setresuid(ruid int, euid int, suid int) (err error)
 | 
			
		||||
//sysnb	setrlimit(resource int, rlim *Rlimit) (err error)
 | 
			
		||||
//sysnb	Setreuid(ruid int, euid int) (err error)
 | 
			
		||||
//sys	Shutdown(fd int, how int) (err error)
 | 
			
		||||
//sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
 | 
			
		||||
 | 
			
		||||
func Stat(path string, stat *Stat_t) (err error) {
 | 
			
		||||
	return Fstatat(AT_FDCWD, path, stat, 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Lchown(path string, uid int, gid int) (err error) {
 | 
			
		||||
	return Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Lstat(path string, stat *Stat_t) (err error) {
 | 
			
		||||
	return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	Statfs(path string, buf *Statfs_t) (err error)
 | 
			
		||||
//sys	SyncFileRange(fd int, off int64, n int64, flags int) (err error)
 | 
			
		||||
//sys	Truncate(path string, length int64) (err error)
 | 
			
		||||
 | 
			
		||||
func Ustat(dev int, ubuf *Ustat_t) (err error) {
 | 
			
		||||
	return ENOSYS
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
 | 
			
		||||
//sys	accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
 | 
			
		||||
//sys	bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
 | 
			
		||||
//sys	connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
 | 
			
		||||
//sysnb	getgroups(n int, list *_Gid_t) (nn int, err error)
 | 
			
		||||
//sysnb	setgroups(n int, list *_Gid_t) (err error)
 | 
			
		||||
//sys	getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
 | 
			
		||||
//sys	setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
 | 
			
		||||
//sysnb	socket(domain int, typ int, proto int) (fd int, err error)
 | 
			
		||||
//sysnb	socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
 | 
			
		||||
//sysnb	getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
 | 
			
		||||
//sysnb	getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
 | 
			
		||||
//sys	recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
 | 
			
		||||
//sys	sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
 | 
			
		||||
//sys	recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
 | 
			
		||||
//sys	sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
 | 
			
		||||
//sys	mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)
 | 
			
		||||
 | 
			
		||||
//sysnb	Gettimeofday(tv *Timeval) (err error)
 | 
			
		||||
 | 
			
		||||
func setTimespec(sec, nsec int64) Timespec {
 | 
			
		||||
	return Timespec{Sec: sec, Nsec: nsec}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setTimeval(sec, usec int64) Timeval {
 | 
			
		||||
	return Timeval{Sec: sec, Usec: usec}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func futimesat(dirfd int, path string, tv *[2]Timeval) (err error) {
 | 
			
		||||
	if tv == nil {
 | 
			
		||||
		return utimensat(dirfd, path, nil, 0)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ts := []Timespec{
 | 
			
		||||
		NsecToTimespec(TimevalToNsec(tv[0])),
 | 
			
		||||
		NsecToTimespec(TimevalToNsec(tv[1])),
 | 
			
		||||
	}
 | 
			
		||||
	return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Time(t *Time_t) (Time_t, error) {
 | 
			
		||||
	var tv Timeval
 | 
			
		||||
	err := Gettimeofday(&tv)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return 0, err
 | 
			
		||||
	}
 | 
			
		||||
	if t != nil {
 | 
			
		||||
		*t = Time_t(tv.Sec)
 | 
			
		||||
	}
 | 
			
		||||
	return Time_t(tv.Sec), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Utime(path string, buf *Utimbuf) error {
 | 
			
		||||
	tv := []Timeval{
 | 
			
		||||
		{Sec: buf.Actime},
 | 
			
		||||
		{Sec: buf.Modtime},
 | 
			
		||||
	}
 | 
			
		||||
	return Utimes(path, tv)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func utimes(path string, tv *[2]Timeval) (err error) {
 | 
			
		||||
	if tv == nil {
 | 
			
		||||
		return utimensat(AT_FDCWD, path, nil, 0)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ts := []Timespec{
 | 
			
		||||
		NsecToTimespec(TimevalToNsec(tv[0])),
 | 
			
		||||
		NsecToTimespec(TimevalToNsec(tv[1])),
 | 
			
		||||
	}
 | 
			
		||||
	return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Pipe(p []int) (err error) {
 | 
			
		||||
	if len(p) != 2 {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	var pp [2]_C_int
 | 
			
		||||
	err = pipe2(&pp, 0)
 | 
			
		||||
	p[0] = int(pp[0])
 | 
			
		||||
	p[1] = int(pp[1])
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sysnb	pipe2(p *[2]_C_int, flags int) (err error)
 | 
			
		||||
 | 
			
		||||
func Pipe2(p []int, flags int) (err error) {
 | 
			
		||||
	if len(p) != 2 {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	var pp [2]_C_int
 | 
			
		||||
	err = pipe2(&pp, flags)
 | 
			
		||||
	p[0] = int(pp[0])
 | 
			
		||||
	p[1] = int(pp[1])
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Getrlimit prefers the prlimit64 system call. See issue 38604.
 | 
			
		||||
func Getrlimit(resource int, rlim *Rlimit) error {
 | 
			
		||||
	err := prlimit(0, resource, nil, rlim)
 | 
			
		||||
	if err != ENOSYS {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	return getrlimit(resource, rlim)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Setrlimit prefers the prlimit64 system call. See issue 38604.
 | 
			
		||||
func Setrlimit(resource int, rlim *Rlimit) error {
 | 
			
		||||
	err := prlimit(0, resource, rlim, nil)
 | 
			
		||||
	if err != ENOSYS {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	return setrlimit(resource, rlim)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r *PtraceRegs) PC() uint64 { return r.Pc }
 | 
			
		||||
 | 
			
		||||
func (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc }
 | 
			
		||||
 | 
			
		||||
func (iov *Iovec) SetLen(length int) {
 | 
			
		||||
	iov.Len = uint64(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetControllen(length int) {
 | 
			
		||||
	msghdr.Controllen = uint64(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetIovlen(length int) {
 | 
			
		||||
	msghdr.Iovlen = uint64(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (cmsg *Cmsghdr) SetLen(length int) {
 | 
			
		||||
	cmsg.Len = uint64(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func InotifyInit() (fd int, err error) {
 | 
			
		||||
	return InotifyInit1(0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// dup2 exists because func Dup3 in syscall_linux.go references
 | 
			
		||||
// it in an unreachable path. dup2 isn't available on arm64.
 | 
			
		||||
func dup2(oldfd int, newfd int) error
 | 
			
		||||
 | 
			
		||||
func Pause() error {
 | 
			
		||||
	_, err := ppoll(nil, 0, nil, nil)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Poll(fds []PollFd, timeout int) (n int, err error) {
 | 
			
		||||
	var ts *Timespec
 | 
			
		||||
	if timeout >= 0 {
 | 
			
		||||
		ts = new(Timespec)
 | 
			
		||||
		*ts = NsecToTimespec(int64(timeout) * 1e6)
 | 
			
		||||
	}
 | 
			
		||||
	if len(fds) == 0 {
 | 
			
		||||
		return ppoll(nil, 0, ts, nil)
 | 
			
		||||
	}
 | 
			
		||||
	return ppoll(&fds[0], len(fds), ts, nil)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)
 | 
			
		||||
 | 
			
		||||
func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
 | 
			
		||||
	cmdlineLen := len(cmdline)
 | 
			
		||||
	if cmdlineLen > 0 {
 | 
			
		||||
		// Account for the additional NULL byte added by
 | 
			
		||||
		// BytePtrFromString in kexecFileLoad. The kexec_file_load
 | 
			
		||||
		// syscall expects a NULL-terminated string.
 | 
			
		||||
		cmdlineLen++
 | 
			
		||||
	}
 | 
			
		||||
	return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										15
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_gc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_gc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
// Copyright 2018 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build linux && gc
 | 
			
		||||
// +build linux,gc
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
// SyscallNoError may be used instead of Syscall for syscalls that don't fail.
 | 
			
		||||
func SyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr)
 | 
			
		||||
 | 
			
		||||
// RawSyscallNoError may be used instead of RawSyscall for syscalls that don't
 | 
			
		||||
// fail.
 | 
			
		||||
func RawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr)
 | 
			
		||||
							
								
								
									
										17
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
// Copyright 2018 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build linux && gc && 386
 | 
			
		||||
// +build linux,gc,386
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import "syscall"
 | 
			
		||||
 | 
			
		||||
// Underlying system call writes to newoffset via pointer.
 | 
			
		||||
// Implemented in assembly to avoid allocation.
 | 
			
		||||
func seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno)
 | 
			
		||||
 | 
			
		||||
func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno)
 | 
			
		||||
func rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno)
 | 
			
		||||
							
								
								
									
										14
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
// Copyright 2009 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build arm && gc && linux
 | 
			
		||||
// +build arm,gc,linux
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import "syscall"
 | 
			
		||||
 | 
			
		||||
// Underlying system call writes to newoffset via pointer.
 | 
			
		||||
// Implemented in assembly to avoid allocation.
 | 
			
		||||
func seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno)
 | 
			
		||||
							
								
								
									
										31
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
// Copyright 2018 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build linux && gccgo && 386
 | 
			
		||||
// +build linux,gccgo,386
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"syscall"
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func seek(fd int, offset int64, whence int) (int64, syscall.Errno) {
 | 
			
		||||
	var newoffset int64
 | 
			
		||||
	offsetLow := uint32(offset & 0xffffffff)
 | 
			
		||||
	offsetHigh := uint32((offset >> 32) & 0xffffffff)
 | 
			
		||||
	_, _, err := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offsetHigh), uintptr(offsetLow), uintptr(unsafe.Pointer(&newoffset)), uintptr(whence), 0)
 | 
			
		||||
	return newoffset, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, syscall.Errno) {
 | 
			
		||||
	fd, _, err := Syscall(SYS_SOCKETCALL, uintptr(call), uintptr(unsafe.Pointer(&a0)), 0)
 | 
			
		||||
	return int(fd), err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, syscall.Errno) {
 | 
			
		||||
	fd, _, err := RawSyscall(SYS_SOCKETCALL, uintptr(call), uintptr(unsafe.Pointer(&a0)), 0)
 | 
			
		||||
	return int(fd), err
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										21
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
// Copyright 2018 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build linux && gccgo && arm
 | 
			
		||||
// +build linux,gccgo,arm
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"syscall"
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func seek(fd int, offset int64, whence int) (int64, syscall.Errno) {
 | 
			
		||||
	var newoffset int64
 | 
			
		||||
	offsetLow := uint32(offset & 0xffffffff)
 | 
			
		||||
	offsetHigh := uint32((offset >> 32) & 0xffffffff)
 | 
			
		||||
	_, _, err := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offsetHigh), uintptr(offsetLow), uintptr(unsafe.Pointer(&newoffset)), uintptr(whence), 0)
 | 
			
		||||
	return newoffset, err
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										231
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										231
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,231 @@
 | 
			
		||||
// Copyright 2015 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build linux && (mips64 || mips64le)
 | 
			
		||||
// +build linux
 | 
			
		||||
// +build mips64 mips64le
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
//sys	dup2(oldfd int, newfd int) (err error)
 | 
			
		||||
//sysnb	EpollCreate(size int) (fd int, err error)
 | 
			
		||||
//sys	EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
 | 
			
		||||
//sys	Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
 | 
			
		||||
//sys	Fchown(fd int, uid int, gid int) (err error)
 | 
			
		||||
//sys	Fstatfs(fd int, buf *Statfs_t) (err error)
 | 
			
		||||
//sys	Ftruncate(fd int, length int64) (err error)
 | 
			
		||||
//sysnb	Getegid() (egid int)
 | 
			
		||||
//sysnb	Geteuid() (euid int)
 | 
			
		||||
//sysnb	Getgid() (gid int)
 | 
			
		||||
//sysnb	Getrlimit(resource int, rlim *Rlimit) (err error)
 | 
			
		||||
//sysnb	Getuid() (uid int)
 | 
			
		||||
//sys	Lchown(path string, uid int, gid int) (err error)
 | 
			
		||||
//sys	Listen(s int, n int) (err error)
 | 
			
		||||
//sys	Pause() (err error)
 | 
			
		||||
//sys	Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
 | 
			
		||||
//sys	Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
 | 
			
		||||
//sys	Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
 | 
			
		||||
//sys	Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
 | 
			
		||||
 | 
			
		||||
func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
 | 
			
		||||
	var ts *Timespec
 | 
			
		||||
	if timeout != nil {
 | 
			
		||||
		ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}
 | 
			
		||||
	}
 | 
			
		||||
	return Pselect(nfd, r, w, e, ts, nil)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
 | 
			
		||||
//sys	setfsgid(gid int) (prev int, err error)
 | 
			
		||||
//sys	setfsuid(uid int) (prev int, err error)
 | 
			
		||||
//sysnb	Setregid(rgid int, egid int) (err error)
 | 
			
		||||
//sysnb	Setresgid(rgid int, egid int, sgid int) (err error)
 | 
			
		||||
//sysnb	Setresuid(ruid int, euid int, suid int) (err error)
 | 
			
		||||
//sysnb	Setrlimit(resource int, rlim *Rlimit) (err error)
 | 
			
		||||
//sysnb	Setreuid(ruid int, euid int) (err error)
 | 
			
		||||
//sys	Shutdown(fd int, how int) (err error)
 | 
			
		||||
//sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
 | 
			
		||||
//sys	Statfs(path string, buf *Statfs_t) (err error)
 | 
			
		||||
//sys	SyncFileRange(fd int, off int64, n int64, flags int) (err error)
 | 
			
		||||
//sys	Truncate(path string, length int64) (err error)
 | 
			
		||||
//sys	Ustat(dev int, ubuf *Ustat_t) (err error)
 | 
			
		||||
//sys	accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
 | 
			
		||||
//sys	accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
 | 
			
		||||
//sys	bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
 | 
			
		||||
//sys	connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
 | 
			
		||||
//sysnb	getgroups(n int, list *_Gid_t) (nn int, err error)
 | 
			
		||||
//sysnb	setgroups(n int, list *_Gid_t) (err error)
 | 
			
		||||
//sys	getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
 | 
			
		||||
//sys	setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
 | 
			
		||||
//sysnb	socket(domain int, typ int, proto int) (fd int, err error)
 | 
			
		||||
//sysnb	socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
 | 
			
		||||
//sysnb	getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
 | 
			
		||||
//sysnb	getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
 | 
			
		||||
//sys	recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
 | 
			
		||||
//sys	sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
 | 
			
		||||
//sys	recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
 | 
			
		||||
//sys	sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
 | 
			
		||||
//sys	mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)
 | 
			
		||||
 | 
			
		||||
//sys	futimesat(dirfd int, path string, times *[2]Timeval) (err error)
 | 
			
		||||
//sysnb	Gettimeofday(tv *Timeval) (err error)
 | 
			
		||||
 | 
			
		||||
func Time(t *Time_t) (tt Time_t, err error) {
 | 
			
		||||
	var tv Timeval
 | 
			
		||||
	err = Gettimeofday(&tv)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return 0, err
 | 
			
		||||
	}
 | 
			
		||||
	if t != nil {
 | 
			
		||||
		*t = Time_t(tv.Sec)
 | 
			
		||||
	}
 | 
			
		||||
	return Time_t(tv.Sec), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	Utime(path string, buf *Utimbuf) (err error)
 | 
			
		||||
//sys	utimes(path string, times *[2]Timeval) (err error)
 | 
			
		||||
 | 
			
		||||
func setTimespec(sec, nsec int64) Timespec {
 | 
			
		||||
	return Timespec{Sec: sec, Nsec: nsec}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setTimeval(sec, usec int64) Timeval {
 | 
			
		||||
	return Timeval{Sec: sec, Usec: usec}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Pipe(p []int) (err error) {
 | 
			
		||||
	if len(p) != 2 {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	var pp [2]_C_int
 | 
			
		||||
	err = pipe2(&pp, 0)
 | 
			
		||||
	p[0] = int(pp[0])
 | 
			
		||||
	p[1] = int(pp[1])
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sysnb	pipe2(p *[2]_C_int, flags int) (err error)
 | 
			
		||||
 | 
			
		||||
func Pipe2(p []int, flags int) (err error) {
 | 
			
		||||
	if len(p) != 2 {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	var pp [2]_C_int
 | 
			
		||||
	err = pipe2(&pp, flags)
 | 
			
		||||
	p[0] = int(pp[0])
 | 
			
		||||
	p[1] = int(pp[1])
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Ioperm(from int, num int, on int) (err error) {
 | 
			
		||||
	return ENOSYS
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Iopl(level int) (err error) {
 | 
			
		||||
	return ENOSYS
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type stat_t struct {
 | 
			
		||||
	Dev        uint32
 | 
			
		||||
	Pad0       [3]int32
 | 
			
		||||
	Ino        uint64
 | 
			
		||||
	Mode       uint32
 | 
			
		||||
	Nlink      uint32
 | 
			
		||||
	Uid        uint32
 | 
			
		||||
	Gid        uint32
 | 
			
		||||
	Rdev       uint32
 | 
			
		||||
	Pad1       [3]uint32
 | 
			
		||||
	Size       int64
 | 
			
		||||
	Atime      uint32
 | 
			
		||||
	Atime_nsec uint32
 | 
			
		||||
	Mtime      uint32
 | 
			
		||||
	Mtime_nsec uint32
 | 
			
		||||
	Ctime      uint32
 | 
			
		||||
	Ctime_nsec uint32
 | 
			
		||||
	Blksize    uint32
 | 
			
		||||
	Pad2       uint32
 | 
			
		||||
	Blocks     int64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	fstat(fd int, st *stat_t) (err error)
 | 
			
		||||
//sys	fstatat(dirfd int, path string, st *stat_t, flags int) (err error) = SYS_NEWFSTATAT
 | 
			
		||||
//sys	lstat(path string, st *stat_t) (err error)
 | 
			
		||||
//sys	stat(path string, st *stat_t) (err error)
 | 
			
		||||
 | 
			
		||||
func Fstat(fd int, s *Stat_t) (err error) {
 | 
			
		||||
	st := &stat_t{}
 | 
			
		||||
	err = fstat(fd, st)
 | 
			
		||||
	fillStat_t(s, st)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Fstatat(dirfd int, path string, s *Stat_t, flags int) (err error) {
 | 
			
		||||
	st := &stat_t{}
 | 
			
		||||
	err = fstatat(dirfd, path, st, flags)
 | 
			
		||||
	fillStat_t(s, st)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Lstat(path string, s *Stat_t) (err error) {
 | 
			
		||||
	st := &stat_t{}
 | 
			
		||||
	err = lstat(path, st)
 | 
			
		||||
	fillStat_t(s, st)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Stat(path string, s *Stat_t) (err error) {
 | 
			
		||||
	st := &stat_t{}
 | 
			
		||||
	err = stat(path, st)
 | 
			
		||||
	fillStat_t(s, st)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func fillStat_t(s *Stat_t, st *stat_t) {
 | 
			
		||||
	s.Dev = st.Dev
 | 
			
		||||
	s.Ino = st.Ino
 | 
			
		||||
	s.Mode = st.Mode
 | 
			
		||||
	s.Nlink = st.Nlink
 | 
			
		||||
	s.Uid = st.Uid
 | 
			
		||||
	s.Gid = st.Gid
 | 
			
		||||
	s.Rdev = st.Rdev
 | 
			
		||||
	s.Size = st.Size
 | 
			
		||||
	s.Atim = Timespec{int64(st.Atime), int64(st.Atime_nsec)}
 | 
			
		||||
	s.Mtim = Timespec{int64(st.Mtime), int64(st.Mtime_nsec)}
 | 
			
		||||
	s.Ctim = Timespec{int64(st.Ctime), int64(st.Ctime_nsec)}
 | 
			
		||||
	s.Blksize = st.Blksize
 | 
			
		||||
	s.Blocks = st.Blocks
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r *PtraceRegs) PC() uint64 { return r.Epc }
 | 
			
		||||
 | 
			
		||||
func (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc }
 | 
			
		||||
 | 
			
		||||
func (iov *Iovec) SetLen(length int) {
 | 
			
		||||
	iov.Len = uint64(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetControllen(length int) {
 | 
			
		||||
	msghdr.Controllen = uint64(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetIovlen(length int) {
 | 
			
		||||
	msghdr.Iovlen = uint64(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (cmsg *Cmsghdr) SetLen(length int) {
 | 
			
		||||
	cmsg.Len = uint64(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func InotifyInit() (fd int, err error) {
 | 
			
		||||
	return InotifyInit1(0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	poll(fds *PollFd, nfds int, timeout int) (n int, err error)
 | 
			
		||||
 | 
			
		||||
func Poll(fds []PollFd, timeout int) (n int, err error) {
 | 
			
		||||
	if len(fds) == 0 {
 | 
			
		||||
		return poll(nil, 0, timeout)
 | 
			
		||||
	}
 | 
			
		||||
	return poll(&fds[0], len(fds), timeout)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										239
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										239
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,239 @@
 | 
			
		||||
// Copyright 2016 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:build linux && (mips || mipsle)
 | 
			
		||||
// +build linux
 | 
			
		||||
// +build mips mipsle
 | 
			
		||||
 | 
			
		||||
package unix
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"syscall"
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
 | 
			
		||||
 | 
			
		||||
//sys	dup2(oldfd int, newfd int) (err error)
 | 
			
		||||
//sysnb	EpollCreate(size int) (fd int, err error)
 | 
			
		||||
//sys	EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
 | 
			
		||||
//sys	Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
 | 
			
		||||
//sys	Fchown(fd int, uid int, gid int) (err error)
 | 
			
		||||
//sys	Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64
 | 
			
		||||
//sysnb	Getegid() (egid int)
 | 
			
		||||
//sysnb	Geteuid() (euid int)
 | 
			
		||||
//sysnb	Getgid() (gid int)
 | 
			
		||||
//sysnb	Getuid() (uid int)
 | 
			
		||||
//sys	Lchown(path string, uid int, gid int) (err error)
 | 
			
		||||
//sys	Listen(s int, n int) (err error)
 | 
			
		||||
//sys	Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
 | 
			
		||||
//sys	Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
 | 
			
		||||
//sys	Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
 | 
			
		||||
//sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
 | 
			
		||||
//sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
 | 
			
		||||
//sys	setfsgid(gid int) (prev int, err error)
 | 
			
		||||
//sys	setfsuid(uid int) (prev int, err error)
 | 
			
		||||
//sysnb	Setregid(rgid int, egid int) (err error)
 | 
			
		||||
//sysnb	Setresgid(rgid int, egid int, sgid int) (err error)
 | 
			
		||||
//sysnb	Setresuid(ruid int, euid int, suid int) (err error)
 | 
			
		||||
//sysnb	Setreuid(ruid int, euid int) (err error)
 | 
			
		||||
//sys	Shutdown(fd int, how int) (err error)
 | 
			
		||||
//sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
 | 
			
		||||
//sys	SyncFileRange(fd int, off int64, n int64, flags int) (err error)
 | 
			
		||||
//sys	Truncate(path string, length int64) (err error) = SYS_TRUNCATE64
 | 
			
		||||
//sys	Ustat(dev int, ubuf *Ustat_t) (err error)
 | 
			
		||||
//sys	accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
 | 
			
		||||
//sys	accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
 | 
			
		||||
//sys	bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
 | 
			
		||||
//sys	connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
 | 
			
		||||
//sysnb	getgroups(n int, list *_Gid_t) (nn int, err error)
 | 
			
		||||
//sysnb	setgroups(n int, list *_Gid_t) (err error)
 | 
			
		||||
//sys	getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
 | 
			
		||||
//sys	setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
 | 
			
		||||
//sysnb	socket(domain int, typ int, proto int) (fd int, err error)
 | 
			
		||||
//sysnb	socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
 | 
			
		||||
//sysnb	getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
 | 
			
		||||
//sysnb	getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
 | 
			
		||||
//sys	recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
 | 
			
		||||
//sys	sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
 | 
			
		||||
//sys	recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
 | 
			
		||||
//sys	sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
 | 
			
		||||
 | 
			
		||||
//sysnb	InotifyInit() (fd int, err error)
 | 
			
		||||
//sys	Ioperm(from int, num int, on int) (err error)
 | 
			
		||||
//sys	Iopl(level int) (err error)
 | 
			
		||||
 | 
			
		||||
//sys	futimesat(dirfd int, path string, times *[2]Timeval) (err error)
 | 
			
		||||
//sysnb	Gettimeofday(tv *Timeval) (err error)
 | 
			
		||||
//sysnb	Time(t *Time_t) (tt Time_t, err error)
 | 
			
		||||
//sys	Utime(path string, buf *Utimbuf) (err error)
 | 
			
		||||
//sys	utimes(path string, times *[2]Timeval) (err error)
 | 
			
		||||
 | 
			
		||||
//sys	Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
 | 
			
		||||
//sys	Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
 | 
			
		||||
//sys	Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
 | 
			
		||||
//sys	Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
 | 
			
		||||
 | 
			
		||||
//sys	Pause() (err error)
 | 
			
		||||
 | 
			
		||||
func Fstatfs(fd int, buf *Statfs_t) (err error) {
 | 
			
		||||
	_, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		err = errnoErr(e)
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Statfs(path string, buf *Statfs_t) (err error) {
 | 
			
		||||
	p, err := BytePtrFromString(path)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	_, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(p)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		err = errnoErr(e)
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Seek(fd int, offset int64, whence int) (off int64, err error) {
 | 
			
		||||
	_, _, e := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offset>>32), uintptr(offset), uintptr(unsafe.Pointer(&off)), uintptr(whence), 0)
 | 
			
		||||
	if e != 0 {
 | 
			
		||||
		err = errnoErr(e)
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setTimespec(sec, nsec int64) Timespec {
 | 
			
		||||
	return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setTimeval(sec, usec int64) Timeval {
 | 
			
		||||
	return Timeval{Sec: int32(sec), Usec: int32(usec)}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sysnb	pipe2(p *[2]_C_int, flags int) (err error)
 | 
			
		||||
 | 
			
		||||
func Pipe2(p []int, flags int) (err error) {
 | 
			
		||||
	if len(p) != 2 {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	var pp [2]_C_int
 | 
			
		||||
	err = pipe2(&pp, flags)
 | 
			
		||||
	p[0] = int(pp[0])
 | 
			
		||||
	p[1] = int(pp[1])
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sysnb	pipe() (p1 int, p2 int, err error)
 | 
			
		||||
 | 
			
		||||
func Pipe(p []int) (err error) {
 | 
			
		||||
	if len(p) != 2 {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	p[0], p[1], err = pipe()
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error)
 | 
			
		||||
 | 
			
		||||
func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
 | 
			
		||||
	page := uintptr(offset / 4096)
 | 
			
		||||
	if offset != int64(page)*4096 {
 | 
			
		||||
		return 0, EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	return mmap2(addr, length, prot, flags, fd, page)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const rlimInf32 = ^uint32(0)
 | 
			
		||||
const rlimInf64 = ^uint64(0)
 | 
			
		||||
 | 
			
		||||
type rlimit32 struct {
 | 
			
		||||
	Cur uint32
 | 
			
		||||
	Max uint32
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sysnb	getrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT
 | 
			
		||||
 | 
			
		||||
func Getrlimit(resource int, rlim *Rlimit) (err error) {
 | 
			
		||||
	err = prlimit(0, resource, nil, rlim)
 | 
			
		||||
	if err != ENOSYS {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	rl := rlimit32{}
 | 
			
		||||
	err = getrlimit(resource, &rl)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if rl.Cur == rlimInf32 {
 | 
			
		||||
		rlim.Cur = rlimInf64
 | 
			
		||||
	} else {
 | 
			
		||||
		rlim.Cur = uint64(rl.Cur)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if rl.Max == rlimInf32 {
 | 
			
		||||
		rlim.Max = rlimInf64
 | 
			
		||||
	} else {
 | 
			
		||||
		rlim.Max = uint64(rl.Max)
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sysnb	setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
 | 
			
		||||
 | 
			
		||||
func Setrlimit(resource int, rlim *Rlimit) (err error) {
 | 
			
		||||
	err = prlimit(0, resource, rlim, nil)
 | 
			
		||||
	if err != ENOSYS {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	rl := rlimit32{}
 | 
			
		||||
	if rlim.Cur == rlimInf64 {
 | 
			
		||||
		rl.Cur = rlimInf32
 | 
			
		||||
	} else if rlim.Cur < uint64(rlimInf32) {
 | 
			
		||||
		rl.Cur = uint32(rlim.Cur)
 | 
			
		||||
	} else {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
	if rlim.Max == rlimInf64 {
 | 
			
		||||
		rl.Max = rlimInf32
 | 
			
		||||
	} else if rlim.Max < uint64(rlimInf32) {
 | 
			
		||||
		rl.Max = uint32(rlim.Max)
 | 
			
		||||
	} else {
 | 
			
		||||
		return EINVAL
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return setrlimit(resource, &rl)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (r *PtraceRegs) PC() uint64 { return r.Epc }
 | 
			
		||||
 | 
			
		||||
func (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc }
 | 
			
		||||
 | 
			
		||||
func (iov *Iovec) SetLen(length int) {
 | 
			
		||||
	iov.Len = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetControllen(length int) {
 | 
			
		||||
	msghdr.Controllen = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msghdr *Msghdr) SetIovlen(length int) {
 | 
			
		||||
	msghdr.Iovlen = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (cmsg *Cmsghdr) SetLen(length int) {
 | 
			
		||||
	cmsg.Len = uint32(length)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sys	poll(fds *PollFd, nfds int, timeout int) (n int, err error)
 | 
			
		||||
 | 
			
		||||
func Poll(fds []PollFd, timeout int) (n int, err error) {
 | 
			
		||||
	if len(fds) == 0 {
 | 
			
		||||
		return poll(nil, 0, timeout)
 | 
			
		||||
	}
 | 
			
		||||
	return poll(&fds[0], len(fds), timeout)
 | 
			
		||||
}
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user