mirror of
https://github.com/golang/go
synced 2024-11-22 21:00:04 -07:00
runtime: use pipe2 for nonblockingPipe on dragonfly
The pipe2 syscall is available since DragonflyBSD 4.2, see https://www.dragonflybsd.org/release42/ Change-Id: Ifc67c4935cc59bae29be459167e2fa765843ac03 Reviewed-on: https://go-review.googlesource.com/c/go/+/295471 Trust: Tobias Klauser <tobias.klauser@gmail.com> Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
1f7a01459b
commit
ee2a45e5fb
@ -32,6 +32,10 @@ const (
|
||||
EFAULT = C.EFAULT
|
||||
EBUSY = C.EBUSY
|
||||
EAGAIN = C.EAGAIN
|
||||
ENOSYS = C.ENOSYS
|
||||
|
||||
O_NONBLOCK = C.O_NONBLOCK
|
||||
O_CLOEXEC = C.O_CLOEXEC
|
||||
|
||||
PROT_NONE = C.PROT_NONE
|
||||
PROT_READ = C.PROT_READ
|
||||
|
@ -10,6 +10,10 @@ const (
|
||||
_EFAULT = 0xe
|
||||
_EBUSY = 0x10
|
||||
_EAGAIN = 0x23
|
||||
_ENOSYS = 0x4e
|
||||
|
||||
_O_NONBLOCK = 0x4
|
||||
_O_CLOEXEC = 0x20000
|
||||
|
||||
_PROT_NONE = 0x0
|
||||
_PROT_READ = 0x1
|
||||
|
@ -2,8 +2,8 @@
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build freebsd || linux || netbsd || openbsd || solaris
|
||||
// +build freebsd linux netbsd openbsd solaris
|
||||
//go:build dragonfly || freebsd || linux || netbsd || openbsd || solaris
|
||||
// +build dragonfly freebsd linux netbsd openbsd solaris
|
||||
|
||||
package runtime
|
||||
|
||||
|
@ -2,8 +2,8 @@
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build aix || darwin || dragonfly
|
||||
// +build aix darwin dragonfly
|
||||
//go:build aix || darwin
|
||||
// +build aix darwin
|
||||
|
||||
package runtime
|
||||
|
||||
|
@ -2,8 +2,8 @@
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build aix || darwin || dragonfly
|
||||
// +build aix darwin dragonfly
|
||||
//go:build aix || darwin
|
||||
// +build aix darwin
|
||||
|
||||
package runtime
|
||||
|
||||
|
@ -2,8 +2,8 @@
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build freebsd || linux || netbsd || openbsd || solaris
|
||||
// +build freebsd linux netbsd openbsd solaris
|
||||
//go:build dragonfly || freebsd || linux || netbsd || openbsd || solaris
|
||||
// +build dragonfly freebsd linux netbsd openbsd solaris
|
||||
|
||||
package runtime
|
||||
|
||||
|
@ -60,10 +60,11 @@ func kqueue() int32
|
||||
|
||||
//go:noescape
|
||||
func kevent(kq int32, ch *keventt, nch int32, ev *keventt, nev int32, ts *timespec) int32
|
||||
func closeonexec(fd int32)
|
||||
func setNonblock(fd int32)
|
||||
|
||||
func pipe() (r, w int32, errno int32)
|
||||
func pipe2(flags int32) (r, w int32, errno int32)
|
||||
func closeonexec(fd int32)
|
||||
func setNonblock(fd int32)
|
||||
|
||||
// From DragonFly's <sys/sysctl.h>
|
||||
const (
|
||||
|
@ -123,6 +123,24 @@ pipeok:
|
||||
MOVL $0, errno+8(FP)
|
||||
RET
|
||||
|
||||
// func pipe2(flags int32) (r, w int32, errno int32)
|
||||
TEXT runtime·pipe2(SB),NOSPLIT,$0-20
|
||||
MOVL $0, DI
|
||||
// dragonfly expects flags as the 2nd argument
|
||||
MOVL flags+0(FP), SI
|
||||
MOVL $538, AX
|
||||
SYSCALL
|
||||
JCC pipe2ok
|
||||
MOVL $-1,r+8(FP)
|
||||
MOVL $-1,w+12(FP)
|
||||
MOVL AX, errno+16(FP)
|
||||
RET
|
||||
pipe2ok:
|
||||
MOVL AX, r+8(FP)
|
||||
MOVL DX, w+12(FP)
|
||||
MOVL $0, errno+16(FP)
|
||||
RET
|
||||
|
||||
TEXT runtime·write1(SB),NOSPLIT,$-8
|
||||
MOVQ fd+0(FP), DI // arg 1 fd
|
||||
MOVQ p+8(FP), SI // arg 2 buf
|
||||
|
Loading…
Reference in New Issue
Block a user