// Syscall6 calls system call number 'num' with arguments a1-6.
func Syscall6(num, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, errno uintptr)
-// syscall_RawSyscall6 is a push linkname to export Syscall6 as
-// syscall.RawSyscall6.
-//
-// //go:uintptrkeepalive because the uintptr argument may be converted pointers
-// that need to be kept alive in the caller (this is implied for Syscall6 since
-// it has no body).
-//
-// //go:nosplit because stack copying does not account for uintptrkeepalive, so
-// the stack must not grow. Stack copying cannot blindly assume that all
-// uintptr arguments are pointers, because some values may look like pointers,
-// but not really be pointers, and adjusting their value would break the call.
-//
-// This is a separate wrapper because we can't export one function as two
-// names. The assembly implementations name themselves Syscall6 would not be
-// affected by a linkname.
-//
-//go:uintptrkeepalive
-//go:nosplit
-//go:linkname syscall_RawSyscall6 syscall.RawSyscall6
-func syscall_RawSyscall6(num, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, errno uintptr) {
- return Syscall6(num, a1, a2, a3, a4, a5, a6)
-}
-
func EpollCreate1(flags int32) (fd int32, errno uintptr) {
r1, _, e := Syscall6(SYS_EPOLL_CREATE1, uintptr(flags), 0, 0, 0, 0, 0)
return int32(r1), e
import (
"internal/itoa"
+ runtimesyscall "internal/runtime/syscall"
"runtime"
"unsafe"
)
-// N.B. RawSyscall6 is provided via linkname by internal/runtime/syscall.
-//
-// Errno is uintptr and thus compatible with the internal/runtime/syscall
-// definition.
-
-func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
-
// Pull in entersyscall/exitsyscall for Syscall/Syscall6.
//
// Note that this can't be a push linkname because the runtime already has a
// N.B. For the Syscall functions below:
//
// //go:uintptrkeepalive because the uintptr argument may be converted pointers
-// that need to be kept alive in the caller (this is implied for RawSyscall6
-// since it has no body).
+// that need to be kept alive in the caller.
//
// //go:nosplit because stack copying does not account for uintptrkeepalive, so
// the stack must not grow. Stack copying cannot blindly assume that all
return RawSyscall6(trap, a1, a2, a3, 0, 0, 0)
}
+//go:uintptrkeepalive
+//go:nosplit
+//go:norace
+//go:linkname RawSyscall6
+func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) {
+ var errno uintptr
+ r1, r2, errno = runtimesyscall.Syscall6(trap, a1, a2, a3, a4, a5, a6)
+ err = Errno(errno)
+ return
+}
+
//go:uintptrkeepalive
//go:nosplit
//go:linkname Syscall