1// Copyright 2020 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5//go:build openbsd && !mips64 6 7package runtime 8 9import ( 10 "internal/abi" 11 "unsafe" 12) 13 14// The X versions of syscall expect the libc call to return a 64-bit result. 15// Otherwise (the non-X version) expects a 32-bit result. 16// This distinction is required because an error is indicated by returning -1, 17// and we need to know whether to check 32 or 64 bits of the result. 18// (Some libc functions that return 32 bits put junk in the upper 32 bits of AX.) 19 20// golang.org/x/sys linknames syscall_syscall 21// (in addition to standard package syscall). 22// Do not remove or change the type signature. 23// 24//go:linkname syscall_syscall syscall.syscall 25//go:nosplit 26//go:cgo_unsafe_args 27func syscall_syscall(fn, a1, a2, a3 uintptr) (r1, r2, err uintptr) { 28 entersyscall() 29 libcCall(unsafe.Pointer(abi.FuncPCABI0(syscall)), unsafe.Pointer(&fn)) 30 exitsyscall() 31 return 32} 33func syscall() 34 35//go:linkname syscall_syscallX syscall.syscallX 36//go:nosplit 37//go:cgo_unsafe_args 38func syscall_syscallX(fn, a1, a2, a3 uintptr) (r1, r2, err uintptr) { 39 entersyscall() 40 libcCall(unsafe.Pointer(abi.FuncPCABI0(syscallX)), unsafe.Pointer(&fn)) 41 exitsyscall() 42 return 43} 44func syscallX() 45 46// golang.org/x/sys linknames syscall.syscall6 47// (in addition to standard package syscall). 48// Do not remove or change the type signature. 49// 50//go:linkname syscall_syscall6 syscall.syscall6 51//go:nosplit 52//go:cgo_unsafe_args 53func syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) { 54 entersyscall() 55 libcCall(unsafe.Pointer(abi.FuncPCABI0(syscall6)), unsafe.Pointer(&fn)) 56 exitsyscall() 57 return 58} 59func syscall6() 60 61//go:linkname syscall_syscall6X syscall.syscall6X 62//go:nosplit 63//go:cgo_unsafe_args 64func syscall_syscall6X(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) { 65 entersyscall() 66 libcCall(unsafe.Pointer(abi.FuncPCABI0(syscall6X)), unsafe.Pointer(&fn)) 67 exitsyscall() 68 return 69} 70func syscall6X() 71 72// golang.org/x/sys linknames syscall.syscall10 73// (in addition to standard package syscall). 74// Do not remove or change the type signature. 75// 76//go:linkname syscall_syscall10 syscall.syscall10 77//go:nosplit 78//go:cgo_unsafe_args 79func syscall_syscall10(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 uintptr) (r1, r2, err uintptr) { 80 entersyscall() 81 libcCall(unsafe.Pointer(abi.FuncPCABI0(syscall10)), unsafe.Pointer(&fn)) 82 exitsyscall() 83 return 84} 85func syscall10() 86 87//go:linkname syscall_syscall10X syscall.syscall10X 88//go:nosplit 89//go:cgo_unsafe_args 90func syscall_syscall10X(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 uintptr) (r1, r2, err uintptr) { 91 entersyscall() 92 libcCall(unsafe.Pointer(abi.FuncPCABI0(syscall10X)), unsafe.Pointer(&fn)) 93 exitsyscall() 94 return 95} 96func syscall10X() 97 98// golang.org/x/sys linknames syscall_rawSyscall 99// (in addition to standard package syscall). 100// Do not remove or change the type signature. 101// 102//go:linkname syscall_rawSyscall syscall.rawSyscall 103//go:nosplit 104//go:cgo_unsafe_args 105func syscall_rawSyscall(fn, a1, a2, a3 uintptr) (r1, r2, err uintptr) { 106 libcCall(unsafe.Pointer(abi.FuncPCABI0(syscall)), unsafe.Pointer(&fn)) 107 return 108} 109 110// golang.org/x/sys linknames syscall_rawSyscall6 111// (in addition to standard package syscall). 112// Do not remove or change the type signature. 113// 114//go:linkname syscall_rawSyscall6 syscall.rawSyscall6 115//go:nosplit 116//go:cgo_unsafe_args 117func syscall_rawSyscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) { 118 libcCall(unsafe.Pointer(abi.FuncPCABI0(syscall6)), unsafe.Pointer(&fn)) 119 return 120} 121 122//go:linkname syscall_rawSyscall6X syscall.rawSyscall6X 123//go:nosplit 124//go:cgo_unsafe_args 125func syscall_rawSyscall6X(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) { 126 libcCall(unsafe.Pointer(abi.FuncPCABI0(syscall6X)), unsafe.Pointer(&fn)) 127 return 128} 129 130//go:linkname syscall_rawSyscall10X syscall.rawSyscall10X 131//go:nosplit 132//go:cgo_unsafe_args 133func syscall_rawSyscall10X(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 uintptr) (r1, r2, err uintptr) { 134 libcCall(unsafe.Pointer(abi.FuncPCABI0(syscall10X)), unsafe.Pointer(&fn)) 135 return 136} 137