mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-01 00:23:56 +08:00 
			
		
		
		
	vendor: initial vendor
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
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 | ||||
							
								
								
									
										173
									
								
								vendor/golang.org/x/sys/unix/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										173
									
								
								vendor/golang.org/x/sys/unix/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,173 @@ | ||||
| # 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 make 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. | ||||
|  | ||||
|  | ||||
| ## Generated files | ||||
|  | ||||
| ### `zerror_${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). | ||||
							
								
								
									
										124
									
								
								vendor/golang.org/x/sys/unix/affinity_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								vendor/golang.org/x/sys/unix/affinity_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,124 @@ | ||||
| // 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 ( | ||||
| 	"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 += onesCount64(uint64(b)) | ||||
| 	} | ||||
| 	return c | ||||
| } | ||||
|  | ||||
| // onesCount64 is a copy of Go 1.9's math/bits.OnesCount64. | ||||
| // Once this package can require Go 1.9, we can delete this | ||||
| // and update the caller to use bits.OnesCount64. | ||||
| func onesCount64(x uint64) int { | ||||
| 	const m0 = 0x5555555555555555 // 01010101 ... | ||||
| 	const m1 = 0x3333333333333333 // 00110011 ... | ||||
| 	const m2 = 0x0f0f0f0f0f0f0f0f // 00001111 ... | ||||
| 	const m3 = 0x00ff00ff00ff00ff // etc. | ||||
| 	const m4 = 0x0000ffff0000ffff | ||||
|  | ||||
| 	// Implementation: Parallel summing of adjacent bits. | ||||
| 	// See "Hacker's Delight", Chap. 5: Counting Bits. | ||||
| 	// The following pattern shows the general approach: | ||||
| 	// | ||||
| 	//   x = x>>1&(m0&m) + x&(m0&m) | ||||
| 	//   x = x>>2&(m1&m) + x&(m1&m) | ||||
| 	//   x = x>>4&(m2&m) + x&(m2&m) | ||||
| 	//   x = x>>8&(m3&m) + x&(m3&m) | ||||
| 	//   x = x>>16&(m4&m) + x&(m4&m) | ||||
| 	//   x = x>>32&(m5&m) + x&(m5&m) | ||||
| 	//   return int(x) | ||||
| 	// | ||||
| 	// Masking (& operations) can be left away when there's no | ||||
| 	// danger that a field's sum will carry over into the next | ||||
| 	// field: Since the result cannot be > 64, 8 bits is enough | ||||
| 	// and we can ignore the masks for the shifts by 8 and up. | ||||
| 	// Per "Hacker's Delight", the first line can be simplified | ||||
| 	// more, but it saves at best one instruction, so we leave | ||||
| 	// it alone for clarity. | ||||
| 	const m = 1<<64 - 1 | ||||
| 	x = x>>1&(m0&m) + x&(m0&m) | ||||
| 	x = x>>2&(m1&m) + x&(m1&m) | ||||
| 	x = (x>>4 + x) & (m2 & m) | ||||
| 	x += x >> 8 | ||||
| 	x += x >> 16 | ||||
| 	x += x >> 32 | ||||
| 	return int(x) & (1<<7 - 1) | ||||
| } | ||||
							
								
								
									
										14
									
								
								vendor/golang.org/x/sys/unix/aliases.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								vendor/golang.org/x/sys/unix/aliases.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build aix darwin dragonfly freebsd linux netbsd openbsd solaris | ||||
| // +build go1.9 | ||||
|  | ||||
| package unix | ||||
|  | ||||
| import "syscall" | ||||
|  | ||||
| type Signal = syscall.Signal | ||||
| type Errno = syscall.Errno | ||||
| type SysProcAttr = syscall.SysProcAttr | ||||
							
								
								
									
										17
									
								
								vendor/golang.org/x/sys/unix/asm_aix_ppc64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								vendor/golang.org/x/sys/unix/asm_aix_ppc64.s
									
									
									
										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. | ||||
|  | ||||
| // +build !gccgo | ||||
|  | ||||
| #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_darwin_386.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_darwin_386.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build !gccgo | ||||
|  | ||||
| #include "textflag.h" | ||||
|  | ||||
| // | ||||
| // System call support for 386, Darwin | ||||
| // | ||||
|  | ||||
| // 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_darwin_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_darwin_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build !gccgo | ||||
|  | ||||
| #include "textflag.h" | ||||
|  | ||||
| // | ||||
| // System call support for AMD64, Darwin | ||||
| // | ||||
|  | ||||
| // 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) | ||||
							
								
								
									
										30
									
								
								vendor/golang.org/x/sys/unix/asm_darwin_arm.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								vendor/golang.org/x/sys/unix/asm_darwin_arm.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| // 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 arm,darwin | ||||
|  | ||||
| #include "textflag.h" | ||||
|  | ||||
| // | ||||
| // System call support for ARM, Darwin | ||||
| // | ||||
|  | ||||
| // 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) | ||||
							
								
								
									
										30
									
								
								vendor/golang.org/x/sys/unix/asm_darwin_arm64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								vendor/golang.org/x/sys/unix/asm_darwin_arm64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| // 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 arm64,darwin | ||||
|  | ||||
| #include "textflag.h" | ||||
|  | ||||
| // | ||||
| // System call support for AMD64, Darwin | ||||
| // | ||||
|  | ||||
| // 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	·Syscall9(SB),NOSPLIT,$0-104 | ||||
| 	B	syscall·Syscall9(SB) | ||||
|  | ||||
| TEXT	·RawSyscall(SB),NOSPLIT,$0-56 | ||||
| 	B	syscall·RawSyscall(SB) | ||||
|  | ||||
| TEXT	·RawSyscall6(SB),NOSPLIT,$0-80 | ||||
| 	B	syscall·RawSyscall6(SB) | ||||
							
								
								
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build !gccgo | ||||
|  | ||||
| #include "textflag.h" | ||||
|  | ||||
| // | ||||
| // System call support for AMD64, DragonFly | ||||
| // | ||||
|  | ||||
| // 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_freebsd_386.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_freebsd_386.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build !gccgo | ||||
|  | ||||
| #include "textflag.h" | ||||
|  | ||||
| // | ||||
| // System call support for 386, FreeBSD | ||||
| // | ||||
|  | ||||
| // 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_freebsd_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build !gccgo | ||||
|  | ||||
| #include "textflag.h" | ||||
|  | ||||
| // | ||||
| // System call support for AMD64, FreeBSD | ||||
| // | ||||
|  | ||||
| // 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_freebsd_arm.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_freebsd_arm.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build !gccgo | ||||
|  | ||||
| #include "textflag.h" | ||||
|  | ||||
| // | ||||
| // System call support for ARM, FreeBSD | ||||
| // | ||||
|  | ||||
| // 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_freebsd_arm64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_freebsd_arm64.s
									
									
									
										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. | ||||
|  | ||||
| // +build !gccgo | ||||
|  | ||||
| #include "textflag.h" | ||||
|  | ||||
| // | ||||
| // System call support for ARM64, FreeBSD | ||||
| // | ||||
|  | ||||
| // 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) | ||||
							
								
								
									
										65
									
								
								vendor/golang.org/x/sys/unix/asm_linux_386.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								vendor/golang.org/x/sys/unix/asm_linux_386.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build !gccgo | ||||
|  | ||||
| #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) | ||||
							
								
								
									
										57
									
								
								vendor/golang.org/x/sys/unix/asm_linux_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								vendor/golang.org/x/sys/unix/asm_linux_amd64.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. | ||||
|  | ||||
| // +build !gccgo | ||||
|  | ||||
| #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) | ||||
							
								
								
									
										56
									
								
								vendor/golang.org/x/sys/unix/asm_linux_arm.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								vendor/golang.org/x/sys/unix/asm_linux_arm.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build !gccgo | ||||
|  | ||||
| #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) | ||||
							
								
								
									
										52
									
								
								vendor/golang.org/x/sys/unix/asm_linux_arm64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								vendor/golang.org/x/sys/unix/asm_linux_arm64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
| // 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 linux | ||||
| // +build arm64 | ||||
| // +build !gccgo | ||||
|  | ||||
| #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 | ||||
							
								
								
									
										56
									
								
								vendor/golang.org/x/sys/unix/asm_linux_mips64x.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								vendor/golang.org/x/sys/unix/asm_linux_mips64x.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| // 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 linux | ||||
| // +build mips64 mips64le | ||||
| // +build !gccgo | ||||
|  | ||||
| #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 | ||||
							
								
								
									
										54
									
								
								vendor/golang.org/x/sys/unix/asm_linux_mipsx.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								vendor/golang.org/x/sys/unix/asm_linux_mipsx.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build linux | ||||
| // +build mips mipsle | ||||
| // +build !gccgo | ||||
|  | ||||
| #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 | ||||
							
								
								
									
										44
									
								
								vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build linux | ||||
| // +build ppc64 ppc64le | ||||
| // +build !gccgo | ||||
|  | ||||
| #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 | ||||
							
								
								
									
										56
									
								
								vendor/golang.org/x/sys/unix/asm_linux_s390x.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								vendor/golang.org/x/sys/unix/asm_linux_s390x.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build s390x | ||||
| // +build linux | ||||
| // +build !gccgo | ||||
|  | ||||
| #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 | ||||
							
								
								
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_netbsd_386.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_netbsd_386.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build !gccgo | ||||
|  | ||||
| #include "textflag.h" | ||||
|  | ||||
| // | ||||
| // System call support for 386, NetBSD | ||||
| // | ||||
|  | ||||
| // 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_netbsd_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build !gccgo | ||||
|  | ||||
| #include "textflag.h" | ||||
|  | ||||
| // | ||||
| // System call support for AMD64, NetBSD | ||||
| // | ||||
|  | ||||
| // 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_netbsd_arm.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_netbsd_arm.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| // Copyright 2013 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 | ||||
|  | ||||
| #include "textflag.h" | ||||
|  | ||||
| // | ||||
| // System call support for ARM, NetBSD | ||||
| // | ||||
|  | ||||
| // 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_netbsd_arm64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_netbsd_arm64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build !gccgo | ||||
|  | ||||
| #include "textflag.h" | ||||
|  | ||||
| // | ||||
| // System call support for ARM64, NetBSD | ||||
| // | ||||
|  | ||||
| // 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	·Syscall9(SB),NOSPLIT,$0-104 | ||||
| 	B	syscall·Syscall9(SB) | ||||
|  | ||||
| TEXT	·RawSyscall(SB),NOSPLIT,$0-56 | ||||
| 	B	syscall·RawSyscall(SB) | ||||
|  | ||||
| TEXT	·RawSyscall6(SB),NOSPLIT,$0-80 | ||||
| 	B	syscall·RawSyscall6(SB) | ||||
							
								
								
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_openbsd_386.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_openbsd_386.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build !gccgo | ||||
|  | ||||
| #include "textflag.h" | ||||
|  | ||||
| // | ||||
| // System call support for 386, OpenBSD | ||||
| // | ||||
|  | ||||
| // 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_openbsd_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build !gccgo | ||||
|  | ||||
| #include "textflag.h" | ||||
|  | ||||
| // | ||||
| // System call support for AMD64, 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) | ||||
							
								
								
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_openbsd_arm.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/golang.org/x/sys/unix/asm_openbsd_arm.s
									
									
									
										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. | ||||
|  | ||||
| // +build !gccgo | ||||
|  | ||||
| #include "textflag.h" | ||||
|  | ||||
| // | ||||
| // System call support for ARM, OpenBSD | ||||
| // | ||||
|  | ||||
| // 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) | ||||
							
								
								
									
										17
									
								
								vendor/golang.org/x/sys/unix/asm_solaris_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								vendor/golang.org/x/sys/unix/asm_solaris_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build !gccgo | ||||
|  | ||||
| #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) | ||||
							
								
								
									
										35
									
								
								vendor/golang.org/x/sys/unix/bluetooth_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								vendor/golang.org/x/sys/unix/bluetooth_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| // 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 | ||||
| ) | ||||
|  | ||||
| // Socketoption Level | ||||
| const ( | ||||
| 	SOL_BLUETOOTH = 0x112 | ||||
| 	SOL_HCI       = 0x0 | ||||
| 	SOL_L2CAP     = 0x6 | ||||
| 	SOL_RFCOMM    = 0x12 | ||||
| 	SOL_SCO       = 0x11 | ||||
| ) | ||||
							
								
								
									
										195
									
								
								vendor/golang.org/x/sys/unix/cap_freebsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										195
									
								
								vendor/golang.org/x/sys/unix/cap_freebsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,195 @@ | ||||
| // 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. | ||||
|  | ||||
| // +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 | ||||
| } | ||||
							
								
								
									
										13
									
								
								vendor/golang.org/x/sys/unix/constants.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								vendor/golang.org/x/sys/unix/constants.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| // 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 aix darwin dragonfly freebsd linux netbsd openbsd solaris | ||||
|  | ||||
| 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. | ||||
|  | ||||
| // +build aix | ||||
| // +build 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. | ||||
|  | ||||
| // +build aix | ||||
| // +build 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 | ||||
| } | ||||
							
								
								
									
										17
									
								
								vendor/golang.org/x/sys/unix/dirent.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								vendor/golang.org/x/sys/unix/dirent.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris | ||||
|  | ||||
| package unix | ||||
|  | ||||
| import "syscall" | ||||
|  | ||||
| // 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) { | ||||
| 	return syscall.ParseDirent(buf, max, names) | ||||
| } | ||||
							
								
								
									
										9
									
								
								vendor/golang.org/x/sys/unix/endian_big.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								vendor/golang.org/x/sys/unix/endian_big.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| // 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. | ||||
| // | ||||
| // +build ppc64 s390x mips mips64 | ||||
|  | ||||
| package unix | ||||
|  | ||||
| const isBigEndian = true | ||||
							
								
								
									
										9
									
								
								vendor/golang.org/x/sys/unix/endian_little.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								vendor/golang.org/x/sys/unix/endian_little.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| // 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. | ||||
| // | ||||
| // +build 386 amd64 amd64p32 arm arm64 ppc64le mipsle mips64le | ||||
|  | ||||
| package unix | ||||
|  | ||||
| const isBigEndian = false | ||||
							
								
								
									
										31
									
								
								vendor/golang.org/x/sys/unix/env_unix.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								vendor/golang.org/x/sys/unix/env_unix.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build aix darwin dragonfly freebsd linux netbsd openbsd solaris | ||||
|  | ||||
| // 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) | ||||
| } | ||||
							
								
								
									
										227
									
								
								vendor/golang.org/x/sys/unix/errors_freebsd_386.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										227
									
								
								vendor/golang.org/x/sys/unix/errors_freebsd_386.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,227 @@ | ||||
| // 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 ( | ||||
| 	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 | ||||
| 	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 | ||||
| ) | ||||
							
								
								
									
										227
									
								
								vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										227
									
								
								vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,227 @@ | ||||
| // 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 ( | ||||
| 	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 | ||||
| 	IP_FAITH                          = 0x16 | ||||
| 	MAP_NORESERVE                     = 0x40 | ||||
| 	MAP_RENAME                        = 0x20 | ||||
| 	NET_RT_MAXID                      = 0x6 | ||||
| 	RTF_PRCLONING                     = 0x10000 | ||||
| 	RTM_OLDADD                        = 0x9 | ||||
| 	RTM_OLDDEL                        = 0xa | ||||
| 	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 | ||||
| ) | ||||
							
								
								
									
										32
									
								
								vendor/golang.org/x/sys/unix/fcntl.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								vendor/golang.org/x/sys/unix/fcntl.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build dragonfly freebsd linux netbsd openbsd | ||||
|  | ||||
| package unix | ||||
|  | ||||
| import "unsafe" | ||||
|  | ||||
| // fcntl64Syscall is usually SYS_FCNTL, but is overridden on 32-bit Linux | ||||
| // systems by flock_linux_32bit.go to be SYS_FCNTL64. | ||||
| var fcntl64Syscall uintptr = SYS_FCNTL | ||||
|  | ||||
| // FcntlInt performs a fcntl syscall on fd with the provided command and argument. | ||||
| func FcntlInt(fd uintptr, cmd, arg int) (int, error) { | ||||
| 	valptr, _, errno := Syscall(fcntl64Syscall, fd, uintptr(cmd), uintptr(arg)) | ||||
| 	var err error | ||||
| 	if errno != 0 { | ||||
| 		err = errno | ||||
| 	} | ||||
| 	return int(valptr), err | ||||
| } | ||||
|  | ||||
| // 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 | ||||
| } | ||||
							
								
								
									
										18
									
								
								vendor/golang.org/x/sys/unix/fcntl_darwin.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								vendor/golang.org/x/sys/unix/fcntl_darwin.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| // 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 | ||||
| } | ||||
							
								
								
									
										13
									
								
								vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| // +build linux,386 linux,arm linux,mips linux,mipsle | ||||
|  | ||||
| // 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. | ||||
|  | ||||
| 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 | ||||
| } | ||||
							
								
								
									
										62
									
								
								vendor/golang.org/x/sys/unix/gccgo.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								vendor/golang.org/x/sys/unix/gccgo.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | ||||
| // 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 | ||||
|  | ||||
| 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. | ||||
|  | ||||
| //extern gccgoRealSyscallNoError | ||||
| func realSyscallNoError(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r uintptr) | ||||
|  | ||||
| //extern gccgoRealSyscall | ||||
| 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) | ||||
| } | ||||
							
								
								
									
										39
									
								
								vendor/golang.org/x/sys/unix/gccgo_c.c
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								vendor/golang.org/x/sys/unix/gccgo_c.c
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| // 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) | ||||
| { | ||||
| 	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) | ||||
| { | ||||
| 	return syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9); | ||||
| } | ||||
							
								
								
									
										20
									
								
								vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| // 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,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 | ||||
| } | ||||
							
								
								
									
										30
									
								
								vendor/golang.org/x/sys/unix/ioctl.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								vendor/golang.org/x/sys/unix/ioctl.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build aix darwin dragonfly freebsd linux netbsd openbsd solaris | ||||
|  | ||||
| package unix | ||||
|  | ||||
| import "runtime" | ||||
|  | ||||
| // 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 := ioctlSetWinsize(fd, req, 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 := ioctlSetTermios(fd, req, value) | ||||
| 	runtime.KeepAlive(value) | ||||
| 	return err | ||||
| } | ||||
							
								
								
									
										212
									
								
								vendor/golang.org/x/sys/unix/mkall.sh
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										212
									
								
								vendor/golang.org/x/sys/unix/mkall.sh
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,212 @@ | ||||
| #!/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 $(dirname "$(readlink -f "$0")"):/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_386) | ||||
| 	mkerrors="$mkerrors -m32" | ||||
| 	mksyscall="go run mksyscall.go -l32" | ||||
| 	mksysnum="go run mksysnum.go $(xcrun --show-sdk-path --sdk macosx)/usr/include/sys/syscall.h" | ||||
| 	mktypes="GOARCH=$GOARCH go tool cgo -godefs" | ||||
| 	mkasm="go run mkasm_darwin.go" | ||||
| 	;; | ||||
| darwin_amd64) | ||||
| 	mkerrors="$mkerrors -m64" | ||||
| 	mksysnum="go run mksysnum.go $(xcrun --show-sdk-path --sdk macosx)/usr/include/sys/syscall.h" | ||||
| 	mktypes="GOARCH=$GOARCH go tool cgo -godefs" | ||||
| 	mkasm="go run mkasm_darwin.go" | ||||
| 	;; | ||||
| darwin_arm) | ||||
| 	mkerrors="$mkerrors" | ||||
| 	mksyscall="go run mksyscall.go -l32" | ||||
| 	mksysnum="go run mksysnum.go $(xcrun --show-sdk-path --sdk iphoneos)/usr/include/sys/syscall.h" | ||||
| 	mktypes="GOARCH=$GOARCH go tool cgo -godefs" | ||||
| 	mkasm="go run mkasm_darwin.go" | ||||
| 	;; | ||||
| darwin_arm64) | ||||
| 	mkerrors="$mkerrors -m64" | ||||
| 	mksysnum="go run mksysnum.go $(xcrun --show-sdk-path --sdk iphoneos)/usr/include/sys/syscall.h" | ||||
| 	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/10/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/10/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/10/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/10/sys/kern/syscalls.master'" | ||||
| 	mktypes="GOARCH=$GOARCH go tool cgo -godefs" | ||||
| 	;; | ||||
| 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" | ||||
| 	;; | ||||
| openbsd_386) | ||||
| 	mkerrors="$mkerrors -m32" | ||||
| 	mksyscall="go run mksyscall.go -l32 -openbsd" | ||||
| 	mksysctl="./mksysctl_openbsd.pl" | ||||
| 	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="./mksysctl_openbsd.pl" | ||||
| 	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="./mksysctl_openbsd.pl" | ||||
| 	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" | ||||
| 	;; | ||||
| *) | ||||
| 	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 | ||||
| 			        # pre-1.12, direct syscalls | ||||
| 			        echo "$mksyscall -tags $GOOS,$GOARCH,!go1.12 $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.1_11.go"; | ||||
| 			        # 1.12 and later, syscalls via libSystem | ||||
| 				echo "$mksyscall -tags $GOOS,$GOARCH,go1.12 $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.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 | ||||
							
								
								
									
										61
									
								
								vendor/golang.org/x/sys/unix/mkasm_darwin.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								vendor/golang.org/x/sys/unix/mkasm_darwin.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build ignore | ||||
|  | ||||
| // mkasm_darwin.go generates assembly trampolines to call libSystem routines from Go. | ||||
| //This program must be run after mksyscall.go. | ||||
| package main | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"fmt" | ||||
| 	"io/ioutil" | ||||
| 	"log" | ||||
| 	"os" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| func main() { | ||||
| 	in1, err := ioutil.ReadFile("syscall_darwin.go") | ||||
| 	if err != nil { | ||||
| 		log.Fatalf("can't open syscall_darwin.go: %s", err) | ||||
| 	} | ||||
| 	arch := os.Args[1] | ||||
| 	in2, err := ioutil.ReadFile(fmt.Sprintf("syscall_darwin_%s.go", arch)) | ||||
| 	if err != nil { | ||||
| 		log.Fatalf("can't open syscall_darwin_%s.go: %s", arch, err) | ||||
| 	} | ||||
| 	in3, err := ioutil.ReadFile(fmt.Sprintf("zsyscall_darwin_%s.go", arch)) | ||||
| 	if err != nil { | ||||
| 		log.Fatalf("can't open zsyscall_darwin_%s.go: %s", arch, err) | ||||
| 	} | ||||
| 	in := string(in1) + string(in2) + string(in3) | ||||
|  | ||||
| 	trampolines := map[string]bool{} | ||||
|  | ||||
| 	var out bytes.Buffer | ||||
|  | ||||
| 	fmt.Fprintf(&out, "// go run mkasm_darwin.go %s\n", strings.Join(os.Args[1:], " ")) | ||||
| 	fmt.Fprintf(&out, "// Code generated by the command above; DO NOT EDIT.\n") | ||||
| 	fmt.Fprintf(&out, "\n") | ||||
| 	fmt.Fprintf(&out, "// +build go1.12\n") | ||||
| 	fmt.Fprintf(&out, "\n") | ||||
| 	fmt.Fprintf(&out, "#include \"textflag.h\"\n") | ||||
| 	for _, line := range strings.Split(in, "\n") { | ||||
| 		if !strings.HasPrefix(line, "func ") || !strings.HasSuffix(line, "_trampoline()") { | ||||
| 			continue | ||||
| 		} | ||||
| 		fn := line[5 : len(line)-13] | ||||
| 		if !trampolines[fn] { | ||||
| 			trampolines[fn] = true | ||||
| 			fmt.Fprintf(&out, "TEXT ·%s_trampoline(SB),NOSPLIT,$0-0\n", fn) | ||||
| 			fmt.Fprintf(&out, "\tJMP\t%s(SB)\n", fn) | ||||
| 		} | ||||
| 	} | ||||
| 	err = ioutil.WriteFile(fmt.Sprintf("zsyscall_darwin_%s.s", arch), out.Bytes(), 0644) | ||||
| 	if err != nil { | ||||
| 		log.Fatalf("can't write zsyscall_darwin_%s.s: %s", arch, err) | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										659
									
								
								vendor/golang.org/x/sys/unix/mkerrors.sh
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										659
									
								
								vendor/golang.org/x/sys/unix/mkerrors.sh
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,659 @@ | ||||
| #!/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/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 | ||||
| #include <stdint.h> | ||||
| #include <sys/attr.h> | ||||
| #include <sys/types.h> | ||||
| #include <sys/event.h> | ||||
| #include <sys/ptrace.h> | ||||
| #include <sys/socket.h> | ||||
| #include <sys/sockio.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/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_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/event.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_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/signalfd.h> | ||||
| #include <sys/socket.h> | ||||
| #include <sys/xattr.h> | ||||
| #include <linux/errqueue.h> | ||||
| #include <linux/if.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_addr.h> | ||||
| #include <linux/falloc.h> | ||||
| #include <linux/fanotify.h> | ||||
| #include <linux/filter.h> | ||||
| #include <linux/fs.h> | ||||
| #include <linux/kexec.h> | ||||
| #include <linux/keyctl.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/perf_event.h> | ||||
| #include <linux/random.h> | ||||
| #include <linux/reboot.h> | ||||
| #include <linux/rtnetlink.h> | ||||
| #include <linux/ptrace.h> | ||||
| #include <linux/sched.h> | ||||
| #include <linux/seccomp.h> | ||||
| #include <linux/sockios.h> | ||||
| #include <linux/wait.h> | ||||
| #include <linux/icmpv6.h> | ||||
| #include <linux/serial.h> | ||||
| #include <linux/can.h> | ||||
| #include <linux/vm_sockets.h> | ||||
| #include <linux/taskstats.h> | ||||
| #include <linux/genetlink.h> | ||||
| #include <linux/watchdog.h> | ||||
| #include <linux/hdreg.h> | ||||
| #include <linux/rtc.h> | ||||
| #include <linux/if_xdp.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 | ||||
| ' | ||||
|  | ||||
| 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/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/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/socket.h> | ||||
| #include <sys/sockio.h> | ||||
| #include <sys/stat.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/in.h> | ||||
| #include <termios.h> | ||||
| #include <netinet/ip.h> | ||||
| #include <netinet/ip_mroute.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 ~ /^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 ~ /^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 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|ICMP6|TCP|EVFILT|NOTE|EV|SHUT|PROT|MAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR)_/ || | ||||
| 		$2 ~ /^TP_STATUS_/ || | ||||
| 		$2 ~ /^FALLOC_/ || | ||||
| 		$2 == "ICMPV6_FILTER" || | ||||
| 		$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 ~ /^TUN(SET|GET|ATTACH|DETACH)/ || | ||||
| 		$2 ~ /^(O|F|[ES]?FD|NAME|S|PTRACE|PT)_/ || | ||||
| 		$2 ~ /^KEXEC_/ || | ||||
| 		$2 ~ /^LINUX_REBOOT_CMD_/ || | ||||
| 		$2 ~ /^LINUX_REBOOT_MAGIC[12]$/ || | ||||
| 		$2 ~ /^MODULE_INIT_/ || | ||||
| 		$2 !~ "NLA_TYPE_MASK" && | ||||
| 		$2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTC|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P|NETNSA)_/ || | ||||
| 		$2 ~ /^SIOC/ || | ||||
| 		$2 ~ /^TIOC/ || | ||||
| 		$2 ~ /^TCGET/ || | ||||
| 		$2 ~ /^TCSET/ || | ||||
| 		$2 ~ /^TC(FLSH|SBRKP?|XONC)$/ || | ||||
| 		$2 !~ "RTF_BITS" && | ||||
| 		$2 ~ /^(IFF|IFT|NET_RT|RTM|RTF|RTV|RTA|RTAX)_/ || | ||||
| 		$2 ~ /^BIOC/ || | ||||
| 		$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)$/ && | ||||
| 		$2 ~ /^(BPF|DLT)_/ || | ||||
| 		$2 ~ /^(CLOCK|TIMER)_/ || | ||||
| 		$2 ~ /^CAN_/ || | ||||
| 		$2 ~ /^CAP_/ || | ||||
| 		$2 ~ /^ALG_/ || | ||||
| 		$2 ~ /^FS_(POLICY_FLAGS|KEY_DESC|ENCRYPTION_MODE|[A-Z0-9_]+_KEY_SIZE|IOC_(GET|SET)_ENCRYPTION)/ || | ||||
| 		$2 ~ /^GRND_/ || | ||||
| 		$2 ~ /^RND/ || | ||||
| 		$2 ~ /^KEY_(SPEC|REQKEY_DEFL)_/ || | ||||
| 		$2 ~ /^KEYCTL_/ || | ||||
| 		$2 ~ /^PERF_EVENT_IOC_/ || | ||||
| 		$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 ~ /^WDIOC_/ || | ||||
| 		$2 ~ /^NFN/ || | ||||
| 		$2 ~ /^XDP_/ || | ||||
| 		$2 ~ /^(HDIO|WIN|SMART)_/ || | ||||
| 		$2 !~ "WMESGLEN" && | ||||
| 		$2 ~ /^W[A-Z0-9]+$/ || | ||||
| 		$2 ~/^PPPIOC/ || | ||||
| 		$2 ~ /^FAN_|FANOTIFY_/ || | ||||
| 		$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 "// +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 | ||||
							
								
								
									
										106
									
								
								vendor/golang.org/x/sys/unix/mkpost.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								vendor/golang.org/x/sys/unix/mkpost.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,106 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build ignore | ||||
|  | ||||
| // mkpost processes the output of cgo -godefs to | ||||
| // modify the generated types. It is used to clean up | ||||
| // the sys API in an architecture specific manner. | ||||
| // | ||||
| // mkpost is run after cgo -godefs; see README.md. | ||||
| package main | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"fmt" | ||||
| 	"go/format" | ||||
| 	"io/ioutil" | ||||
| 	"log" | ||||
| 	"os" | ||||
| 	"regexp" | ||||
| ) | ||||
|  | ||||
| func main() { | ||||
| 	// Get the OS and architecture (using GOARCH_TARGET if it exists) | ||||
| 	goos := os.Getenv("GOOS") | ||||
| 	goarch := os.Getenv("GOARCH_TARGET") | ||||
| 	if goarch == "" { | ||||
| 		goarch = os.Getenv("GOARCH") | ||||
| 	} | ||||
| 	// Check that we are using the Docker-based build system if we should be. | ||||
| 	if goos == "linux" { | ||||
| 		if os.Getenv("GOLANG_SYS_BUILD") != "docker" { | ||||
| 			os.Stderr.WriteString("In the Docker-based build system, mkpost should not be called directly.\n") | ||||
| 			os.Stderr.WriteString("See README.md\n") | ||||
| 			os.Exit(1) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	b, err := ioutil.ReadAll(os.Stdin) | ||||
| 	if err != nil { | ||||
| 		log.Fatal(err) | ||||
| 	} | ||||
|  | ||||
| 	// Intentionally export __val fields in Fsid and Sigset_t | ||||
| 	valRegex := regexp.MustCompile(`type (Fsid|Sigset_t) struct {(\s+)X__val(\s+\S+\s+)}`) | ||||
| 	b = valRegex.ReplaceAll(b, []byte("type $1 struct {${2}Val$3}")) | ||||
|  | ||||
| 	// Intentionally export __fds_bits field in FdSet | ||||
| 	fdSetRegex := regexp.MustCompile(`type (FdSet) struct {(\s+)X__fds_bits(\s+\S+\s+)}`) | ||||
| 	b = fdSetRegex.ReplaceAll(b, []byte("type $1 struct {${2}Bits$3}")) | ||||
|  | ||||
| 	// If we have empty Ptrace structs, we should delete them. Only s390x emits | ||||
| 	// nonempty Ptrace structs. | ||||
| 	ptraceRexexp := regexp.MustCompile(`type Ptrace((Psw|Fpregs|Per) struct {\s*})`) | ||||
| 	b = ptraceRexexp.ReplaceAll(b, nil) | ||||
|  | ||||
| 	// Replace the control_regs union with a blank identifier for now. | ||||
| 	controlRegsRegex := regexp.MustCompile(`(Control_regs)\s+\[0\]uint64`) | ||||
| 	b = controlRegsRegex.ReplaceAll(b, []byte("_ [0]uint64")) | ||||
|  | ||||
| 	// Remove fields that are added by glibc | ||||
| 	// Note that this is unstable as the identifers are private. | ||||
| 	removeFieldsRegex := regexp.MustCompile(`X__glibc\S*`) | ||||
| 	b = removeFieldsRegex.ReplaceAll(b, []byte("_")) | ||||
|  | ||||
| 	// Convert [65]int8 to [65]byte in Utsname members to simplify | ||||
| 	// conversion to string; see golang.org/issue/20753 | ||||
| 	convertUtsnameRegex := regexp.MustCompile(`((Sys|Node|Domain)name|Release|Version|Machine)(\s+)\[(\d+)\]u?int8`) | ||||
| 	b = convertUtsnameRegex.ReplaceAll(b, []byte("$1$3[$4]byte")) | ||||
|  | ||||
| 	// Convert [1024]int8 to [1024]byte in Ptmget members | ||||
| 	convertPtmget := regexp.MustCompile(`([SC]n)(\s+)\[(\d+)\]u?int8`) | ||||
| 	b = convertPtmget.ReplaceAll(b, []byte("$1[$3]byte")) | ||||
|  | ||||
| 	// Remove spare fields (e.g. in Statx_t) | ||||
| 	spareFieldsRegex := regexp.MustCompile(`X__spare\S*`) | ||||
| 	b = spareFieldsRegex.ReplaceAll(b, []byte("_")) | ||||
|  | ||||
| 	// Remove cgo padding fields | ||||
| 	removePaddingFieldsRegex := regexp.MustCompile(`Pad_cgo_\d+`) | ||||
| 	b = removePaddingFieldsRegex.ReplaceAll(b, []byte("_")) | ||||
|  | ||||
| 	// Remove padding, hidden, or unused fields | ||||
| 	removeFieldsRegex = regexp.MustCompile(`\b(X_\S+|Padding)`) | ||||
| 	b = removeFieldsRegex.ReplaceAll(b, []byte("_")) | ||||
|  | ||||
| 	// Remove the first line of warning from cgo | ||||
| 	b = b[bytes.IndexByte(b, '\n')+1:] | ||||
| 	// Modify the command in the header to include: | ||||
| 	//  mkpost, our own warning, and a build tag. | ||||
| 	replacement := fmt.Sprintf(`$1 | go run mkpost.go | ||||
| // Code generated by the command above; see README.md. DO NOT EDIT. | ||||
|  | ||||
| // +build %s,%s`, goarch, goos) | ||||
| 	cgoCommandRegex := regexp.MustCompile(`(cgo -godefs .*)`) | ||||
| 	b = cgoCommandRegex.ReplaceAll(b, []byte(replacement)) | ||||
|  | ||||
| 	// gofmt | ||||
| 	b, err = format.Source(b) | ||||
| 	if err != nil { | ||||
| 		log.Fatal(err) | ||||
| 	} | ||||
|  | ||||
| 	os.Stdout.Write(b) | ||||
| } | ||||
							
								
								
									
										402
									
								
								vendor/golang.org/x/sys/unix/mksyscall.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										402
									
								
								vendor/golang.org/x/sys/unix/mksyscall.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,402 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build ignore | ||||
|  | ||||
| /* | ||||
| This program reads a file containing function prototypes | ||||
| (like syscall_darwin.go) and generates system call bodies. | ||||
| The prototypes are marked by lines beginning with "//sys" | ||||
| and read like func declarations if //sys is replaced by func, but: | ||||
| 	* The parameter lists must give a name for each argument. | ||||
| 	  This includes return parameters. | ||||
| 	* The parameter lists must give a type for each argument: | ||||
| 	  the (x, y, z int) shorthand is not allowed. | ||||
| 	* If the return parameter is an error number, it must be named errno. | ||||
|  | ||||
| A line beginning with //sysnb is like //sys, except that the | ||||
| goroutine will not be suspended during the execution of the system | ||||
| call.  This must only be used for system calls which can never | ||||
| block, as otherwise the system call could cause all goroutines to | ||||
| hang. | ||||
| */ | ||||
| package main | ||||
|  | ||||
| import ( | ||||
| 	"bufio" | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"os" | ||||
| 	"regexp" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	b32       = flag.Bool("b32", false, "32bit big-endian") | ||||
| 	l32       = flag.Bool("l32", false, "32bit little-endian") | ||||
| 	plan9     = flag.Bool("plan9", false, "plan9") | ||||
| 	openbsd   = flag.Bool("openbsd", false, "openbsd") | ||||
| 	netbsd    = flag.Bool("netbsd", false, "netbsd") | ||||
| 	dragonfly = flag.Bool("dragonfly", false, "dragonfly") | ||||
| 	arm       = flag.Bool("arm", false, "arm") // 64-bit value should use (even, odd)-pair | ||||
| 	tags      = flag.String("tags", "", "build tags") | ||||
| 	filename  = flag.String("output", "", "output file name (standard output if omitted)") | ||||
| ) | ||||
|  | ||||
| // cmdLine returns this programs's commandline arguments | ||||
| func cmdLine() string { | ||||
| 	return "go run mksyscall.go " + strings.Join(os.Args[1:], " ") | ||||
| } | ||||
|  | ||||
| // buildTags returns build tags | ||||
| func buildTags() string { | ||||
| 	return *tags | ||||
| } | ||||
|  | ||||
| // Param is function parameter | ||||
| type Param struct { | ||||
| 	Name string | ||||
| 	Type string | ||||
| } | ||||
|  | ||||
| // usage prints the program usage | ||||
| func usage() { | ||||
| 	fmt.Fprintf(os.Stderr, "usage: go run mksyscall.go [-b32 | -l32] [-tags x,y] [file ...]\n") | ||||
| 	os.Exit(1) | ||||
| } | ||||
|  | ||||
| // parseParamList parses parameter list and returns a slice of parameters | ||||
| func parseParamList(list string) []string { | ||||
| 	list = strings.TrimSpace(list) | ||||
| 	if list == "" { | ||||
| 		return []string{} | ||||
| 	} | ||||
| 	return regexp.MustCompile(`\s*,\s*`).Split(list, -1) | ||||
| } | ||||
|  | ||||
| // parseParam splits a parameter into name and type | ||||
| func parseParam(p string) Param { | ||||
| 	ps := regexp.MustCompile(`^(\S*) (\S*)$`).FindStringSubmatch(p) | ||||
| 	if ps == nil { | ||||
| 		fmt.Fprintf(os.Stderr, "malformed parameter: %s\n", p) | ||||
| 		os.Exit(1) | ||||
| 	} | ||||
| 	return Param{ps[1], ps[2]} | ||||
| } | ||||
|  | ||||
| func main() { | ||||
| 	// Get the OS and architecture (using GOARCH_TARGET if it exists) | ||||
| 	goos := os.Getenv("GOOS") | ||||
| 	if goos == "" { | ||||
| 		fmt.Fprintln(os.Stderr, "GOOS not defined in environment") | ||||
| 		os.Exit(1) | ||||
| 	} | ||||
| 	goarch := os.Getenv("GOARCH_TARGET") | ||||
| 	if goarch == "" { | ||||
| 		goarch = os.Getenv("GOARCH") | ||||
| 	} | ||||
|  | ||||
| 	// Check that we are using the Docker-based build system if we should | ||||
| 	if goos == "linux" { | ||||
| 		if os.Getenv("GOLANG_SYS_BUILD") != "docker" { | ||||
| 			fmt.Fprintf(os.Stderr, "In the Docker-based build system, mksyscall should not be called directly.\n") | ||||
| 			fmt.Fprintf(os.Stderr, "See README.md\n") | ||||
| 			os.Exit(1) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	flag.Usage = usage | ||||
| 	flag.Parse() | ||||
| 	if len(flag.Args()) <= 0 { | ||||
| 		fmt.Fprintf(os.Stderr, "no files to parse provided\n") | ||||
| 		usage() | ||||
| 	} | ||||
|  | ||||
| 	endianness := "" | ||||
| 	if *b32 { | ||||
| 		endianness = "big-endian" | ||||
| 	} else if *l32 { | ||||
| 		endianness = "little-endian" | ||||
| 	} | ||||
|  | ||||
| 	libc := false | ||||
| 	if goos == "darwin" && strings.Contains(buildTags(), ",go1.12") { | ||||
| 		libc = true | ||||
| 	} | ||||
| 	trampolines := map[string]bool{} | ||||
|  | ||||
| 	text := "" | ||||
| 	for _, path := range flag.Args() { | ||||
| 		file, err := os.Open(path) | ||||
| 		if err != nil { | ||||
| 			fmt.Fprintf(os.Stderr, err.Error()) | ||||
| 			os.Exit(1) | ||||
| 		} | ||||
| 		s := bufio.NewScanner(file) | ||||
| 		for s.Scan() { | ||||
| 			t := s.Text() | ||||
| 			t = strings.TrimSpace(t) | ||||
| 			t = regexp.MustCompile(`\s+`).ReplaceAllString(t, ` `) | ||||
| 			nonblock := regexp.MustCompile(`^\/\/sysnb `).FindStringSubmatch(t) | ||||
| 			if regexp.MustCompile(`^\/\/sys `).FindStringSubmatch(t) == nil && nonblock == nil { | ||||
| 				continue | ||||
| 			} | ||||
|  | ||||
| 			// Line must be of the form | ||||
| 			//	func Open(path string, mode int, perm int) (fd int, errno error) | ||||
| 			// Split into name, in params, out params. | ||||
| 			f := regexp.MustCompile(`^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*((?i)SYS_[A-Z0-9_]+))?$`).FindStringSubmatch(t) | ||||
| 			if f == nil { | ||||
| 				fmt.Fprintf(os.Stderr, "%s:%s\nmalformed //sys declaration\n", path, t) | ||||
| 				os.Exit(1) | ||||
| 			} | ||||
| 			funct, inps, outps, sysname := f[2], f[3], f[4], f[5] | ||||
|  | ||||
| 			// Split argument lists on comma. | ||||
| 			in := parseParamList(inps) | ||||
| 			out := parseParamList(outps) | ||||
|  | ||||
| 			// Try in vain to keep people from editing this file. | ||||
| 			// The theory is that they jump into the middle of the file | ||||
| 			// without reading the header. | ||||
| 			text += "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n" | ||||
|  | ||||
| 			// Go function header. | ||||
| 			outDecl := "" | ||||
| 			if len(out) > 0 { | ||||
| 				outDecl = fmt.Sprintf(" (%s)", strings.Join(out, ", ")) | ||||
| 			} | ||||
| 			text += fmt.Sprintf("func %s(%s)%s {\n", funct, strings.Join(in, ", "), outDecl) | ||||
|  | ||||
| 			// Check if err return available | ||||
| 			errvar := "" | ||||
| 			for _, param := range out { | ||||
| 				p := parseParam(param) | ||||
| 				if p.Type == "error" { | ||||
| 					errvar = p.Name | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			// Prepare arguments to Syscall. | ||||
| 			var args []string | ||||
| 			n := 0 | ||||
| 			for _, param := range in { | ||||
| 				p := parseParam(param) | ||||
| 				if regexp.MustCompile(`^\*`).FindStringSubmatch(p.Type) != nil { | ||||
| 					args = append(args, "uintptr(unsafe.Pointer("+p.Name+"))") | ||||
| 				} else if p.Type == "string" && errvar != "" { | ||||
| 					text += fmt.Sprintf("\tvar _p%d *byte\n", n) | ||||
| 					text += fmt.Sprintf("\t_p%d, %s = BytePtrFromString(%s)\n", n, errvar, p.Name) | ||||
| 					text += fmt.Sprintf("\tif %s != nil {\n\t\treturn\n\t}\n", errvar) | ||||
| 					args = append(args, fmt.Sprintf("uintptr(unsafe.Pointer(_p%d))", n)) | ||||
| 					n++ | ||||
| 				} else if p.Type == "string" { | ||||
| 					fmt.Fprintf(os.Stderr, path+":"+funct+" uses string arguments, but has no error return\n") | ||||
| 					text += fmt.Sprintf("\tvar _p%d *byte\n", n) | ||||
| 					text += fmt.Sprintf("\t_p%d, _ = BytePtrFromString(%s)\n", n, p.Name) | ||||
| 					args = append(args, fmt.Sprintf("uintptr(unsafe.Pointer(_p%d))", n)) | ||||
| 					n++ | ||||
| 				} else if regexp.MustCompile(`^\[\](.*)`).FindStringSubmatch(p.Type) != nil { | ||||
| 					// Convert slice into pointer, length. | ||||
| 					// Have to be careful not to take address of &a[0] if len == 0: | ||||
| 					// pass dummy pointer in that case. | ||||
| 					// Used to pass nil, but some OSes or simulators reject write(fd, nil, 0). | ||||
| 					text += fmt.Sprintf("\tvar _p%d unsafe.Pointer\n", n) | ||||
| 					text += fmt.Sprintf("\tif len(%s) > 0 {\n\t\t_p%d = unsafe.Pointer(&%s[0])\n\t}", p.Name, n, p.Name) | ||||
| 					text += fmt.Sprintf(" else {\n\t\t_p%d = unsafe.Pointer(&_zero)\n\t}\n", n) | ||||
| 					args = append(args, fmt.Sprintf("uintptr(_p%d)", n), fmt.Sprintf("uintptr(len(%s))", p.Name)) | ||||
| 					n++ | ||||
| 				} else if p.Type == "int64" && (*openbsd || *netbsd) { | ||||
| 					args = append(args, "0") | ||||
| 					if endianness == "big-endian" { | ||||
| 						args = append(args, fmt.Sprintf("uintptr(%s>>32)", p.Name), fmt.Sprintf("uintptr(%s)", p.Name)) | ||||
| 					} else if endianness == "little-endian" { | ||||
| 						args = append(args, fmt.Sprintf("uintptr(%s)", p.Name), fmt.Sprintf("uintptr(%s>>32)", p.Name)) | ||||
| 					} else { | ||||
| 						args = append(args, fmt.Sprintf("uintptr(%s)", p.Name)) | ||||
| 					} | ||||
| 				} else if p.Type == "int64" && *dragonfly { | ||||
| 					if regexp.MustCompile(`^(?i)extp(read|write)`).FindStringSubmatch(funct) == nil { | ||||
| 						args = append(args, "0") | ||||
| 					} | ||||
| 					if endianness == "big-endian" { | ||||
| 						args = append(args, fmt.Sprintf("uintptr(%s>>32)", p.Name), fmt.Sprintf("uintptr(%s)", p.Name)) | ||||
| 					} else if endianness == "little-endian" { | ||||
| 						args = append(args, fmt.Sprintf("uintptr(%s)", p.Name), fmt.Sprintf("uintptr(%s>>32)", p.Name)) | ||||
| 					} else { | ||||
| 						args = append(args, fmt.Sprintf("uintptr(%s)", p.Name)) | ||||
| 					} | ||||
| 				} else if (p.Type == "int64" || p.Type == "uint64") && endianness != "" { | ||||
| 					if len(args)%2 == 1 && *arm { | ||||
| 						// arm abi specifies 64-bit argument uses | ||||
| 						// (even, odd) pair | ||||
| 						args = append(args, "0") | ||||
| 					} | ||||
| 					if endianness == "big-endian" { | ||||
| 						args = append(args, fmt.Sprintf("uintptr(%s>>32)", p.Name), fmt.Sprintf("uintptr(%s)", p.Name)) | ||||
| 					} else { | ||||
| 						args = append(args, fmt.Sprintf("uintptr(%s)", p.Name), fmt.Sprintf("uintptr(%s>>32)", p.Name)) | ||||
| 					} | ||||
| 				} else { | ||||
| 					args = append(args, fmt.Sprintf("uintptr(%s)", p.Name)) | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			// Determine which form to use; pad args with zeros. | ||||
| 			asm := "Syscall" | ||||
| 			if nonblock != nil { | ||||
| 				if errvar == "" && goos == "linux" { | ||||
| 					asm = "RawSyscallNoError" | ||||
| 				} else { | ||||
| 					asm = "RawSyscall" | ||||
| 				} | ||||
| 			} else { | ||||
| 				if errvar == "" && goos == "linux" { | ||||
| 					asm = "SyscallNoError" | ||||
| 				} | ||||
| 			} | ||||
| 			if len(args) <= 3 { | ||||
| 				for len(args) < 3 { | ||||
| 					args = append(args, "0") | ||||
| 				} | ||||
| 			} else if len(args) <= 6 { | ||||
| 				asm += "6" | ||||
| 				for len(args) < 6 { | ||||
| 					args = append(args, "0") | ||||
| 				} | ||||
| 			} else if len(args) <= 9 { | ||||
| 				asm += "9" | ||||
| 				for len(args) < 9 { | ||||
| 					args = append(args, "0") | ||||
| 				} | ||||
| 			} else { | ||||
| 				fmt.Fprintf(os.Stderr, "%s:%s too many arguments to system call\n", path, funct) | ||||
| 			} | ||||
|  | ||||
| 			// System call number. | ||||
| 			if sysname == "" { | ||||
| 				sysname = "SYS_" + funct | ||||
| 				sysname = regexp.MustCompile(`([a-z])([A-Z])`).ReplaceAllString(sysname, `${1}_$2`) | ||||
| 				sysname = strings.ToUpper(sysname) | ||||
| 			} | ||||
|  | ||||
| 			var libcFn string | ||||
| 			if libc { | ||||
| 				asm = "syscall_" + strings.ToLower(asm[:1]) + asm[1:] // internal syscall call | ||||
| 				sysname = strings.TrimPrefix(sysname, "SYS_")         // remove SYS_ | ||||
| 				sysname = strings.ToLower(sysname)                    // lowercase | ||||
| 				if sysname == "getdirentries64" { | ||||
| 					// Special case - libSystem name and | ||||
| 					// raw syscall name don't match. | ||||
| 					sysname = "__getdirentries64" | ||||
| 				} | ||||
| 				libcFn = sysname | ||||
| 				sysname = "funcPC(libc_" + sysname + "_trampoline)" | ||||
| 			} | ||||
|  | ||||
| 			// Actual call. | ||||
| 			arglist := strings.Join(args, ", ") | ||||
| 			call := fmt.Sprintf("%s(%s, %s)", asm, sysname, arglist) | ||||
|  | ||||
| 			// Assign return values. | ||||
| 			body := "" | ||||
| 			ret := []string{"_", "_", "_"} | ||||
| 			doErrno := false | ||||
| 			for i := 0; i < len(out); i++ { | ||||
| 				p := parseParam(out[i]) | ||||
| 				reg := "" | ||||
| 				if p.Name == "err" && !*plan9 { | ||||
| 					reg = "e1" | ||||
| 					ret[2] = reg | ||||
| 					doErrno = true | ||||
| 				} else if p.Name == "err" && *plan9 { | ||||
| 					ret[0] = "r0" | ||||
| 					ret[2] = "e1" | ||||
| 					break | ||||
| 				} else { | ||||
| 					reg = fmt.Sprintf("r%d", i) | ||||
| 					ret[i] = reg | ||||
| 				} | ||||
| 				if p.Type == "bool" { | ||||
| 					reg = fmt.Sprintf("%s != 0", reg) | ||||
| 				} | ||||
| 				if p.Type == "int64" && endianness != "" { | ||||
| 					// 64-bit number in r1:r0 or r0:r1. | ||||
| 					if i+2 > len(out) { | ||||
| 						fmt.Fprintf(os.Stderr, "%s:%s not enough registers for int64 return\n", path, funct) | ||||
| 					} | ||||
| 					if endianness == "big-endian" { | ||||
| 						reg = fmt.Sprintf("int64(r%d)<<32 | int64(r%d)", i, i+1) | ||||
| 					} else { | ||||
| 						reg = fmt.Sprintf("int64(r%d)<<32 | int64(r%d)", i+1, i) | ||||
| 					} | ||||
| 					ret[i] = fmt.Sprintf("r%d", i) | ||||
| 					ret[i+1] = fmt.Sprintf("r%d", i+1) | ||||
| 				} | ||||
| 				if reg != "e1" || *plan9 { | ||||
| 					body += fmt.Sprintf("\t%s = %s(%s)\n", p.Name, p.Type, reg) | ||||
| 				} | ||||
| 			} | ||||
| 			if ret[0] == "_" && ret[1] == "_" && ret[2] == "_" { | ||||
| 				text += fmt.Sprintf("\t%s\n", call) | ||||
| 			} else { | ||||
| 				if errvar == "" && goos == "linux" { | ||||
| 					// raw syscall without error on Linux, see golang.org/issue/22924 | ||||
| 					text += fmt.Sprintf("\t%s, %s := %s\n", ret[0], ret[1], call) | ||||
| 				} else { | ||||
| 					text += fmt.Sprintf("\t%s, %s, %s := %s\n", ret[0], ret[1], ret[2], call) | ||||
| 				} | ||||
| 			} | ||||
| 			text += body | ||||
|  | ||||
| 			if *plan9 && ret[2] == "e1" { | ||||
| 				text += "\tif int32(r0) == -1 {\n" | ||||
| 				text += "\t\terr = e1\n" | ||||
| 				text += "\t}\n" | ||||
| 			} else if doErrno { | ||||
| 				text += "\tif e1 != 0 {\n" | ||||
| 				text += "\t\terr = errnoErr(e1)\n" | ||||
| 				text += "\t}\n" | ||||
| 			} | ||||
| 			text += "\treturn\n" | ||||
| 			text += "}\n\n" | ||||
|  | ||||
| 			if libc && !trampolines[libcFn] { | ||||
| 				// some system calls share a trampoline, like read and readlen. | ||||
| 				trampolines[libcFn] = true | ||||
| 				// Declare assembly trampoline. | ||||
| 				text += fmt.Sprintf("func libc_%s_trampoline()\n", libcFn) | ||||
| 				// Assembly trampoline calls the libc_* function, which this magic | ||||
| 				// redirects to use the function from libSystem. | ||||
| 				text += fmt.Sprintf("//go:linkname libc_%s libc_%s\n", libcFn, libcFn) | ||||
| 				text += fmt.Sprintf("//go:cgo_import_dynamic libc_%s %s \"/usr/lib/libSystem.B.dylib\"\n", libcFn, libcFn) | ||||
| 				text += "\n" | ||||
| 			} | ||||
| 		} | ||||
| 		if err := s.Err(); err != nil { | ||||
| 			fmt.Fprintf(os.Stderr, err.Error()) | ||||
| 			os.Exit(1) | ||||
| 		} | ||||
| 		file.Close() | ||||
| 	} | ||||
| 	fmt.Printf(srcTemplate, cmdLine(), buildTags(), text) | ||||
| } | ||||
|  | ||||
| const srcTemplate = `// %s | ||||
| // Code generated by the command above; see README.md. DO NOT EDIT. | ||||
|  | ||||
| // +build %s | ||||
|  | ||||
| package unix | ||||
|  | ||||
| import ( | ||||
| 	"syscall" | ||||
| 	"unsafe" | ||||
| ) | ||||
|  | ||||
| var _ syscall.Errno | ||||
|  | ||||
| %s | ||||
| ` | ||||
							
								
								
									
										404
									
								
								vendor/golang.org/x/sys/unix/mksyscall_aix_ppc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										404
									
								
								vendor/golang.org/x/sys/unix/mksyscall_aix_ppc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,404 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build ignore | ||||
|  | ||||
| /* | ||||
| This program reads a file containing function prototypes | ||||
| (like syscall_aix.go) and generates system call bodies. | ||||
| The prototypes are marked by lines beginning with "//sys" | ||||
| and read like func declarations if //sys is replaced by func, but: | ||||
| 	* The parameter lists must give a name for each argument. | ||||
| 	  This includes return parameters. | ||||
| 	* The parameter lists must give a type for each argument: | ||||
| 	  the (x, y, z int) shorthand is not allowed. | ||||
| 	* If the return parameter is an error number, it must be named err. | ||||
| 	* If go func name needs to be different than its libc name, | ||||
| 	* or the function is not in libc, name could be specified | ||||
| 	* at the end, after "=" sign, like | ||||
| 	  //sys getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (err error) = libsocket.getsockopt | ||||
| */ | ||||
| package main | ||||
|  | ||||
| import ( | ||||
| 	"bufio" | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"os" | ||||
| 	"regexp" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	b32  = flag.Bool("b32", false, "32bit big-endian") | ||||
| 	l32  = flag.Bool("l32", false, "32bit little-endian") | ||||
| 	aix  = flag.Bool("aix", false, "aix") | ||||
| 	tags = flag.String("tags", "", "build tags") | ||||
| ) | ||||
|  | ||||
| // cmdLine returns this programs's commandline arguments | ||||
| func cmdLine() string { | ||||
| 	return "go run mksyscall_aix_ppc.go " + strings.Join(os.Args[1:], " ") | ||||
| } | ||||
|  | ||||
| // buildTags returns build tags | ||||
| func buildTags() string { | ||||
| 	return *tags | ||||
| } | ||||
|  | ||||
| // Param is function parameter | ||||
| type Param struct { | ||||
| 	Name string | ||||
| 	Type string | ||||
| } | ||||
|  | ||||
| // usage prints the program usage | ||||
| func usage() { | ||||
| 	fmt.Fprintf(os.Stderr, "usage: go run mksyscall_aix_ppc.go [-b32 | -l32] [-tags x,y] [file ...]\n") | ||||
| 	os.Exit(1) | ||||
| } | ||||
|  | ||||
| // parseParamList parses parameter list and returns a slice of parameters | ||||
| func parseParamList(list string) []string { | ||||
| 	list = strings.TrimSpace(list) | ||||
| 	if list == "" { | ||||
| 		return []string{} | ||||
| 	} | ||||
| 	return regexp.MustCompile(`\s*,\s*`).Split(list, -1) | ||||
| } | ||||
|  | ||||
| // parseParam splits a parameter into name and type | ||||
| func parseParam(p string) Param { | ||||
| 	ps := regexp.MustCompile(`^(\S*) (\S*)$`).FindStringSubmatch(p) | ||||
| 	if ps == nil { | ||||
| 		fmt.Fprintf(os.Stderr, "malformed parameter: %s\n", p) | ||||
| 		os.Exit(1) | ||||
| 	} | ||||
| 	return Param{ps[1], ps[2]} | ||||
| } | ||||
|  | ||||
| func main() { | ||||
| 	flag.Usage = usage | ||||
| 	flag.Parse() | ||||
| 	if len(flag.Args()) <= 0 { | ||||
| 		fmt.Fprintf(os.Stderr, "no files to parse provided\n") | ||||
| 		usage() | ||||
| 	} | ||||
|  | ||||
| 	endianness := "" | ||||
| 	if *b32 { | ||||
| 		endianness = "big-endian" | ||||
| 	} else if *l32 { | ||||
| 		endianness = "little-endian" | ||||
| 	} | ||||
|  | ||||
| 	pack := "" | ||||
| 	text := "" | ||||
| 	cExtern := "/*\n#include <stdint.h>\n#include <stddef.h>\n" | ||||
| 	for _, path := range flag.Args() { | ||||
| 		file, err := os.Open(path) | ||||
| 		if err != nil { | ||||
| 			fmt.Fprintf(os.Stderr, err.Error()) | ||||
| 			os.Exit(1) | ||||
| 		} | ||||
| 		s := bufio.NewScanner(file) | ||||
| 		for s.Scan() { | ||||
| 			t := s.Text() | ||||
| 			t = strings.TrimSpace(t) | ||||
| 			t = regexp.MustCompile(`\s+`).ReplaceAllString(t, ` `) | ||||
| 			if p := regexp.MustCompile(`^package (\S+)$`).FindStringSubmatch(t); p != nil && pack == "" { | ||||
| 				pack = p[1] | ||||
| 			} | ||||
| 			nonblock := regexp.MustCompile(`^\/\/sysnb `).FindStringSubmatch(t) | ||||
| 			if regexp.MustCompile(`^\/\/sys `).FindStringSubmatch(t) == nil && nonblock == nil { | ||||
| 				continue | ||||
| 			} | ||||
|  | ||||
| 			// Line must be of the form | ||||
| 			//	func Open(path string, mode int, perm int) (fd int, err error) | ||||
| 			// Split into name, in params, out params. | ||||
| 			f := regexp.MustCompile(`^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*(?:(\w*)\.)?(\w*))?$`).FindStringSubmatch(t) | ||||
| 			if f == nil { | ||||
| 				fmt.Fprintf(os.Stderr, "%s:%s\nmalformed //sys declaration\n", path, t) | ||||
| 				os.Exit(1) | ||||
| 			} | ||||
| 			funct, inps, outps, modname, sysname := f[2], f[3], f[4], f[5], f[6] | ||||
|  | ||||
| 			// Split argument lists on comma. | ||||
| 			in := parseParamList(inps) | ||||
| 			out := parseParamList(outps) | ||||
|  | ||||
| 			inps = strings.Join(in, ", ") | ||||
| 			outps = strings.Join(out, ", ") | ||||
|  | ||||
| 			// Try in vain to keep people from editing this file. | ||||
| 			// The theory is that they jump into the middle of the file | ||||
| 			// without reading the header. | ||||
| 			text += "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n" | ||||
|  | ||||
| 			// Check if value return, err return available | ||||
| 			errvar := "" | ||||
| 			retvar := "" | ||||
| 			rettype := "" | ||||
| 			for _, param := range out { | ||||
| 				p := parseParam(param) | ||||
| 				if p.Type == "error" { | ||||
| 					errvar = p.Name | ||||
| 				} else { | ||||
| 					retvar = p.Name | ||||
| 					rettype = p.Type | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			// System call name. | ||||
| 			if sysname == "" { | ||||
| 				sysname = funct | ||||
| 			} | ||||
| 			sysname = regexp.MustCompile(`([a-z])([A-Z])`).ReplaceAllString(sysname, `${1}_$2`) | ||||
| 			sysname = strings.ToLower(sysname) // All libc functions are lowercase. | ||||
|  | ||||
| 			cRettype := "" | ||||
| 			if rettype == "unsafe.Pointer" { | ||||
| 				cRettype = "uintptr_t" | ||||
| 			} else if rettype == "uintptr" { | ||||
| 				cRettype = "uintptr_t" | ||||
| 			} else if regexp.MustCompile(`^_`).FindStringSubmatch(rettype) != nil { | ||||
| 				cRettype = "uintptr_t" | ||||
| 			} else if rettype == "int" { | ||||
| 				cRettype = "int" | ||||
| 			} else if rettype == "int32" { | ||||
| 				cRettype = "int" | ||||
| 			} else if rettype == "int64" { | ||||
| 				cRettype = "long long" | ||||
| 			} else if rettype == "uint32" { | ||||
| 				cRettype = "unsigned int" | ||||
| 			} else if rettype == "uint64" { | ||||
| 				cRettype = "unsigned long long" | ||||
| 			} else { | ||||
| 				cRettype = "int" | ||||
| 			} | ||||
| 			if sysname == "exit" { | ||||
| 				cRettype = "void" | ||||
| 			} | ||||
|  | ||||
| 			// Change p.Types to c | ||||
| 			var cIn []string | ||||
| 			for _, param := range in { | ||||
| 				p := parseParam(param) | ||||
| 				if regexp.MustCompile(`^\*`).FindStringSubmatch(p.Type) != nil { | ||||
| 					cIn = append(cIn, "uintptr_t") | ||||
| 				} else if p.Type == "string" { | ||||
| 					cIn = append(cIn, "uintptr_t") | ||||
| 				} else if regexp.MustCompile(`^\[\](.*)`).FindStringSubmatch(p.Type) != nil { | ||||
| 					cIn = append(cIn, "uintptr_t", "size_t") | ||||
| 				} else if p.Type == "unsafe.Pointer" { | ||||
| 					cIn = append(cIn, "uintptr_t") | ||||
| 				} else if p.Type == "uintptr" { | ||||
| 					cIn = append(cIn, "uintptr_t") | ||||
| 				} else if regexp.MustCompile(`^_`).FindStringSubmatch(p.Type) != nil { | ||||
| 					cIn = append(cIn, "uintptr_t") | ||||
| 				} else if p.Type == "int" { | ||||
| 					cIn = append(cIn, "int") | ||||
| 				} else if p.Type == "int32" { | ||||
| 					cIn = append(cIn, "int") | ||||
| 				} else if p.Type == "int64" { | ||||
| 					cIn = append(cIn, "long long") | ||||
| 				} else if p.Type == "uint32" { | ||||
| 					cIn = append(cIn, "unsigned int") | ||||
| 				} else if p.Type == "uint64" { | ||||
| 					cIn = append(cIn, "unsigned long long") | ||||
| 				} else { | ||||
| 					cIn = append(cIn, "int") | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			if funct != "fcntl" && funct != "FcntlInt" && funct != "readlen" && funct != "writelen" { | ||||
| 				// Imports of system calls from libc | ||||
| 				cExtern += fmt.Sprintf("%s %s", cRettype, sysname) | ||||
| 				cIn := strings.Join(cIn, ", ") | ||||
| 				cExtern += fmt.Sprintf("(%s);\n", cIn) | ||||
| 			} | ||||
|  | ||||
| 			// So file name. | ||||
| 			if *aix { | ||||
| 				if modname == "" { | ||||
| 					modname = "libc.a/shr_64.o" | ||||
| 				} else { | ||||
| 					fmt.Fprintf(os.Stderr, "%s: only syscall using libc are available\n", funct) | ||||
| 					os.Exit(1) | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			strconvfunc := "C.CString" | ||||
|  | ||||
| 			// Go function header. | ||||
| 			if outps != "" { | ||||
| 				outps = fmt.Sprintf(" (%s)", outps) | ||||
| 			} | ||||
| 			if text != "" { | ||||
| 				text += "\n" | ||||
| 			} | ||||
|  | ||||
| 			text += fmt.Sprintf("func %s(%s)%s {\n", funct, strings.Join(in, ", "), outps) | ||||
|  | ||||
| 			// Prepare arguments to Syscall. | ||||
| 			var args []string | ||||
| 			n := 0 | ||||
| 			argN := 0 | ||||
| 			for _, param := range in { | ||||
| 				p := parseParam(param) | ||||
| 				if regexp.MustCompile(`^\*`).FindStringSubmatch(p.Type) != nil { | ||||
| 					args = append(args, "C.uintptr_t(uintptr(unsafe.Pointer("+p.Name+")))") | ||||
| 				} else if p.Type == "string" && errvar != "" { | ||||
| 					text += fmt.Sprintf("\t_p%d := uintptr(unsafe.Pointer(%s(%s)))\n", n, strconvfunc, p.Name) | ||||
| 					args = append(args, fmt.Sprintf("C.uintptr_t(_p%d)", n)) | ||||
| 					n++ | ||||
| 				} else if p.Type == "string" { | ||||
| 					fmt.Fprintf(os.Stderr, path+":"+funct+" uses string arguments, but has no error return\n") | ||||
| 					text += fmt.Sprintf("\t_p%d := uintptr(unsafe.Pointer(%s(%s)))\n", n, strconvfunc, p.Name) | ||||
| 					args = append(args, fmt.Sprintf("C.uintptr_t(_p%d)", n)) | ||||
| 					n++ | ||||
| 				} else if m := regexp.MustCompile(`^\[\](.*)`).FindStringSubmatch(p.Type); m != nil { | ||||
| 					// Convert slice into pointer, length. | ||||
| 					// Have to be careful not to take address of &a[0] if len == 0: | ||||
| 					// pass nil in that case. | ||||
| 					text += fmt.Sprintf("\tvar _p%d *%s\n", n, m[1]) | ||||
| 					text += fmt.Sprintf("\tif len(%s) > 0 {\n\t\t_p%d = &%s[0]\n\t}\n", p.Name, n, p.Name) | ||||
| 					args = append(args, fmt.Sprintf("C.uintptr_t(uintptr(unsafe.Pointer(_p%d)))", n)) | ||||
| 					n++ | ||||
| 					text += fmt.Sprintf("\tvar _p%d int\n", n) | ||||
| 					text += fmt.Sprintf("\t_p%d = len(%s)\n", n, p.Name) | ||||
| 					args = append(args, fmt.Sprintf("C.size_t(_p%d)", n)) | ||||
| 					n++ | ||||
| 				} else if p.Type == "int64" && endianness != "" { | ||||
| 					if endianness == "big-endian" { | ||||
| 						args = append(args, fmt.Sprintf("uintptr(%s>>32)", p.Name), fmt.Sprintf("uintptr(%s)", p.Name)) | ||||
| 					} else { | ||||
| 						args = append(args, fmt.Sprintf("uintptr(%s)", p.Name), fmt.Sprintf("uintptr(%s>>32)", p.Name)) | ||||
| 					} | ||||
| 					n++ | ||||
| 				} else if p.Type == "bool" { | ||||
| 					text += fmt.Sprintf("\tvar _p%d uint32\n", n) | ||||
| 					text += fmt.Sprintf("\tif %s {\n\t\t_p%d = 1\n\t} else {\n\t\t_p%d = 0\n\t}\n", p.Name, n, n) | ||||
| 					args = append(args, fmt.Sprintf("_p%d", n)) | ||||
| 				} else if regexp.MustCompile(`^_`).FindStringSubmatch(p.Type) != nil { | ||||
| 					args = append(args, fmt.Sprintf("C.uintptr_t(uintptr(%s))", p.Name)) | ||||
| 				} else if p.Type == "unsafe.Pointer" { | ||||
| 					args = append(args, fmt.Sprintf("C.uintptr_t(uintptr(%s))", p.Name)) | ||||
| 				} else if p.Type == "int" { | ||||
| 					if (argN == 2) && ((funct == "readlen") || (funct == "writelen")) { | ||||
| 						args = append(args, fmt.Sprintf("C.size_t(%s)", p.Name)) | ||||
| 					} else if argN == 0 && funct == "fcntl" { | ||||
| 						args = append(args, fmt.Sprintf("C.uintptr_t(%s)", p.Name)) | ||||
| 					} else if (argN == 2) && ((funct == "fcntl") || (funct == "FcntlInt")) { | ||||
| 						args = append(args, fmt.Sprintf("C.uintptr_t(%s)", p.Name)) | ||||
| 					} else { | ||||
| 						args = append(args, fmt.Sprintf("C.int(%s)", p.Name)) | ||||
| 					} | ||||
| 				} else if p.Type == "int32" { | ||||
| 					args = append(args, fmt.Sprintf("C.int(%s)", p.Name)) | ||||
| 				} else if p.Type == "int64" { | ||||
| 					args = append(args, fmt.Sprintf("C.longlong(%s)", p.Name)) | ||||
| 				} else if p.Type == "uint32" { | ||||
| 					args = append(args, fmt.Sprintf("C.uint(%s)", p.Name)) | ||||
| 				} else if p.Type == "uint64" { | ||||
| 					args = append(args, fmt.Sprintf("C.ulonglong(%s)", p.Name)) | ||||
| 				} else if p.Type == "uintptr" { | ||||
| 					args = append(args, fmt.Sprintf("C.uintptr_t(%s)", p.Name)) | ||||
| 				} else { | ||||
| 					args = append(args, fmt.Sprintf("C.int(%s)", p.Name)) | ||||
| 				} | ||||
| 				argN++ | ||||
| 			} | ||||
|  | ||||
| 			// Actual call. | ||||
| 			arglist := strings.Join(args, ", ") | ||||
| 			call := "" | ||||
| 			if sysname == "exit" { | ||||
| 				if errvar != "" { | ||||
| 					call += "er :=" | ||||
| 				} else { | ||||
| 					call += "" | ||||
| 				} | ||||
| 			} else if errvar != "" { | ||||
| 				call += "r0,er :=" | ||||
| 			} else if retvar != "" { | ||||
| 				call += "r0,_ :=" | ||||
| 			} else { | ||||
| 				call += "" | ||||
| 			} | ||||
| 			call += fmt.Sprintf("C.%s(%s)", sysname, arglist) | ||||
|  | ||||
| 			// Assign return values. | ||||
| 			body := "" | ||||
| 			for i := 0; i < len(out); i++ { | ||||
| 				p := parseParam(out[i]) | ||||
| 				reg := "" | ||||
| 				if p.Name == "err" { | ||||
| 					reg = "e1" | ||||
| 				} else { | ||||
| 					reg = "r0" | ||||
| 				} | ||||
| 				if reg != "e1" { | ||||
| 					body += fmt.Sprintf("\t%s = %s(%s)\n", p.Name, p.Type, reg) | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			// verify return | ||||
| 			if sysname != "exit" && errvar != "" { | ||||
| 				if regexp.MustCompile(`^uintptr`).FindStringSubmatch(cRettype) != nil { | ||||
| 					body += "\tif (uintptr(r0) ==^uintptr(0) && er != nil) {\n" | ||||
| 					body += fmt.Sprintf("\t\t%s = er\n", errvar) | ||||
| 					body += "\t}\n" | ||||
| 				} else { | ||||
| 					body += "\tif (r0 ==-1 && er != nil) {\n" | ||||
| 					body += fmt.Sprintf("\t\t%s = er\n", errvar) | ||||
| 					body += "\t}\n" | ||||
| 				} | ||||
| 			} else if errvar != "" { | ||||
| 				body += "\tif (er != nil) {\n" | ||||
| 				body += fmt.Sprintf("\t\t%s = er\n", errvar) | ||||
| 				body += "\t}\n" | ||||
| 			} | ||||
|  | ||||
| 			text += fmt.Sprintf("\t%s\n", call) | ||||
| 			text += body | ||||
|  | ||||
| 			text += "\treturn\n" | ||||
| 			text += "}\n" | ||||
| 		} | ||||
| 		if err := s.Err(); err != nil { | ||||
| 			fmt.Fprintf(os.Stderr, err.Error()) | ||||
| 			os.Exit(1) | ||||
| 		} | ||||
| 		file.Close() | ||||
| 	} | ||||
| 	imp := "" | ||||
| 	if pack != "unix" { | ||||
| 		imp = "import \"golang.org/x/sys/unix\"\n" | ||||
|  | ||||
| 	} | ||||
| 	fmt.Printf(srcTemplate, cmdLine(), buildTags(), pack, cExtern, imp, text) | ||||
| } | ||||
|  | ||||
| const srcTemplate = `// %s | ||||
| // Code generated by the command above; see README.md. DO NOT EDIT. | ||||
|  | ||||
| // +build %s | ||||
|  | ||||
| package %s | ||||
|  | ||||
|  | ||||
| %s | ||||
| */ | ||||
| import "C" | ||||
| import ( | ||||
| 	"unsafe" | ||||
| ) | ||||
|  | ||||
|  | ||||
| %s | ||||
|  | ||||
| %s | ||||
| ` | ||||
							
								
								
									
										602
									
								
								vendor/golang.org/x/sys/unix/mksyscall_aix_ppc64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										602
									
								
								vendor/golang.org/x/sys/unix/mksyscall_aix_ppc64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,602 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build ignore | ||||
|  | ||||
| /* | ||||
| This program reads a file containing function prototypes | ||||
| (like syscall_aix.go) and generates system call bodies. | ||||
| The prototypes are marked by lines beginning with "//sys" | ||||
| and read like func declarations if //sys is replaced by func, but: | ||||
| 	* The parameter lists must give a name for each argument. | ||||
| 	  This includes return parameters. | ||||
| 	* The parameter lists must give a type for each argument: | ||||
| 	  the (x, y, z int) shorthand is not allowed. | ||||
| 	* If the return parameter is an error number, it must be named err. | ||||
| 	* If go func name needs to be different than its libc name, | ||||
| 	* or the function is not in libc, name could be specified | ||||
| 	* at the end, after "=" sign, like | ||||
| 	  //sys getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (err error) = libsocket.getsockopt | ||||
|  | ||||
|  | ||||
| This program will generate three files and handle both gc and gccgo implementation: | ||||
|   - zsyscall_aix_ppc64.go: the common part of each implementation (error handler, pointer creation) | ||||
|   - zsyscall_aix_ppc64_gc.go: gc part with //go_cgo_import_dynamic and a call to syscall6 | ||||
|   - zsyscall_aix_ppc64_gccgo.go: gccgo part with C function and conversion to C type. | ||||
|  | ||||
|  The generated code looks like this | ||||
|  | ||||
| zsyscall_aix_ppc64.go | ||||
| func asyscall(...) (n int, err error) { | ||||
| 	 // Pointer Creation | ||||
| 	 r1, e1 := callasyscall(...) | ||||
| 	 // Type Conversion | ||||
| 	 // Error Handler | ||||
| 	 return | ||||
| } | ||||
|  | ||||
| zsyscall_aix_ppc64_gc.go | ||||
| //go:cgo_import_dynamic libc_asyscall asyscall "libc.a/shr_64.o" | ||||
| //go:linkname libc_asyscall libc_asyscall | ||||
| var asyscall syscallFunc | ||||
|  | ||||
| func callasyscall(...) (r1 uintptr, e1 Errno) { | ||||
| 	 r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_asyscall)), "nb_args", ... ) | ||||
| 	 return | ||||
| } | ||||
|  | ||||
| zsyscall_aix_ppc64_ggcgo.go | ||||
|  | ||||
| // int asyscall(...) | ||||
|  | ||||
| import "C" | ||||
|  | ||||
| func callasyscall(...) (r1 uintptr, e1 Errno) { | ||||
| 	 r1 = uintptr(C.asyscall(...)) | ||||
| 	 e1 = syscall.GetErrno() | ||||
| 	 return | ||||
| } | ||||
| */ | ||||
|  | ||||
| package main | ||||
|  | ||||
| import ( | ||||
| 	"bufio" | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"io/ioutil" | ||||
| 	"os" | ||||
| 	"regexp" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	b32  = flag.Bool("b32", false, "32bit big-endian") | ||||
| 	l32  = flag.Bool("l32", false, "32bit little-endian") | ||||
| 	aix  = flag.Bool("aix", false, "aix") | ||||
| 	tags = flag.String("tags", "", "build tags") | ||||
| ) | ||||
|  | ||||
| // cmdLine returns this programs's commandline arguments | ||||
| func cmdLine() string { | ||||
| 	return "go run mksyscall_aix_ppc64.go " + strings.Join(os.Args[1:], " ") | ||||
| } | ||||
|  | ||||
| // buildTags returns build tags | ||||
| func buildTags() string { | ||||
| 	return *tags | ||||
| } | ||||
|  | ||||
| // Param is function parameter | ||||
| type Param struct { | ||||
| 	Name string | ||||
| 	Type string | ||||
| } | ||||
|  | ||||
| // usage prints the program usage | ||||
| func usage() { | ||||
| 	fmt.Fprintf(os.Stderr, "usage: go run mksyscall_aix_ppc64.go [-b32 | -l32] [-tags x,y] [file ...]\n") | ||||
| 	os.Exit(1) | ||||
| } | ||||
|  | ||||
| // parseParamList parses parameter list and returns a slice of parameters | ||||
| func parseParamList(list string) []string { | ||||
| 	list = strings.TrimSpace(list) | ||||
| 	if list == "" { | ||||
| 		return []string{} | ||||
| 	} | ||||
| 	return regexp.MustCompile(`\s*,\s*`).Split(list, -1) | ||||
| } | ||||
|  | ||||
| // parseParam splits a parameter into name and type | ||||
| func parseParam(p string) Param { | ||||
| 	ps := regexp.MustCompile(`^(\S*) (\S*)$`).FindStringSubmatch(p) | ||||
| 	if ps == nil { | ||||
| 		fmt.Fprintf(os.Stderr, "malformed parameter: %s\n", p) | ||||
| 		os.Exit(1) | ||||
| 	} | ||||
| 	return Param{ps[1], ps[2]} | ||||
| } | ||||
|  | ||||
| func main() { | ||||
| 	flag.Usage = usage | ||||
| 	flag.Parse() | ||||
| 	if len(flag.Args()) <= 0 { | ||||
| 		fmt.Fprintf(os.Stderr, "no files to parse provided\n") | ||||
| 		usage() | ||||
| 	} | ||||
|  | ||||
| 	endianness := "" | ||||
| 	if *b32 { | ||||
| 		endianness = "big-endian" | ||||
| 	} else if *l32 { | ||||
| 		endianness = "little-endian" | ||||
| 	} | ||||
|  | ||||
| 	pack := "" | ||||
| 	// GCCGO | ||||
| 	textgccgo := "" | ||||
| 	cExtern := "/*\n#include <stdint.h>\n" | ||||
| 	// GC | ||||
| 	textgc := "" | ||||
| 	dynimports := "" | ||||
| 	linknames := "" | ||||
| 	var vars []string | ||||
| 	// COMMON | ||||
| 	textcommon := "" | ||||
| 	for _, path := range flag.Args() { | ||||
| 		file, err := os.Open(path) | ||||
| 		if err != nil { | ||||
| 			fmt.Fprintf(os.Stderr, err.Error()) | ||||
| 			os.Exit(1) | ||||
| 		} | ||||
| 		s := bufio.NewScanner(file) | ||||
| 		for s.Scan() { | ||||
| 			t := s.Text() | ||||
| 			t = strings.TrimSpace(t) | ||||
| 			t = regexp.MustCompile(`\s+`).ReplaceAllString(t, ` `) | ||||
| 			if p := regexp.MustCompile(`^package (\S+)$`).FindStringSubmatch(t); p != nil && pack == "" { | ||||
| 				pack = p[1] | ||||
| 			} | ||||
| 			nonblock := regexp.MustCompile(`^\/\/sysnb `).FindStringSubmatch(t) | ||||
| 			if regexp.MustCompile(`^\/\/sys `).FindStringSubmatch(t) == nil && nonblock == nil { | ||||
| 				continue | ||||
| 			} | ||||
|  | ||||
| 			// Line must be of the form | ||||
| 			//	func Open(path string, mode int, perm int) (fd int, err error) | ||||
| 			// Split into name, in params, out params. | ||||
| 			f := regexp.MustCompile(`^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*(?:(\w*)\.)?(\w*))?$`).FindStringSubmatch(t) | ||||
| 			if f == nil { | ||||
| 				fmt.Fprintf(os.Stderr, "%s:%s\nmalformed //sys declaration\n", path, t) | ||||
| 				os.Exit(1) | ||||
| 			} | ||||
| 			funct, inps, outps, modname, sysname := f[2], f[3], f[4], f[5], f[6] | ||||
|  | ||||
| 			// Split argument lists on comma. | ||||
| 			in := parseParamList(inps) | ||||
| 			out := parseParamList(outps) | ||||
|  | ||||
| 			inps = strings.Join(in, ", ") | ||||
| 			outps = strings.Join(out, ", ") | ||||
|  | ||||
| 			if sysname == "" { | ||||
| 				sysname = funct | ||||
| 			} | ||||
|  | ||||
| 			onlyCommon := false | ||||
| 			if funct == "readlen" || funct == "writelen" || funct == "FcntlInt" || funct == "FcntlFlock" { | ||||
| 				// This function call another syscall which is already implemented. | ||||
| 				// Therefore, the gc and gccgo part must not be generated. | ||||
| 				onlyCommon = true | ||||
| 			} | ||||
|  | ||||
| 			// Try in vain to keep people from editing this file. | ||||
| 			// The theory is that they jump into the middle of the file | ||||
| 			// without reading the header. | ||||
|  | ||||
| 			textcommon += "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n" | ||||
| 			if !onlyCommon { | ||||
| 				textgccgo += "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n" | ||||
| 				textgc += "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n" | ||||
| 			} | ||||
|  | ||||
| 			// Check if value return, err return available | ||||
| 			errvar := "" | ||||
| 			rettype := "" | ||||
| 			for _, param := range out { | ||||
| 				p := parseParam(param) | ||||
| 				if p.Type == "error" { | ||||
| 					errvar = p.Name | ||||
| 				} else { | ||||
| 					rettype = p.Type | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			sysname = regexp.MustCompile(`([a-z])([A-Z])`).ReplaceAllString(sysname, `${1}_$2`) | ||||
| 			sysname = strings.ToLower(sysname) // All libc functions are lowercase. | ||||
|  | ||||
| 			// GCCGO Prototype return type | ||||
| 			cRettype := "" | ||||
| 			if rettype == "unsafe.Pointer" { | ||||
| 				cRettype = "uintptr_t" | ||||
| 			} else if rettype == "uintptr" { | ||||
| 				cRettype = "uintptr_t" | ||||
| 			} else if regexp.MustCompile(`^_`).FindStringSubmatch(rettype) != nil { | ||||
| 				cRettype = "uintptr_t" | ||||
| 			} else if rettype == "int" { | ||||
| 				cRettype = "int" | ||||
| 			} else if rettype == "int32" { | ||||
| 				cRettype = "int" | ||||
| 			} else if rettype == "int64" { | ||||
| 				cRettype = "long long" | ||||
| 			} else if rettype == "uint32" { | ||||
| 				cRettype = "unsigned int" | ||||
| 			} else if rettype == "uint64" { | ||||
| 				cRettype = "unsigned long long" | ||||
| 			} else { | ||||
| 				cRettype = "int" | ||||
| 			} | ||||
| 			if sysname == "exit" { | ||||
| 				cRettype = "void" | ||||
| 			} | ||||
|  | ||||
| 			// GCCGO Prototype arguments type | ||||
| 			var cIn []string | ||||
| 			for i, param := range in { | ||||
| 				p := parseParam(param) | ||||
| 				if regexp.MustCompile(`^\*`).FindStringSubmatch(p.Type) != nil { | ||||
| 					cIn = append(cIn, "uintptr_t") | ||||
| 				} else if p.Type == "string" { | ||||
| 					cIn = append(cIn, "uintptr_t") | ||||
| 				} else if regexp.MustCompile(`^\[\](.*)`).FindStringSubmatch(p.Type) != nil { | ||||
| 					cIn = append(cIn, "uintptr_t", "size_t") | ||||
| 				} else if p.Type == "unsafe.Pointer" { | ||||
| 					cIn = append(cIn, "uintptr_t") | ||||
| 				} else if p.Type == "uintptr" { | ||||
| 					cIn = append(cIn, "uintptr_t") | ||||
| 				} else if regexp.MustCompile(`^_`).FindStringSubmatch(p.Type) != nil { | ||||
| 					cIn = append(cIn, "uintptr_t") | ||||
| 				} else if p.Type == "int" { | ||||
| 					if (i == 0 || i == 2) && funct == "fcntl" { | ||||
| 						// These fcntl arguments needs to be uintptr to be able to call FcntlInt and FcntlFlock | ||||
| 						cIn = append(cIn, "uintptr_t") | ||||
| 					} else { | ||||
| 						cIn = append(cIn, "int") | ||||
| 					} | ||||
|  | ||||
| 				} else if p.Type == "int32" { | ||||
| 					cIn = append(cIn, "int") | ||||
| 				} else if p.Type == "int64" { | ||||
| 					cIn = append(cIn, "long long") | ||||
| 				} else if p.Type == "uint32" { | ||||
| 					cIn = append(cIn, "unsigned int") | ||||
| 				} else if p.Type == "uint64" { | ||||
| 					cIn = append(cIn, "unsigned long long") | ||||
| 				} else { | ||||
| 					cIn = append(cIn, "int") | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			if !onlyCommon { | ||||
| 				// GCCGO Prototype Generation | ||||
| 				// Imports of system calls from libc | ||||
| 				cExtern += fmt.Sprintf("%s %s", cRettype, sysname) | ||||
| 				cIn := strings.Join(cIn, ", ") | ||||
| 				cExtern += fmt.Sprintf("(%s);\n", cIn) | ||||
| 			} | ||||
| 			// GC Library name | ||||
| 			if modname == "" { | ||||
| 				modname = "libc.a/shr_64.o" | ||||
| 			} else { | ||||
| 				fmt.Fprintf(os.Stderr, "%s: only syscall using libc are available\n", funct) | ||||
| 				os.Exit(1) | ||||
| 			} | ||||
| 			sysvarname := fmt.Sprintf("libc_%s", sysname) | ||||
|  | ||||
| 			if !onlyCommon { | ||||
| 				// GC Runtime import of function to allow cross-platform builds. | ||||
| 				dynimports += fmt.Sprintf("//go:cgo_import_dynamic %s %s \"%s\"\n", sysvarname, sysname, modname) | ||||
| 				// GC Link symbol to proc address variable. | ||||
| 				linknames += fmt.Sprintf("//go:linkname %s %s\n", sysvarname, sysvarname) | ||||
| 				// GC Library proc address variable. | ||||
| 				vars = append(vars, sysvarname) | ||||
| 			} | ||||
|  | ||||
| 			strconvfunc := "BytePtrFromString" | ||||
| 			strconvtype := "*byte" | ||||
|  | ||||
| 			// Go function header. | ||||
| 			if outps != "" { | ||||
| 				outps = fmt.Sprintf(" (%s)", outps) | ||||
| 			} | ||||
| 			if textcommon != "" { | ||||
| 				textcommon += "\n" | ||||
| 			} | ||||
|  | ||||
| 			textcommon += fmt.Sprintf("func %s(%s)%s {\n", funct, strings.Join(in, ", "), outps) | ||||
|  | ||||
| 			// Prepare arguments tocall. | ||||
| 			var argscommon []string // Arguments in the common part | ||||
| 			var argscall []string   // Arguments for call prototype | ||||
| 			var argsgc []string     // Arguments for gc call (with syscall6) | ||||
| 			var argsgccgo []string  // Arguments for gccgo call (with C.name_of_syscall) | ||||
| 			n := 0 | ||||
| 			argN := 0 | ||||
| 			for _, param := range in { | ||||
| 				p := parseParam(param) | ||||
| 				if regexp.MustCompile(`^\*`).FindStringSubmatch(p.Type) != nil { | ||||
| 					argscommon = append(argscommon, fmt.Sprintf("uintptr(unsafe.Pointer(%s))", p.Name)) | ||||
| 					argscall = append(argscall, fmt.Sprintf("%s uintptr", p.Name)) | ||||
| 					argsgc = append(argsgc, p.Name) | ||||
| 					argsgccgo = append(argsgccgo, fmt.Sprintf("C.uintptr_t(%s)", p.Name)) | ||||
| 				} else if p.Type == "string" && errvar != "" { | ||||
| 					textcommon += fmt.Sprintf("\tvar _p%d %s\n", n, strconvtype) | ||||
| 					textcommon += fmt.Sprintf("\t_p%d, %s = %s(%s)\n", n, errvar, strconvfunc, p.Name) | ||||
| 					textcommon += fmt.Sprintf("\tif %s != nil {\n\t\treturn\n\t}\n", errvar) | ||||
|  | ||||
| 					argscommon = append(argscommon, fmt.Sprintf("uintptr(unsafe.Pointer(_p%d))", n)) | ||||
| 					argscall = append(argscall, fmt.Sprintf("_p%d uintptr ", n)) | ||||
| 					argsgc = append(argsgc, fmt.Sprintf("_p%d", n)) | ||||
| 					argsgccgo = append(argsgccgo, fmt.Sprintf("C.uintptr_t(_p%d)", n)) | ||||
| 					n++ | ||||
| 				} else if p.Type == "string" { | ||||
| 					fmt.Fprintf(os.Stderr, path+":"+funct+" uses string arguments, but has no error return\n") | ||||
| 					textcommon += fmt.Sprintf("\tvar _p%d %s\n", n, strconvtype) | ||||
| 					textcommon += fmt.Sprintf("\t_p%d, %s = %s(%s)\n", n, errvar, strconvfunc, p.Name) | ||||
| 					textcommon += fmt.Sprintf("\tif %s != nil {\n\t\treturn\n\t}\n", errvar) | ||||
|  | ||||
| 					argscommon = append(argscommon, fmt.Sprintf("uintptr(unsafe.Pointer(_p%d))", n)) | ||||
| 					argscall = append(argscall, fmt.Sprintf("_p%d uintptr", n)) | ||||
| 					argsgc = append(argsgc, fmt.Sprintf("_p%d", n)) | ||||
| 					argsgccgo = append(argsgccgo, fmt.Sprintf("C.uintptr_t(_p%d)", n)) | ||||
| 					n++ | ||||
| 				} else if m := regexp.MustCompile(`^\[\](.*)`).FindStringSubmatch(p.Type); m != nil { | ||||
| 					// Convert slice into pointer, length. | ||||
| 					// Have to be careful not to take address of &a[0] if len == 0: | ||||
| 					// pass nil in that case. | ||||
| 					textcommon += fmt.Sprintf("\tvar _p%d *%s\n", n, m[1]) | ||||
| 					textcommon += fmt.Sprintf("\tif len(%s) > 0 {\n\t\t_p%d = &%s[0]\n\t}\n", p.Name, n, p.Name) | ||||
| 					argscommon = append(argscommon, fmt.Sprintf("uintptr(unsafe.Pointer(_p%d))", n), fmt.Sprintf("len(%s)", p.Name)) | ||||
| 					argscall = append(argscall, fmt.Sprintf("_p%d uintptr", n), fmt.Sprintf("_lenp%d int", n)) | ||||
| 					argsgc = append(argsgc, fmt.Sprintf("_p%d", n), fmt.Sprintf("uintptr(_lenp%d)", n)) | ||||
| 					argsgccgo = append(argsgccgo, fmt.Sprintf("C.uintptr_t(_p%d)", n), fmt.Sprintf("C.size_t(_lenp%d)", n)) | ||||
| 					n++ | ||||
| 				} else if p.Type == "int64" && endianness != "" { | ||||
| 					fmt.Fprintf(os.Stderr, path+":"+funct+" uses int64 with 32 bits mode. Case not yet implemented\n") | ||||
| 				} else if p.Type == "bool" { | ||||
| 					fmt.Fprintf(os.Stderr, path+":"+funct+" uses bool. Case not yet implemented\n") | ||||
| 				} else if regexp.MustCompile(`^_`).FindStringSubmatch(p.Type) != nil || p.Type == "unsafe.Pointer" { | ||||
| 					argscommon = append(argscommon, fmt.Sprintf("uintptr(%s)", p.Name)) | ||||
| 					argscall = append(argscall, fmt.Sprintf("%s uintptr", p.Name)) | ||||
| 					argsgc = append(argsgc, p.Name) | ||||
| 					argsgccgo = append(argsgccgo, fmt.Sprintf("C.uintptr_t(%s)", p.Name)) | ||||
| 				} else if p.Type == "int" { | ||||
| 					if (argN == 0 || argN == 2) && ((funct == "fcntl") || (funct == "FcntlInt") || (funct == "FcntlFlock")) { | ||||
| 						// These fcntl arguments need to be uintptr to be able to call FcntlInt and FcntlFlock | ||||
| 						argscommon = append(argscommon, fmt.Sprintf("uintptr(%s)", p.Name)) | ||||
| 						argscall = append(argscall, fmt.Sprintf("%s uintptr", p.Name)) | ||||
| 						argsgc = append(argsgc, p.Name) | ||||
| 						argsgccgo = append(argsgccgo, fmt.Sprintf("C.uintptr_t(%s)", p.Name)) | ||||
|  | ||||
| 					} else { | ||||
| 						argscommon = append(argscommon, p.Name) | ||||
| 						argscall = append(argscall, fmt.Sprintf("%s int", p.Name)) | ||||
| 						argsgc = append(argsgc, fmt.Sprintf("uintptr(%s)", p.Name)) | ||||
| 						argsgccgo = append(argsgccgo, fmt.Sprintf("C.int(%s)", p.Name)) | ||||
| 					} | ||||
| 				} else if p.Type == "int32" { | ||||
| 					argscommon = append(argscommon, p.Name) | ||||
| 					argscall = append(argscall, fmt.Sprintf("%s int32", p.Name)) | ||||
| 					argsgc = append(argsgc, fmt.Sprintf("uintptr(%s)", p.Name)) | ||||
| 					argsgccgo = append(argsgccgo, fmt.Sprintf("C.int(%s)", p.Name)) | ||||
| 				} else if p.Type == "int64" { | ||||
| 					argscommon = append(argscommon, p.Name) | ||||
| 					argscall = append(argscall, fmt.Sprintf("%s int64", p.Name)) | ||||
| 					argsgc = append(argsgc, fmt.Sprintf("uintptr(%s)", p.Name)) | ||||
| 					argsgccgo = append(argsgccgo, fmt.Sprintf("C.longlong(%s)", p.Name)) | ||||
| 				} else if p.Type == "uint32" { | ||||
| 					argscommon = append(argscommon, p.Name) | ||||
| 					argscall = append(argscall, fmt.Sprintf("%s uint32", p.Name)) | ||||
| 					argsgc = append(argsgc, fmt.Sprintf("uintptr(%s)", p.Name)) | ||||
| 					argsgccgo = append(argsgccgo, fmt.Sprintf("C.uint(%s)", p.Name)) | ||||
| 				} else if p.Type == "uint64" { | ||||
| 					argscommon = append(argscommon, p.Name) | ||||
| 					argscall = append(argscall, fmt.Sprintf("%s uint64", p.Name)) | ||||
| 					argsgc = append(argsgc, fmt.Sprintf("uintptr(%s)", p.Name)) | ||||
| 					argsgccgo = append(argsgccgo, fmt.Sprintf("C.ulonglong(%s)", p.Name)) | ||||
| 				} else if p.Type == "uintptr" { | ||||
| 					argscommon = append(argscommon, p.Name) | ||||
| 					argscall = append(argscall, fmt.Sprintf("%s uintptr", p.Name)) | ||||
| 					argsgc = append(argsgc, p.Name) | ||||
| 					argsgccgo = append(argsgccgo, fmt.Sprintf("C.uintptr_t(%s)", p.Name)) | ||||
| 				} else { | ||||
| 					argscommon = append(argscommon, fmt.Sprintf("int(%s)", p.Name)) | ||||
| 					argscall = append(argscall, fmt.Sprintf("%s int", p.Name)) | ||||
| 					argsgc = append(argsgc, fmt.Sprintf("uintptr(%s)", p.Name)) | ||||
| 					argsgccgo = append(argsgccgo, fmt.Sprintf("C.int(%s)", p.Name)) | ||||
| 				} | ||||
| 				argN++ | ||||
| 			} | ||||
| 			nargs := len(argsgc) | ||||
|  | ||||
| 			// COMMON function generation | ||||
| 			argscommonlist := strings.Join(argscommon, ", ") | ||||
| 			callcommon := fmt.Sprintf("call%s(%s)", sysname, argscommonlist) | ||||
| 			ret := []string{"_", "_"} | ||||
| 			body := "" | ||||
| 			doErrno := false | ||||
| 			for i := 0; i < len(out); i++ { | ||||
| 				p := parseParam(out[i]) | ||||
| 				reg := "" | ||||
| 				if p.Name == "err" { | ||||
| 					reg = "e1" | ||||
| 					ret[1] = reg | ||||
| 					doErrno = true | ||||
| 				} else { | ||||
| 					reg = "r0" | ||||
| 					ret[0] = reg | ||||
| 				} | ||||
| 				if p.Type == "bool" { | ||||
| 					reg = fmt.Sprintf("%s != 0", reg) | ||||
| 				} | ||||
| 				if reg != "e1" { | ||||
| 					body += fmt.Sprintf("\t%s = %s(%s)\n", p.Name, p.Type, reg) | ||||
| 				} | ||||
| 			} | ||||
| 			if ret[0] == "_" && ret[1] == "_" { | ||||
| 				textcommon += fmt.Sprintf("\t%s\n", callcommon) | ||||
| 			} else { | ||||
| 				textcommon += fmt.Sprintf("\t%s, %s := %s\n", ret[0], ret[1], callcommon) | ||||
| 			} | ||||
| 			textcommon += body | ||||
|  | ||||
| 			if doErrno { | ||||
| 				textcommon += "\tif e1 != 0 {\n" | ||||
| 				textcommon += "\t\terr = errnoErr(e1)\n" | ||||
| 				textcommon += "\t}\n" | ||||
| 			} | ||||
| 			textcommon += "\treturn\n" | ||||
| 			textcommon += "}\n" | ||||
|  | ||||
| 			if onlyCommon { | ||||
| 				continue | ||||
| 			} | ||||
|  | ||||
| 			// CALL Prototype | ||||
| 			callProto := fmt.Sprintf("func call%s(%s) (r1 uintptr, e1 Errno) {\n", sysname, strings.Join(argscall, ", ")) | ||||
|  | ||||
| 			// GC function generation | ||||
| 			asm := "syscall6" | ||||
| 			if nonblock != nil { | ||||
| 				asm = "rawSyscall6" | ||||
| 			} | ||||
|  | ||||
| 			if len(argsgc) <= 6 { | ||||
| 				for len(argsgc) < 6 { | ||||
| 					argsgc = append(argsgc, "0") | ||||
| 				} | ||||
| 			} else { | ||||
| 				fmt.Fprintf(os.Stderr, "%s: too many arguments to system call", funct) | ||||
| 				os.Exit(1) | ||||
| 			} | ||||
| 			argsgclist := strings.Join(argsgc, ", ") | ||||
| 			callgc := fmt.Sprintf("%s(uintptr(unsafe.Pointer(&%s)), %d, %s)", asm, sysvarname, nargs, argsgclist) | ||||
|  | ||||
| 			textgc += callProto | ||||
| 			textgc += fmt.Sprintf("\tr1, _, e1 = %s\n", callgc) | ||||
| 			textgc += "\treturn\n}\n" | ||||
|  | ||||
| 			// GCCGO function generation | ||||
| 			argsgccgolist := strings.Join(argsgccgo, ", ") | ||||
| 			callgccgo := fmt.Sprintf("C.%s(%s)", sysname, argsgccgolist) | ||||
| 			textgccgo += callProto | ||||
| 			textgccgo += fmt.Sprintf("\tr1 = uintptr(%s)\n", callgccgo) | ||||
| 			textgccgo += "\te1 = syscall.GetErrno()\n" | ||||
| 			textgccgo += "\treturn\n}\n" | ||||
| 		} | ||||
| 		if err := s.Err(); err != nil { | ||||
| 			fmt.Fprintf(os.Stderr, err.Error()) | ||||
| 			os.Exit(1) | ||||
| 		} | ||||
| 		file.Close() | ||||
| 	} | ||||
| 	imp := "" | ||||
| 	if pack != "unix" { | ||||
| 		imp = "import \"golang.org/x/sys/unix\"\n" | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	// Print zsyscall_aix_ppc64.go | ||||
| 	err := ioutil.WriteFile("zsyscall_aix_ppc64.go", | ||||
| 		[]byte(fmt.Sprintf(srcTemplate1, cmdLine(), buildTags(), pack, imp, textcommon)), | ||||
| 		0644) | ||||
| 	if err != nil { | ||||
| 		fmt.Fprintf(os.Stderr, err.Error()) | ||||
| 		os.Exit(1) | ||||
| 	} | ||||
|  | ||||
| 	// Print zsyscall_aix_ppc64_gc.go | ||||
| 	vardecls := "\t" + strings.Join(vars, ",\n\t") | ||||
| 	vardecls += " syscallFunc" | ||||
| 	err = ioutil.WriteFile("zsyscall_aix_ppc64_gc.go", | ||||
| 		[]byte(fmt.Sprintf(srcTemplate2, cmdLine(), buildTags(), pack, imp, dynimports, linknames, vardecls, textgc)), | ||||
| 		0644) | ||||
| 	if err != nil { | ||||
| 		fmt.Fprintf(os.Stderr, err.Error()) | ||||
| 		os.Exit(1) | ||||
| 	} | ||||
|  | ||||
| 	// Print zsyscall_aix_ppc64_gccgo.go | ||||
| 	err = ioutil.WriteFile("zsyscall_aix_ppc64_gccgo.go", | ||||
| 		[]byte(fmt.Sprintf(srcTemplate3, cmdLine(), buildTags(), pack, cExtern, imp, textgccgo)), | ||||
| 		0644) | ||||
| 	if err != nil { | ||||
| 		fmt.Fprintf(os.Stderr, err.Error()) | ||||
| 		os.Exit(1) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| const srcTemplate1 = `// %s | ||||
| // Code generated by the command above; see README.md. DO NOT EDIT. | ||||
|  | ||||
| // +build %s | ||||
|  | ||||
| package %s | ||||
|  | ||||
| import ( | ||||
| 	"unsafe" | ||||
| ) | ||||
|  | ||||
|  | ||||
| %s | ||||
|  | ||||
| %s | ||||
| ` | ||||
| const srcTemplate2 = `// %s | ||||
| // Code generated by the command above; see README.md. DO NOT EDIT. | ||||
|  | ||||
| // +build %s | ||||
| // +build !gccgo | ||||
|  | ||||
| package %s | ||||
|  | ||||
| import ( | ||||
| 	"unsafe" | ||||
| ) | ||||
| %s | ||||
| %s | ||||
| %s | ||||
| type syscallFunc uintptr | ||||
|  | ||||
| var ( | ||||
| %s | ||||
| ) | ||||
|  | ||||
| // Implemented in runtime/syscall_aix.go. | ||||
| func rawSyscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) | ||||
| func syscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) | ||||
|  | ||||
| %s | ||||
| ` | ||||
| const srcTemplate3 = `// %s | ||||
| // Code generated by the command above; see README.md. DO NOT EDIT. | ||||
|  | ||||
| // +build %s | ||||
| // +build gccgo | ||||
|  | ||||
| package %s | ||||
|  | ||||
| %s | ||||
| */ | ||||
| import "C" | ||||
| import ( | ||||
| 	"syscall" | ||||
| ) | ||||
|  | ||||
|  | ||||
| %s | ||||
|  | ||||
| %s | ||||
| ` | ||||
							
								
								
									
										335
									
								
								vendor/golang.org/x/sys/unix/mksyscall_solaris.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										335
									
								
								vendor/golang.org/x/sys/unix/mksyscall_solaris.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,335 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build ignore | ||||
|  | ||||
| /* | ||||
|  This program reads a file containing function prototypes | ||||
|  (like syscall_solaris.go) and generates system call bodies. | ||||
|  The prototypes are marked by lines beginning with "//sys" | ||||
|  and read like func declarations if //sys is replaced by func, but: | ||||
| 	* The parameter lists must give a name for each argument. | ||||
| 	  This includes return parameters. | ||||
| 	* The parameter lists must give a type for each argument: | ||||
| 	  the (x, y, z int) shorthand is not allowed. | ||||
| 	* If the return parameter is an error number, it must be named err. | ||||
| 	* If go func name needs to be different than its libc name, | ||||
| 	* or the function is not in libc, name could be specified | ||||
| 	* at the end, after "=" sign, like | ||||
| 	  //sys getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (err error) = libsocket.getsockopt | ||||
| */ | ||||
|  | ||||
| package main | ||||
|  | ||||
| import ( | ||||
| 	"bufio" | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"os" | ||||
| 	"regexp" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	b32  = flag.Bool("b32", false, "32bit big-endian") | ||||
| 	l32  = flag.Bool("l32", false, "32bit little-endian") | ||||
| 	tags = flag.String("tags", "", "build tags") | ||||
| ) | ||||
|  | ||||
| // cmdLine returns this programs's commandline arguments | ||||
| func cmdLine() string { | ||||
| 	return "go run mksyscall_solaris.go " + strings.Join(os.Args[1:], " ") | ||||
| } | ||||
|  | ||||
| // buildTags returns build tags | ||||
| func buildTags() string { | ||||
| 	return *tags | ||||
| } | ||||
|  | ||||
| // Param is function parameter | ||||
| type Param struct { | ||||
| 	Name string | ||||
| 	Type string | ||||
| } | ||||
|  | ||||
| // usage prints the program usage | ||||
| func usage() { | ||||
| 	fmt.Fprintf(os.Stderr, "usage: go run mksyscall_solaris.go [-b32 | -l32] [-tags x,y] [file ...]\n") | ||||
| 	os.Exit(1) | ||||
| } | ||||
|  | ||||
| // parseParamList parses parameter list and returns a slice of parameters | ||||
| func parseParamList(list string) []string { | ||||
| 	list = strings.TrimSpace(list) | ||||
| 	if list == "" { | ||||
| 		return []string{} | ||||
| 	} | ||||
| 	return regexp.MustCompile(`\s*,\s*`).Split(list, -1) | ||||
| } | ||||
|  | ||||
| // parseParam splits a parameter into name and type | ||||
| func parseParam(p string) Param { | ||||
| 	ps := regexp.MustCompile(`^(\S*) (\S*)$`).FindStringSubmatch(p) | ||||
| 	if ps == nil { | ||||
| 		fmt.Fprintf(os.Stderr, "malformed parameter: %s\n", p) | ||||
| 		os.Exit(1) | ||||
| 	} | ||||
| 	return Param{ps[1], ps[2]} | ||||
| } | ||||
|  | ||||
| func main() { | ||||
| 	flag.Usage = usage | ||||
| 	flag.Parse() | ||||
| 	if len(flag.Args()) <= 0 { | ||||
| 		fmt.Fprintf(os.Stderr, "no files to parse provided\n") | ||||
| 		usage() | ||||
| 	} | ||||
|  | ||||
| 	endianness := "" | ||||
| 	if *b32 { | ||||
| 		endianness = "big-endian" | ||||
| 	} else if *l32 { | ||||
| 		endianness = "little-endian" | ||||
| 	} | ||||
|  | ||||
| 	pack := "" | ||||
| 	text := "" | ||||
| 	dynimports := "" | ||||
| 	linknames := "" | ||||
| 	var vars []string | ||||
| 	for _, path := range flag.Args() { | ||||
| 		file, err := os.Open(path) | ||||
| 		if err != nil { | ||||
| 			fmt.Fprintf(os.Stderr, err.Error()) | ||||
| 			os.Exit(1) | ||||
| 		} | ||||
| 		s := bufio.NewScanner(file) | ||||
| 		for s.Scan() { | ||||
| 			t := s.Text() | ||||
| 			t = strings.TrimSpace(t) | ||||
| 			t = regexp.MustCompile(`\s+`).ReplaceAllString(t, ` `) | ||||
| 			if p := regexp.MustCompile(`^package (\S+)$`).FindStringSubmatch(t); p != nil && pack == "" { | ||||
| 				pack = p[1] | ||||
| 			} | ||||
| 			nonblock := regexp.MustCompile(`^\/\/sysnb `).FindStringSubmatch(t) | ||||
| 			if regexp.MustCompile(`^\/\/sys `).FindStringSubmatch(t) == nil && nonblock == nil { | ||||
| 				continue | ||||
| 			} | ||||
|  | ||||
| 			// Line must be of the form | ||||
| 			//	func Open(path string, mode int, perm int) (fd int, err error) | ||||
| 			// Split into name, in params, out params. | ||||
| 			f := regexp.MustCompile(`^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*(?:(\w*)\.)?(\w*))?$`).FindStringSubmatch(t) | ||||
| 			if f == nil { | ||||
| 				fmt.Fprintf(os.Stderr, "%s:%s\nmalformed //sys declaration\n", path, t) | ||||
| 				os.Exit(1) | ||||
| 			} | ||||
| 			funct, inps, outps, modname, sysname := f[2], f[3], f[4], f[5], f[6] | ||||
|  | ||||
| 			// Split argument lists on comma. | ||||
| 			in := parseParamList(inps) | ||||
| 			out := parseParamList(outps) | ||||
|  | ||||
| 			inps = strings.Join(in, ", ") | ||||
| 			outps = strings.Join(out, ", ") | ||||
|  | ||||
| 			// Try in vain to keep people from editing this file. | ||||
| 			// The theory is that they jump into the middle of the file | ||||
| 			// without reading the header. | ||||
| 			text += "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n" | ||||
|  | ||||
| 			// So file name. | ||||
| 			if modname == "" { | ||||
| 				modname = "libc" | ||||
| 			} | ||||
|  | ||||
| 			// System call name. | ||||
| 			if sysname == "" { | ||||
| 				sysname = funct | ||||
| 			} | ||||
|  | ||||
| 			// System call pointer variable name. | ||||
| 			sysvarname := fmt.Sprintf("proc%s", sysname) | ||||
|  | ||||
| 			strconvfunc := "BytePtrFromString" | ||||
| 			strconvtype := "*byte" | ||||
|  | ||||
| 			sysname = strings.ToLower(sysname) // All libc functions are lowercase. | ||||
|  | ||||
| 			// Runtime import of function to allow cross-platform builds. | ||||
| 			dynimports += fmt.Sprintf("//go:cgo_import_dynamic libc_%s %s \"%s.so\"\n", sysname, sysname, modname) | ||||
| 			// Link symbol to proc address variable. | ||||
| 			linknames += fmt.Sprintf("//go:linkname %s libc_%s\n", sysvarname, sysname) | ||||
| 			// Library proc address variable. | ||||
| 			vars = append(vars, sysvarname) | ||||
|  | ||||
| 			// Go function header. | ||||
| 			outlist := strings.Join(out, ", ") | ||||
| 			if outlist != "" { | ||||
| 				outlist = fmt.Sprintf(" (%s)", outlist) | ||||
| 			} | ||||
| 			if text != "" { | ||||
| 				text += "\n" | ||||
| 			} | ||||
| 			text += fmt.Sprintf("func %s(%s)%s {\n", funct, strings.Join(in, ", "), outlist) | ||||
|  | ||||
| 			// Check if err return available | ||||
| 			errvar := "" | ||||
| 			for _, param := range out { | ||||
| 				p := parseParam(param) | ||||
| 				if p.Type == "error" { | ||||
| 					errvar = p.Name | ||||
| 					continue | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			// Prepare arguments to Syscall. | ||||
| 			var args []string | ||||
| 			n := 0 | ||||
| 			for _, param := range in { | ||||
| 				p := parseParam(param) | ||||
| 				if regexp.MustCompile(`^\*`).FindStringSubmatch(p.Type) != nil { | ||||
| 					args = append(args, "uintptr(unsafe.Pointer("+p.Name+"))") | ||||
| 				} else if p.Type == "string" && errvar != "" { | ||||
| 					text += fmt.Sprintf("\tvar _p%d %s\n", n, strconvtype) | ||||
| 					text += fmt.Sprintf("\t_p%d, %s = %s(%s)\n", n, errvar, strconvfunc, p.Name) | ||||
| 					text += fmt.Sprintf("\tif %s != nil {\n\t\treturn\n\t}\n", errvar) | ||||
| 					args = append(args, fmt.Sprintf("uintptr(unsafe.Pointer(_p%d))", n)) | ||||
| 					n++ | ||||
| 				} else if p.Type == "string" { | ||||
| 					fmt.Fprintf(os.Stderr, path+":"+funct+" uses string arguments, but has no error return\n") | ||||
| 					text += fmt.Sprintf("\tvar _p%d %s\n", n, strconvtype) | ||||
| 					text += fmt.Sprintf("\t_p%d, _ = %s(%s)\n", n, strconvfunc, p.Name) | ||||
| 					args = append(args, fmt.Sprintf("uintptr(unsafe.Pointer(_p%d))", n)) | ||||
| 					n++ | ||||
| 				} else if s := regexp.MustCompile(`^\[\](.*)`).FindStringSubmatch(p.Type); s != nil { | ||||
| 					// Convert slice into pointer, length. | ||||
| 					// Have to be careful not to take address of &a[0] if len == 0: | ||||
| 					// pass nil in that case. | ||||
| 					text += fmt.Sprintf("\tvar _p%d *%s\n", n, s[1]) | ||||
| 					text += fmt.Sprintf("\tif len(%s) > 0 {\n\t\t_p%d = &%s[0]\n\t}\n", p.Name, n, p.Name) | ||||
| 					args = append(args, fmt.Sprintf("uintptr(unsafe.Pointer(_p%d))", n), fmt.Sprintf("uintptr(len(%s))", p.Name)) | ||||
| 					n++ | ||||
| 				} else if p.Type == "int64" && endianness != "" { | ||||
| 					if endianness == "big-endian" { | ||||
| 						args = append(args, fmt.Sprintf("uintptr(%s>>32)", p.Name), fmt.Sprintf("uintptr(%s)", p.Name)) | ||||
| 					} else { | ||||
| 						args = append(args, fmt.Sprintf("uintptr(%s)", p.Name), fmt.Sprintf("uintptr(%s>>32)", p.Name)) | ||||
| 					} | ||||
| 				} else if p.Type == "bool" { | ||||
| 					text += fmt.Sprintf("\tvar _p%d uint32\n", n) | ||||
| 					text += fmt.Sprintf("\tif %s {\n\t\t_p%d = 1\n\t} else {\n\t\t_p%d = 0\n\t}\n", p.Name, n, n) | ||||
| 					args = append(args, fmt.Sprintf("uintptr(_p%d)", n)) | ||||
| 					n++ | ||||
| 				} else { | ||||
| 					args = append(args, fmt.Sprintf("uintptr(%s)", p.Name)) | ||||
| 				} | ||||
| 			} | ||||
| 			nargs := len(args) | ||||
|  | ||||
| 			// Determine which form to use; pad args with zeros. | ||||
| 			asm := "sysvicall6" | ||||
| 			if nonblock != nil { | ||||
| 				asm = "rawSysvicall6" | ||||
| 			} | ||||
| 			if len(args) <= 6 { | ||||
| 				for len(args) < 6 { | ||||
| 					args = append(args, "0") | ||||
| 				} | ||||
| 			} else { | ||||
| 				fmt.Fprintf(os.Stderr, "%s: too many arguments to system call\n", path) | ||||
| 				os.Exit(1) | ||||
| 			} | ||||
|  | ||||
| 			// Actual call. | ||||
| 			arglist := strings.Join(args, ", ") | ||||
| 			call := fmt.Sprintf("%s(uintptr(unsafe.Pointer(&%s)), %d, %s)", asm, sysvarname, nargs, arglist) | ||||
|  | ||||
| 			// Assign return values. | ||||
| 			body := "" | ||||
| 			ret := []string{"_", "_", "_"} | ||||
| 			doErrno := false | ||||
| 			for i := 0; i < len(out); i++ { | ||||
| 				p := parseParam(out[i]) | ||||
| 				reg := "" | ||||
| 				if p.Name == "err" { | ||||
| 					reg = "e1" | ||||
| 					ret[2] = reg | ||||
| 					doErrno = true | ||||
| 				} else { | ||||
| 					reg = fmt.Sprintf("r%d", i) | ||||
| 					ret[i] = reg | ||||
| 				} | ||||
| 				if p.Type == "bool" { | ||||
| 					reg = fmt.Sprintf("%d != 0", reg) | ||||
| 				} | ||||
| 				if p.Type == "int64" && endianness != "" { | ||||
| 					// 64-bit number in r1:r0 or r0:r1. | ||||
| 					if i+2 > len(out) { | ||||
| 						fmt.Fprintf(os.Stderr, "%s: not enough registers for int64 return\n", path) | ||||
| 						os.Exit(1) | ||||
| 					} | ||||
| 					if endianness == "big-endian" { | ||||
| 						reg = fmt.Sprintf("int64(r%d)<<32 | int64(r%d)", i, i+1) | ||||
| 					} else { | ||||
| 						reg = fmt.Sprintf("int64(r%d)<<32 | int64(r%d)", i+1, i) | ||||
| 					} | ||||
| 					ret[i] = fmt.Sprintf("r%d", i) | ||||
| 					ret[i+1] = fmt.Sprintf("r%d", i+1) | ||||
| 				} | ||||
| 				if reg != "e1" { | ||||
| 					body += fmt.Sprintf("\t%s = %s(%s)\n", p.Name, p.Type, reg) | ||||
| 				} | ||||
| 			} | ||||
| 			if ret[0] == "_" && ret[1] == "_" && ret[2] == "_" { | ||||
| 				text += fmt.Sprintf("\t%s\n", call) | ||||
| 			} else { | ||||
| 				text += fmt.Sprintf("\t%s, %s, %s := %s\n", ret[0], ret[1], ret[2], call) | ||||
| 			} | ||||
| 			text += body | ||||
|  | ||||
| 			if doErrno { | ||||
| 				text += "\tif e1 != 0 {\n" | ||||
| 				text += "\t\terr = e1\n" | ||||
| 				text += "\t}\n" | ||||
| 			} | ||||
| 			text += "\treturn\n" | ||||
| 			text += "}\n" | ||||
| 		} | ||||
| 		if err := s.Err(); err != nil { | ||||
| 			fmt.Fprintf(os.Stderr, err.Error()) | ||||
| 			os.Exit(1) | ||||
| 		} | ||||
| 		file.Close() | ||||
| 	} | ||||
| 	imp := "" | ||||
| 	if pack != "unix" { | ||||
| 		imp = "import \"golang.org/x/sys/unix\"\n" | ||||
|  | ||||
| 	} | ||||
| 	vardecls := "\t" + strings.Join(vars, ",\n\t") | ||||
| 	vardecls += " syscallFunc" | ||||
| 	fmt.Printf(srcTemplate, cmdLine(), buildTags(), pack, imp, dynimports, linknames, vardecls, text) | ||||
| } | ||||
|  | ||||
| const srcTemplate = `// %s | ||||
| // Code generated by the command above; see README.md. DO NOT EDIT. | ||||
|  | ||||
| // +build %s | ||||
|  | ||||
| package %s | ||||
|  | ||||
| import ( | ||||
| 	"syscall" | ||||
| 	"unsafe" | ||||
| ) | ||||
| %s | ||||
| %s | ||||
| %s | ||||
| var ( | ||||
| %s	 | ||||
| ) | ||||
|  | ||||
| %s | ||||
| ` | ||||
							
								
								
									
										265
									
								
								vendor/golang.org/x/sys/unix/mksysctl_openbsd.pl
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										265
									
								
								vendor/golang.org/x/sys/unix/mksysctl_openbsd.pl
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,265 @@ | ||||
| #!/usr/bin/env perl | ||||
|  | ||||
| # 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. | ||||
|  | ||||
| # | ||||
| # Parse the header files for OpenBSD and generate a Go usable sysctl MIB. | ||||
| # | ||||
| # Build a MIB with each entry being an array containing the level, type and | ||||
| # a hash that will contain additional entries if the current entry is a node. | ||||
| # We then walk this MIB and create a flattened sysctl name to OID hash. | ||||
| # | ||||
|  | ||||
| use strict; | ||||
|  | ||||
| if($ENV{'GOARCH'} eq "" || $ENV{'GOOS'} eq "") { | ||||
| 	print STDERR "GOARCH or GOOS not defined in environment\n"; | ||||
| 	exit 1; | ||||
| } | ||||
|  | ||||
| my $debug = 0; | ||||
| my %ctls = (); | ||||
|  | ||||
| my @headers = qw ( | ||||
| 	sys/sysctl.h | ||||
| 	sys/socket.h | ||||
| 	sys/tty.h | ||||
| 	sys/malloc.h | ||||
| 	sys/mount.h | ||||
| 	sys/namei.h | ||||
| 	sys/sem.h | ||||
| 	sys/shm.h | ||||
| 	sys/vmmeter.h | ||||
| 	uvm/uvmexp.h | ||||
| 	uvm/uvm_param.h | ||||
| 	uvm/uvm_swap_encrypt.h | ||||
| 	ddb/db_var.h | ||||
| 	net/if.h | ||||
| 	net/if_pfsync.h | ||||
| 	net/pipex.h | ||||
| 	netinet/in.h | ||||
| 	netinet/icmp_var.h | ||||
| 	netinet/igmp_var.h | ||||
| 	netinet/ip_ah.h | ||||
| 	netinet/ip_carp.h | ||||
| 	netinet/ip_divert.h | ||||
| 	netinet/ip_esp.h | ||||
| 	netinet/ip_ether.h | ||||
| 	netinet/ip_gre.h | ||||
| 	netinet/ip_ipcomp.h | ||||
| 	netinet/ip_ipip.h | ||||
| 	netinet/pim_var.h | ||||
| 	netinet/tcp_var.h | ||||
| 	netinet/udp_var.h | ||||
| 	netinet6/in6.h | ||||
| 	netinet6/ip6_divert.h | ||||
| 	netinet6/pim6_var.h | ||||
| 	netinet/icmp6.h | ||||
| 	netmpls/mpls.h | ||||
| ); | ||||
|  | ||||
| my @ctls = qw ( | ||||
| 	kern | ||||
| 	vm | ||||
| 	fs | ||||
| 	net | ||||
| 	#debug				# Special handling required | ||||
| 	hw | ||||
| 	#machdep			# Arch specific | ||||
| 	user | ||||
| 	ddb | ||||
| 	#vfs				# Special handling required | ||||
| 	fs.posix | ||||
| 	kern.forkstat | ||||
| 	kern.intrcnt | ||||
| 	kern.malloc | ||||
| 	kern.nchstats | ||||
| 	kern.seminfo | ||||
| 	kern.shminfo | ||||
| 	kern.timecounter | ||||
| 	kern.tty | ||||
| 	kern.watchdog | ||||
| 	net.bpf | ||||
| 	net.ifq | ||||
| 	net.inet | ||||
| 	net.inet.ah | ||||
| 	net.inet.carp | ||||
| 	net.inet.divert | ||||
| 	net.inet.esp | ||||
| 	net.inet.etherip | ||||
| 	net.inet.gre | ||||
| 	net.inet.icmp | ||||
| 	net.inet.igmp | ||||
| 	net.inet.ip | ||||
| 	net.inet.ip.ifq | ||||
| 	net.inet.ipcomp | ||||
| 	net.inet.ipip | ||||
| 	net.inet.mobileip | ||||
| 	net.inet.pfsync | ||||
| 	net.inet.pim | ||||
| 	net.inet.tcp | ||||
| 	net.inet.udp | ||||
| 	net.inet6 | ||||
| 	net.inet6.divert | ||||
| 	net.inet6.ip6 | ||||
| 	net.inet6.icmp6 | ||||
| 	net.inet6.pim6 | ||||
| 	net.inet6.tcp6 | ||||
| 	net.inet6.udp6 | ||||
| 	net.mpls | ||||
| 	net.mpls.ifq | ||||
| 	net.key | ||||
| 	net.pflow | ||||
| 	net.pfsync | ||||
| 	net.pipex | ||||
| 	net.rt | ||||
| 	vm.swapencrypt | ||||
| 	#vfsgenctl			# Special handling required | ||||
| ); | ||||
|  | ||||
| # Node name "fixups" | ||||
| my %ctl_map = ( | ||||
| 	"ipproto" => "net.inet", | ||||
| 	"net.inet.ipproto" => "net.inet", | ||||
| 	"net.inet6.ipv6proto" => "net.inet6", | ||||
| 	"net.inet6.ipv6" => "net.inet6.ip6", | ||||
| 	"net.inet.icmpv6" => "net.inet6.icmp6", | ||||
| 	"net.inet6.divert6" => "net.inet6.divert", | ||||
| 	"net.inet6.tcp6" => "net.inet.tcp", | ||||
| 	"net.inet6.udp6" => "net.inet.udp", | ||||
| 	"mpls" => "net.mpls", | ||||
| 	"swpenc" => "vm.swapencrypt" | ||||
| ); | ||||
|  | ||||
| # Node mappings | ||||
| my %node_map = ( | ||||
| 	"net.inet.ip.ifq" => "net.ifq", | ||||
| 	"net.inet.pfsync" => "net.pfsync", | ||||
| 	"net.mpls.ifq" => "net.ifq" | ||||
| ); | ||||
|  | ||||
| my $ctlname; | ||||
| my %mib = (); | ||||
| my %sysctl = (); | ||||
| my $node; | ||||
|  | ||||
| sub debug() { | ||||
| 	print STDERR "$_[0]\n" if $debug; | ||||
| } | ||||
|  | ||||
| # Walk the MIB and build a sysctl name to OID mapping. | ||||
| sub build_sysctl() { | ||||
| 	my ($node, $name, $oid) = @_; | ||||
| 	my %node = %{$node}; | ||||
| 	my @oid = @{$oid}; | ||||
|  | ||||
| 	foreach my $key (sort keys %node) { | ||||
| 		my @node = @{$node{$key}}; | ||||
| 		my $nodename = $name.($name ne '' ? '.' : '').$key; | ||||
| 		my @nodeoid = (@oid, $node[0]); | ||||
| 		if ($node[1] eq 'CTLTYPE_NODE') { | ||||
| 			if (exists $node_map{$nodename}) { | ||||
| 				$node = \%mib; | ||||
| 				$ctlname = $node_map{$nodename}; | ||||
| 				foreach my $part (split /\./, $ctlname) { | ||||
| 					$node = \%{@{$$node{$part}}[2]}; | ||||
| 				} | ||||
| 			} else { | ||||
| 				$node = $node[2]; | ||||
| 			} | ||||
| 			&build_sysctl($node, $nodename, \@nodeoid); | ||||
| 		} elsif ($node[1] ne '') { | ||||
| 			$sysctl{$nodename} = \@nodeoid; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| foreach my $ctl (@ctls) { | ||||
| 	$ctls{$ctl} = $ctl; | ||||
| } | ||||
|  | ||||
| # Build MIB | ||||
| foreach my $header (@headers) { | ||||
| 	&debug("Processing $header..."); | ||||
| 	open HEADER, "/usr/include/$header" || | ||||
| 	    print STDERR "Failed to open $header\n"; | ||||
| 	while (<HEADER>) { | ||||
| 		if ($_ =~ /^#define\s+(CTL_NAMES)\s+{/ || | ||||
| 		    $_ =~ /^#define\s+(CTL_(.*)_NAMES)\s+{/ || | ||||
| 		    $_ =~ /^#define\s+((.*)CTL_NAMES)\s+{/) { | ||||
| 			if ($1 eq 'CTL_NAMES') { | ||||
| 				# Top level. | ||||
| 				$node = \%mib; | ||||
| 			} else { | ||||
| 				# Node. | ||||
| 				my $nodename = lc($2); | ||||
| 				if ($header =~ /^netinet\//) { | ||||
| 					$ctlname = "net.inet.$nodename"; | ||||
| 				} elsif ($header =~ /^netinet6\//) { | ||||
| 					$ctlname = "net.inet6.$nodename"; | ||||
| 				} elsif ($header =~ /^net\//) { | ||||
| 					$ctlname = "net.$nodename"; | ||||
| 				} else { | ||||
| 					$ctlname = "$nodename"; | ||||
| 					$ctlname =~ s/^(fs|net|kern)_/$1\./; | ||||
| 				} | ||||
| 				if (exists $ctl_map{$ctlname}) { | ||||
| 					$ctlname = $ctl_map{$ctlname}; | ||||
| 				} | ||||
| 				if (not exists $ctls{$ctlname}) { | ||||
| 					&debug("Ignoring $ctlname..."); | ||||
| 					next; | ||||
| 				} | ||||
|  | ||||
| 				# Walk down from the top of the MIB. | ||||
| 				$node = \%mib; | ||||
| 				foreach my $part (split /\./, $ctlname) { | ||||
| 					if (not exists $$node{$part}) { | ||||
| 						&debug("Missing node $part"); | ||||
| 						$$node{$part} = [ 0, '', {} ]; | ||||
| 					} | ||||
| 					$node = \%{@{$$node{$part}}[2]}; | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			# Populate current node with entries. | ||||
| 			my $i = -1; | ||||
| 			while (defined($_) && $_ !~ /^}/) { | ||||
| 				$_ = <HEADER>; | ||||
| 				$i++ if $_ =~ /{.*}/; | ||||
| 				next if $_ !~ /{\s+"(\w+)",\s+(CTLTYPE_[A-Z]+)\s+}/; | ||||
| 				$$node{$1} = [ $i, $2, {} ]; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	close HEADER; | ||||
| } | ||||
|  | ||||
| &build_sysctl(\%mib, "", []); | ||||
|  | ||||
| print <<EOF; | ||||
| // mksysctl_openbsd.pl | ||||
| // Code generated by the command above; DO NOT EDIT. | ||||
|  | ||||
| // +build $ENV{'GOARCH'},$ENV{'GOOS'} | ||||
|  | ||||
| package unix; | ||||
|  | ||||
| type mibentry struct { | ||||
| 	ctlname string | ||||
| 	ctloid []_C_int | ||||
| } | ||||
|  | ||||
| var sysctlMib = []mibentry { | ||||
| EOF | ||||
|  | ||||
| foreach my $name (sort keys %sysctl) { | ||||
| 	my @oid = @{$sysctl{$name}}; | ||||
| 	print "\t{ \"$name\", []_C_int{ ", join(', ', @oid), " } }, \n"; | ||||
| } | ||||
|  | ||||
| print <<EOF; | ||||
| } | ||||
| EOF | ||||
							
								
								
									
										190
									
								
								vendor/golang.org/x/sys/unix/mksysnum.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										190
									
								
								vendor/golang.org/x/sys/unix/mksysnum.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,190 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build ignore | ||||
|  | ||||
| // Generate system call table for DragonFly, NetBSD, | ||||
| // FreeBSD, OpenBSD or Darwin from master list | ||||
| // (for example, /usr/src/sys/kern/syscalls.master or | ||||
| // sys/syscall.h). | ||||
| package main | ||||
|  | ||||
| import ( | ||||
| 	"bufio" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"io/ioutil" | ||||
| 	"net/http" | ||||
| 	"os" | ||||
| 	"regexp" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	goos, goarch string | ||||
| ) | ||||
|  | ||||
| // cmdLine returns this programs's commandline arguments | ||||
| func cmdLine() string { | ||||
| 	return "go run mksysnum.go " + strings.Join(os.Args[1:], " ") | ||||
| } | ||||
|  | ||||
| // buildTags returns build tags | ||||
| func buildTags() string { | ||||
| 	return fmt.Sprintf("%s,%s", goarch, goos) | ||||
| } | ||||
|  | ||||
| func checkErr(err error) { | ||||
| 	if err != nil { | ||||
| 		fmt.Fprintf(os.Stderr, "%v\n", err) | ||||
| 		os.Exit(1) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // source string and substring slice for regexp | ||||
| type re struct { | ||||
| 	str string   // source string | ||||
| 	sub []string // matched sub-string | ||||
| } | ||||
|  | ||||
| // Match performs regular expression match | ||||
| func (r *re) Match(exp string) bool { | ||||
| 	r.sub = regexp.MustCompile(exp).FindStringSubmatch(r.str) | ||||
| 	if r.sub != nil { | ||||
| 		return true | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| // fetchFile fetches a text file from URL | ||||
| func fetchFile(URL string) io.Reader { | ||||
| 	resp, err := http.Get(URL) | ||||
| 	checkErr(err) | ||||
| 	defer resp.Body.Close() | ||||
| 	body, err := ioutil.ReadAll(resp.Body) | ||||
| 	checkErr(err) | ||||
| 	return strings.NewReader(string(body)) | ||||
| } | ||||
|  | ||||
| // readFile reads a text file from path | ||||
| func readFile(path string) io.Reader { | ||||
| 	file, err := os.Open(os.Args[1]) | ||||
| 	checkErr(err) | ||||
| 	return file | ||||
| } | ||||
|  | ||||
| func format(name, num, proto string) string { | ||||
| 	name = strings.ToUpper(name) | ||||
| 	// There are multiple entries for enosys and nosys, so comment them out. | ||||
| 	nm := re{str: name} | ||||
| 	if nm.Match(`^SYS_E?NOSYS$`) { | ||||
| 		name = fmt.Sprintf("// %s", name) | ||||
| 	} | ||||
| 	if name == `SYS_SYS_EXIT` { | ||||
| 		name = `SYS_EXIT` | ||||
| 	} | ||||
| 	return fmt.Sprintf("	%s = %s;  // %s\n", name, num, proto) | ||||
| } | ||||
|  | ||||
| func main() { | ||||
| 	// Get the OS (using GOOS_TARGET if it exist) | ||||
| 	goos = os.Getenv("GOOS_TARGET") | ||||
| 	if goos == "" { | ||||
| 		goos = os.Getenv("GOOS") | ||||
| 	} | ||||
| 	// Get the architecture (using GOARCH_TARGET if it exists) | ||||
| 	goarch = os.Getenv("GOARCH_TARGET") | ||||
| 	if goarch == "" { | ||||
| 		goarch = os.Getenv("GOARCH") | ||||
| 	} | ||||
| 	// Check if GOOS and GOARCH environment variables are defined | ||||
| 	if goarch == "" || goos == "" { | ||||
| 		fmt.Fprintf(os.Stderr, "GOARCH or GOOS not defined in environment\n") | ||||
| 		os.Exit(1) | ||||
| 	} | ||||
|  | ||||
| 	file := strings.TrimSpace(os.Args[1]) | ||||
| 	var syscalls io.Reader | ||||
| 	if strings.HasPrefix(file, "https://") || strings.HasPrefix(file, "http://") { | ||||
| 		// Download syscalls.master file | ||||
| 		syscalls = fetchFile(file) | ||||
| 	} else { | ||||
| 		syscalls = readFile(file) | ||||
| 	} | ||||
|  | ||||
| 	var text, line string | ||||
| 	s := bufio.NewScanner(syscalls) | ||||
| 	for s.Scan() { | ||||
| 		t := re{str: line} | ||||
| 		if t.Match(`^(.*)\\$`) { | ||||
| 			// Handle continuation | ||||
| 			line = t.sub[1] | ||||
| 			line += strings.TrimLeft(s.Text(), " \t") | ||||
| 		} else { | ||||
| 			// New line | ||||
| 			line = s.Text() | ||||
| 		} | ||||
| 		t = re{str: line} | ||||
| 		if t.Match(`\\$`) { | ||||
| 			continue | ||||
| 		} | ||||
| 		t = re{str: line} | ||||
|  | ||||
| 		switch goos { | ||||
| 		case "dragonfly": | ||||
| 			if t.Match(`^([0-9]+)\s+STD\s+({ \S+\s+(\w+).*)$`) { | ||||
| 				num, proto := t.sub[1], t.sub[2] | ||||
| 				name := fmt.Sprintf("SYS_%s", t.sub[3]) | ||||
| 				text += format(name, num, proto) | ||||
| 			} | ||||
| 		case "freebsd": | ||||
| 			if t.Match(`^([0-9]+)\s+\S+\s+(?:NO)?STD\s+({ \S+\s+(\w+).*)$`) { | ||||
| 				num, proto := t.sub[1], t.sub[2] | ||||
| 				name := fmt.Sprintf("SYS_%s", t.sub[3]) | ||||
| 				text += format(name, num, proto) | ||||
| 			} | ||||
| 		case "openbsd": | ||||
| 			if t.Match(`^([0-9]+)\s+STD\s+(NOLOCK\s+)?({ \S+\s+\*?(\w+).*)$`) { | ||||
| 				num, proto, name := t.sub[1], t.sub[3], t.sub[4] | ||||
| 				text += format(name, num, proto) | ||||
| 			} | ||||
| 		case "netbsd": | ||||
| 			if t.Match(`^([0-9]+)\s+((STD)|(NOERR))\s+(RUMP\s+)?({\s+\S+\s*\*?\s*\|(\S+)\|(\S*)\|(\w+).*\s+})(\s+(\S+))?$`) { | ||||
| 				num, proto, compat := t.sub[1], t.sub[6], t.sub[8] | ||||
| 				name := t.sub[7] + "_" + t.sub[9] | ||||
| 				if t.sub[11] != "" { | ||||
| 					name = t.sub[7] + "_" + t.sub[11] | ||||
| 				} | ||||
| 				name = strings.ToUpper(name) | ||||
| 				if compat == "" || compat == "13" || compat == "30" || compat == "50" { | ||||
| 					text += fmt.Sprintf("	%s = %s;  // %s\n", name, num, proto) | ||||
| 				} | ||||
| 			} | ||||
| 		case "darwin": | ||||
| 			if t.Match(`^#define\s+SYS_(\w+)\s+([0-9]+)`) { | ||||
| 				name, num := t.sub[1], t.sub[2] | ||||
| 				name = strings.ToUpper(name) | ||||
| 				text += fmt.Sprintf("	SYS_%s = %s;\n", name, num) | ||||
| 			} | ||||
| 		default: | ||||
| 			fmt.Fprintf(os.Stderr, "unrecognized GOOS=%s\n", goos) | ||||
| 			os.Exit(1) | ||||
|  | ||||
| 		} | ||||
| 	} | ||||
| 	err := s.Err() | ||||
| 	checkErr(err) | ||||
|  | ||||
| 	fmt.Printf(template, cmdLine(), buildTags(), text) | ||||
| } | ||||
|  | ||||
| const template = `// %s | ||||
| // Code generated by the command above; see README.md. DO NOT EDIT. | ||||
|  | ||||
| // +build %s | ||||
|  | ||||
| package unix | ||||
|  | ||||
| const( | ||||
| %s)` | ||||
							
								
								
									
										166
									
								
								vendor/golang.org/x/sys/unix/openbsd_pledge.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										166
									
								
								vendor/golang.org/x/sys/unix/openbsd_pledge.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,166 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build openbsd | ||||
| // +build 386 amd64 arm | ||||
|  | ||||
| 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 | ||||
| } | ||||
							
								
								
									
										44
									
								
								vendor/golang.org/x/sys/unix/openbsd_unveil.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								vendor/golang.org/x/sys/unix/openbsd_unveil.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build openbsd | ||||
|  | ||||
| package unix | ||||
|  | ||||
| import ( | ||||
| 	"syscall" | ||||
| 	"unsafe" | ||||
| ) | ||||
|  | ||||
| // Unveil implements the unveil syscall. | ||||
| // For more information see unveil(2). | ||||
| // Note that the special case of blocking further | ||||
| // unveil calls is handled by UnveilBlock. | ||||
| func Unveil(path string, flags string) error { | ||||
| 	pathPtr, err := syscall.BytePtrFromString(path) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	flagsPtr, err := syscall.BytePtrFromString(flags) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	_, _, e := syscall.Syscall(SYS_UNVEIL, uintptr(unsafe.Pointer(pathPtr)), uintptr(unsafe.Pointer(flagsPtr)), 0) | ||||
| 	if e != 0 { | ||||
| 		return e | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // UnveilBlock blocks future unveil calls. | ||||
| // For more information see unveil(2). | ||||
| func UnveilBlock() error { | ||||
| 	// Both pointers must be nil. | ||||
| 	var pathUnsafe, flagsUnsafe unsafe.Pointer | ||||
| 	_, _, e := syscall.Syscall(SYS_UNVEIL, uintptr(pathUnsafe), uintptr(flagsUnsafe), 0) | ||||
| 	if e != 0 { | ||||
| 		return e | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										15
									
								
								vendor/golang.org/x/sys/unix/pagesize_unix.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								vendor/golang.org/x/sys/unix/pagesize_unix.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| // 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. | ||||
|  | ||||
| // +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() | ||||
| } | ||||
							
								
								
									
										30
									
								
								vendor/golang.org/x/sys/unix/race.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								vendor/golang.org/x/sys/unix/race.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| // 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. | ||||
|  | ||||
| // +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) | ||||
| } | ||||
							
								
								
									
										25
									
								
								vendor/golang.org/x/sys/unix/race0.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								vendor/golang.org/x/sys/unix/race0.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build aix darwin,!race linux,!race freebsd,!race netbsd openbsd solaris dragonfly | ||||
|  | ||||
| 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) { | ||||
| } | ||||
							
								
								
									
										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)(cmsgData(h))) = *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 | ||||
| } | ||||
							
								
								
									
										117
									
								
								vendor/golang.org/x/sys/unix/sockcmsg_unix.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								vendor/golang.org/x/sys/unix/sockcmsg_unix.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,117 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build aix darwin dragonfly freebsd linux netbsd openbsd solaris | ||||
|  | ||||
| // Socket control messages | ||||
|  | ||||
| package unix | ||||
|  | ||||
| import ( | ||||
| 	"runtime" | ||||
| 	"unsafe" | ||||
| ) | ||||
|  | ||||
| // Round the length of a raw sockaddr up to align it properly. | ||||
| func cmsgAlignOf(salen int) int { | ||||
| 	salign := SizeofPtr | ||||
|  | ||||
| 	switch runtime.GOOS { | ||||
| 	case "darwin", "dragonfly", "solaris": | ||||
| 		// NOTE: It seems like 64-bit Darwin, DragonFly BSD 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 | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return (salen + salign - 1) & ^(salign - 1) | ||||
| } | ||||
|  | ||||
| // 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 cmsgData(h *Cmsghdr) unsafe.Pointer { | ||||
| 	return unsafe.Pointer(uintptr(unsafe.Pointer(h)) + uintptr(cmsgAlignOf(SizeofCmsghdr))) | ||||
| } | ||||
|  | ||||
| // 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)) | ||||
| 	data := cmsgData(h) | ||||
| 	for _, fd := range fds { | ||||
| 		*(*int32)(data) = int32(fd) | ||||
| 		data = unsafe.Pointer(uintptr(data) + 4) | ||||
| 	} | ||||
| 	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 | ||||
| } | ||||
							
								
								
									
										26
									
								
								vendor/golang.org/x/sys/unix/str.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								vendor/golang.org/x/sys/unix/str.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| // 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. | ||||
|  | ||||
| // +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:]) | ||||
| } | ||||
							
								
								
									
										54
									
								
								vendor/golang.org/x/sys/unix/syscall.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								vendor/golang.org/x/sys/unix/syscall.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build aix darwin dragonfly freebsd linux netbsd openbsd solaris | ||||
|  | ||||
| // 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 "strings" | ||||
|  | ||||
| // 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 | ||||
| } | ||||
|  | ||||
| // Single-word zero for use when we need a valid pointer to 0 bytes. | ||||
| // See mkunix.pl. | ||||
| var _zero uintptr | ||||
							
								
								
									
										549
									
								
								vendor/golang.org/x/sys/unix/syscall_aix.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										549
									
								
								vendor/golang.org/x/sys/unix/syscall_aix.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,549 @@ | ||||
| // 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. | ||||
|  | ||||
| // +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 | ||||
|  */ | ||||
|  | ||||
| //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 := (*[10000]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 | ||||
| } | ||||
|  | ||||
| //sys	getdirent(fd int, buf []byte) (n int, err error) | ||||
| func ReadDirent(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&0x200 != 0 } | ||||
|  | ||||
| func (w WaitStatus) TrapCause() int { return -1 } | ||||
|  | ||||
| //sys	ioctl(fd int, req uint, arg uintptr) (err error) | ||||
|  | ||||
| // 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)) | ||||
| } | ||||
|  | ||||
| func ioctlSetWinsize(fd int, req uint, value *Winsize) error { | ||||
| 	return ioctl(fd, req, uintptr(unsafe.Pointer(value))) | ||||
| } | ||||
|  | ||||
| func ioctlSetTermios(fd int, req uint, value *Termios) error { | ||||
| 	return ioctl(fd, req, uintptr(unsafe.Pointer(value))) | ||||
| } | ||||
|  | ||||
| // IoctlGetInt performs an ioctl operation which gets an integer value | ||||
| // from fd, using the specified request number. | ||||
| 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 | ||||
| } | ||||
|  | ||||
| // 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) | ||||
| //TODO umount | ||||
| // //sys	Unmount(target string, flags int) (err error) = umount | ||||
| //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 | ||||
| //TODO Select | ||||
| // //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, stat *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) | ||||
| //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	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) | ||||
							
								
								
									
										34
									
								
								vendor/golang.org/x/sys/unix/syscall_aix_ppc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								vendor/golang.org/x/sys/unix/syscall_aix_ppc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build aix | ||||
| // +build 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 (cmsg *Cmsghdr) SetLen(length int) { | ||||
| 	cmsg.Len = uint32(length) | ||||
| } | ||||
							
								
								
									
										34
									
								
								vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build aix | ||||
| // +build 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 (cmsg *Cmsghdr) SetLen(length int) { | ||||
| 	cmsg.Len = uint32(length) | ||||
| } | ||||
							
								
								
									
										624
									
								
								vendor/golang.org/x/sys/unix/syscall_bsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										624
									
								
								vendor/golang.org/x/sys/unix/syscall_bsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,624 @@ | ||||
| // 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. | ||||
|  | ||||
| // +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" | ||||
| ) | ||||
|  | ||||
| /* | ||||
|  * 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]) | ||||
| } | ||||
|  | ||||
| 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) | ||||
| } | ||||
|  | ||||
| // 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 | ||||
| 	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) 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 := (*[10000]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 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" && 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) | ||||
| } | ||||
|  | ||||
| //sys	sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL | ||||
|  | ||||
| // 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 | ||||
| } | ||||
|  | ||||
| //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	fcntl(fd int, cmd int, arg int) (val int, err error) | ||||
|  | ||||
| //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) | ||||
							
								
								
									
										689
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										689
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,689 @@ | ||||
| // 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 ( | ||||
| 	"errors" | ||||
| 	"syscall" | ||||
| 	"unsafe" | ||||
| ) | ||||
|  | ||||
| const ImplementsGetwd = true | ||||
|  | ||||
| func Getwd() (string, error) { | ||||
| 	buf := make([]byte, 2048) | ||||
| 	attrs, err := getAttrList(".", attrList{CommonAttr: attrCmnFullpath}, buf, 0) | ||||
| 	if err == nil && len(attrs) == 1 && len(attrs[0]) >= 2 { | ||||
| 		wd := string(attrs[0]) | ||||
| 		// Sanity check that it's an absolute path and ends | ||||
| 		// in a null byte, which we then strip. | ||||
| 		if wd[0] == '/' && wd[len(wd)-1] == 0 { | ||||
| 			return wd[:len(wd)-1], nil | ||||
| 		} | ||||
| 	} | ||||
| 	// If pkg/os/getwd.go gets ENOTSUP, it will fall back to the | ||||
| 	// slow algorithm. | ||||
| 	return "", ENOTSUP | ||||
| } | ||||
|  | ||||
| // 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 | ||||
| } | ||||
|  | ||||
| // 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 | ||||
| } | ||||
|  | ||||
| //sys   ptrace(request int, pid int, addr uintptr, data uintptr) (err error) | ||||
| 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) } | ||||
|  | ||||
| const ( | ||||
| 	attrBitMapCount = 5 | ||||
| 	attrCmnFullpath = 0x08000000 | ||||
| ) | ||||
|  | ||||
| type attrList struct { | ||||
| 	bitmapCount uint16 | ||||
| 	_           uint16 | ||||
| 	CommonAttr  uint32 | ||||
| 	VolAttr     uint32 | ||||
| 	DirAttr     uint32 | ||||
| 	FileAttr    uint32 | ||||
| 	Forkattr    uint32 | ||||
| } | ||||
|  | ||||
| func getAttrList(path string, attrList attrList, attrBuf []byte, options uint) (attrs [][]byte, err error) { | ||||
| 	if len(attrBuf) < 4 { | ||||
| 		return nil, errors.New("attrBuf too small") | ||||
| 	} | ||||
| 	attrList.bitmapCount = attrBitMapCount | ||||
|  | ||||
| 	var _p0 *byte | ||||
| 	_p0, err = BytePtrFromString(path) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	if err := getattrlist(_p0, unsafe.Pointer(&attrList), unsafe.Pointer(&attrBuf[0]), uintptr(len(attrBuf)), int(options)); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	size := *(*uint32)(unsafe.Pointer(&attrBuf[0])) | ||||
|  | ||||
| 	// dat is the section of attrBuf that contains valid data, | ||||
| 	// without the 4 byte length header. All attribute offsets | ||||
| 	// are relative to dat. | ||||
| 	dat := attrBuf | ||||
| 	if int(size) < len(attrBuf) { | ||||
| 		dat = dat[:size] | ||||
| 	} | ||||
| 	dat = dat[4:] // remove length prefix | ||||
|  | ||||
| 	for i := uint32(0); int(i) < len(dat); { | ||||
| 		header := dat[i:] | ||||
| 		if len(header) < 8 { | ||||
| 			return attrs, errors.New("truncated attribute header") | ||||
| 		} | ||||
| 		datOff := *(*int32)(unsafe.Pointer(&header[0])) | ||||
| 		attrLen := *(*uint32)(unsafe.Pointer(&header[4])) | ||||
| 		if datOff < 0 || uint32(datOff)+attrLen > uint32(len(dat)) { | ||||
| 			return attrs, errors.New("truncated results; attrBuf too small") | ||||
| 		} | ||||
| 		end := uint32(datOff) + attrLen | ||||
| 		attrs = append(attrs, dat[datOff:end]) | ||||
| 		i = end | ||||
| 		if r := i % 4; r != 0 { | ||||
| 			i += (4 - r) | ||||
| 		} | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
|  | ||||
| //sys getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) | ||||
|  | ||||
| //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 | ||||
| } | ||||
|  | ||||
| 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	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) | ||||
|  | ||||
| // 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)) | ||||
| } | ||||
|  | ||||
| func ioctlSetWinsize(fd int, req uint, value *Winsize) error { | ||||
| 	return ioctl(fd, req, uintptr(unsafe.Pointer(value))) | ||||
| } | ||||
|  | ||||
| func ioctlSetTermios(fd int, req uint, value *Termios) error { | ||||
| 	return ioctl(fd, req, uintptr(unsafe.Pointer(value))) | ||||
| } | ||||
|  | ||||
| // IoctlGetInt performs an ioctl operation which gets an integer value | ||||
| // from fd, using the specified request number. | ||||
| 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 | ||||
| } | ||||
|  | ||||
| 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 | ||||
| } | ||||
|  | ||||
| //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	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	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	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	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(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (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 | ||||
							
								
								
									
										63
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin_386.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin_386.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,63 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build 386,darwin | ||||
|  | ||||
| package unix | ||||
|  | ||||
| import ( | ||||
| 	"syscall" | ||||
| ) | ||||
|  | ||||
| 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	gettimeofday(tp *Timeval) (sec int32, usec int32, err error) | ||||
| func Gettimeofday(tv *Timeval) (err error) { | ||||
| 	// The tv passed to gettimeofday must be non-nil | ||||
| 	// but is otherwise unused. The answers come back | ||||
| 	// in the two registers. | ||||
| 	sec, usec, err := gettimeofday(tv) | ||||
| 	tv.Sec = int32(sec) | ||||
| 	tv.Usec = int32(usec) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| 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 (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___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions | ||||
| // of darwin/386 the syscall is called sysctl instead of __sysctl. | ||||
| const SYS___SYSCTL = SYS_SYSCTL | ||||
|  | ||||
| //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	Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) = SYS_GETDIRENTRIES64 | ||||
| //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	Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 | ||||
| //sys	Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64 | ||||
							
								
								
									
										63
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,63 @@ | ||||
| // 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. | ||||
|  | ||||
| // +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)} | ||||
| } | ||||
|  | ||||
| //sysnb	gettimeofday(tp *Timeval) (sec int64, usec int32, err error) | ||||
| func Gettimeofday(tv *Timeval) (err error) { | ||||
| 	// The tv passed to gettimeofday must be non-nil | ||||
| 	// but is otherwise unused. The answers come back | ||||
| 	// in the two registers. | ||||
| 	sec, usec, err := gettimeofday(tv) | ||||
| 	tv.Sec = sec | ||||
| 	tv.Usec = usec | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| 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 (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___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions | ||||
| // of darwin/amd64 the syscall is called sysctl instead of __sysctl. | ||||
| const SYS___SYSCTL = SYS_SYSCTL | ||||
|  | ||||
| //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	Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) = SYS_GETDIRENTRIES64 | ||||
| //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	Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 | ||||
| //sys	Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64 | ||||
							
								
								
									
										64
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin_arm.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin_arm.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,64 @@ | ||||
| // 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. | ||||
|  | ||||
| package unix | ||||
|  | ||||
| import ( | ||||
| 	"syscall" | ||||
| ) | ||||
|  | ||||
| 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	gettimeofday(tp *Timeval) (sec int32, usec int32, err error) | ||||
| func Gettimeofday(tv *Timeval) (err error) { | ||||
| 	// The tv passed to gettimeofday must be non-nil | ||||
| 	// but is otherwise unused. The answers come back | ||||
| 	// in the two registers. | ||||
| 	sec, usec, err := gettimeofday(tv) | ||||
| 	tv.Sec = int32(sec) | ||||
| 	tv.Usec = int32(usec) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| 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 (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___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions | ||||
| // of darwin/arm the syscall is called sysctl instead of __sysctl. | ||||
| const SYS___SYSCTL = SYS_SYSCTL | ||||
|  | ||||
| //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	Stat(path string, stat *Stat_t) (err error) | ||||
| //sys	Statfs(path string, stat *Statfs_t) (err error) | ||||
|  | ||||
| func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { | ||||
| 	return 0, ENOSYS | ||||
| } | ||||
							
								
								
									
										66
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | ||||
| // 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 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)} | ||||
| } | ||||
|  | ||||
| //sysnb	gettimeofday(tp *Timeval) (sec int64, usec int32, err error) | ||||
| func Gettimeofday(tv *Timeval) (err error) { | ||||
| 	// The tv passed to gettimeofday must be non-nil | ||||
| 	// but is otherwise unused. The answers come back | ||||
| 	// in the two registers. | ||||
| 	sec, usec, err := gettimeofday(tv) | ||||
| 	tv.Sec = sec | ||||
| 	tv.Usec = usec | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| 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 (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___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions | ||||
| // of darwin/arm64 the syscall is called sysctl instead of __sysctl. | ||||
| const SYS___SYSCTL = SYS_SYSCTL | ||||
|  | ||||
| //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	Stat(path string, stat *Stat_t) (err error) | ||||
| //sys	Statfs(path string, stat *Statfs_t) (err error) | ||||
|  | ||||
| func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { | ||||
| 	return 0, ENOSYS | ||||
| } | ||||
							
								
								
									
										31
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.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. | ||||
|  | ||||
| // +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) | ||||
|  | ||||
| //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 | ||||
|  | ||||
| // Find the entry point for f. See comments in runtime/proc.go for the | ||||
| // function of the same name. | ||||
| //go:nosplit | ||||
| func funcPC(f func()) uintptr { | ||||
| 	return **(**uintptr)(unsafe.Pointer(&f)) | ||||
| } | ||||
							
								
								
									
										539
									
								
								vendor/golang.org/x/sys/unix/syscall_dragonfly.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										539
									
								
								vendor/golang.org/x/sys/unix/syscall_dragonfly.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,539 @@ | ||||
| // 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 "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 | ||||
| 	Rcf    uint16 | ||||
| 	Route  [16]uint16 | ||||
| 	raw    RawSockaddrDatalink | ||||
| } | ||||
|  | ||||
| // 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 | ||||
| } | ||||
|  | ||||
| //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 | ||||
| } | ||||
|  | ||||
| //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 | ||||
| } | ||||
|  | ||||
| const ImplementsGetwd = true | ||||
|  | ||||
| //sys	Getcwd(buf []byte) (n int, err error) = SYS___GETCWD | ||||
|  | ||||
| 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 | ||||
| } | ||||
|  | ||||
| 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) | ||||
|  | ||||
| // 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)) | ||||
| } | ||||
|  | ||||
| func ioctlSetWinsize(fd int, req uint, value *Winsize) error { | ||||
| 	return ioctl(fd, req, uintptr(unsafe.Pointer(value))) | ||||
| } | ||||
|  | ||||
| func ioctlSetTermios(fd int, req uint, value *Termios) error { | ||||
| 	return ioctl(fd, req, uintptr(unsafe.Pointer(value))) | ||||
| } | ||||
|  | ||||
| // IoctlGetInt performs an ioctl operation which gets an integer value | ||||
| // from fd, using the specified request number. | ||||
| 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 | ||||
| } | ||||
|  | ||||
| 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	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(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (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 | ||||
							
								
								
									
										52
									
								
								vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
| // 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. | ||||
|  | ||||
| // +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 (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) | ||||
							
								
								
									
										824
									
								
								vendor/golang.org/x/sys/unix/syscall_freebsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										824
									
								
								vendor/golang.org/x/sys/unix/syscall_freebsd.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,824 @@ | ||||
| // 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 | ||||
| } | ||||
|  | ||||
| // 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 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)) | ||||
| } | ||||
|  | ||||
| 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 | ||||
| } | ||||
|  | ||||
| const ImplementsGetwd = true | ||||
|  | ||||
| //sys	Getcwd(buf []byte) (n int, err error) = SYS___GETCWD | ||||
|  | ||||
| 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 | ||||
| } | ||||
|  | ||||
| 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) | ||||
|  | ||||
| // 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)) | ||||
| } | ||||
|  | ||||
| func ioctlSetWinsize(fd int, req uint, value *Winsize) error { | ||||
| 	return ioctl(fd, req, uintptr(unsafe.Pointer(value))) | ||||
| } | ||||
|  | ||||
| func ioctlSetTermios(fd int, req uint, value *Termios) error { | ||||
| 	return ioctl(fd, req, uintptr(unsafe.Pointer(value))) | ||||
| } | ||||
|  | ||||
| // IoctlGetInt performs an ioctl operation which gets an integer value | ||||
| // from fd, using the specified request number. | ||||
| 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 | ||||
| } | ||||
|  | ||||
| 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) { | ||||
| 		return getdirentries_freebsd12(fd, buf, basep) | ||||
| 	} | ||||
|  | ||||
| 	// 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, | ||||
| 		Birthtim: old.Birthtim, | ||||
| 		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) { | ||||
| 		dstDirent := (*Dirent)(unsafe.Pointer(&buf[dstPos])) | ||||
| 		srcDirent := (*dirent_freebsd11)(unsafe.Pointer(&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]) | ||||
| 		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) | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * 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 *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_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(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (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 | ||||
							
								
								
									
										52
									
								
								vendor/golang.org/x/sys/unix/syscall_freebsd_386.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								vendor/golang.org/x/sys/unix/syscall_freebsd_386.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
| // 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. | ||||
|  | ||||
| // +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 (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) | ||||
							
								
								
									
										52
									
								
								vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
| // 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. | ||||
|  | ||||
| // +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 (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) | ||||
							
								
								
									
										52
									
								
								vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
| // 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. | ||||
|  | ||||
| // +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 (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) | ||||
							
								
								
									
										52
									
								
								vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
| // 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. | ||||
|  | ||||
| // +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 (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) | ||||
							
								
								
									
										1771
									
								
								vendor/golang.org/x/sys/unix/syscall_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1771
									
								
								vendor/golang.org/x/sys/unix/syscall_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										386
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_386.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										386
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_386.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,386 @@ | ||||
| // 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. | ||||
|  | ||||
| // TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP) | ||||
| // so that go vet can check that they are correct. | ||||
|  | ||||
| // +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) (err error) = SYS_SETFSGID32 | ||||
| //sys	Setfsuid(uid 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 (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) | ||||
| } | ||||
							
								
								
									
										190
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										190
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,190 @@ | ||||
| // 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. | ||||
|  | ||||
| // +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) (err error) | ||||
| //sys	Setfsuid(uid 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 (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. | ||||
|  | ||||
| // +build amd64,linux | ||||
| // +build !gccgo | ||||
|  | ||||
| package unix | ||||
|  | ||||
| import "syscall" | ||||
|  | ||||
| //go:noescape | ||||
| func gettimeofday(tv *Timeval) (err syscall.Errno) | ||||
							
								
								
									
										274
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_arm.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										274
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_arm.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,274 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build arm,linux | ||||
|  | ||||
| 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)} | ||||
| } | ||||
|  | ||||
| //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 | ||||
| } | ||||
|  | ||||
| // 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 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) (err error) = SYS_SETFSGID32 | ||||
| //sys	Setfsuid(uid 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 (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) | ||||
| } | ||||
							
								
								
									
										223
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										223
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,223 @@ | ||||
| // 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 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) (err error) | ||||
| //sys	Setfsuid(uid 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 | ||||
| } | ||||
|  | ||||
| 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 (cmsg *Cmsghdr) SetLen(length int) { | ||||
| 	cmsg.Len = uint64(length) | ||||
| } | ||||
|  | ||||
| func InotifyInit() (fd int, err error) { | ||||
| 	return InotifyInit1(0) | ||||
| } | ||||
|  | ||||
| func Dup2(oldfd int, newfd int) (err error) { | ||||
| 	return Dup3(oldfd, newfd, 0) | ||||
| } | ||||
|  | ||||
| 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) | ||||
| } | ||||
							
								
								
									
										14
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_gc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_gc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build linux,!gccgo | ||||
|  | ||||
| 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) | ||||
							
								
								
									
										16
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| // 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. | ||||
|  | ||||
| // +build linux,!gccgo,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) | ||||
							
								
								
									
										30
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| // 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. | ||||
|  | ||||
| // +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 | ||||
| } | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user
	 Tonis Tiigi
					Tonis Tiigi