mirror of
https://github.com/golang/go
synced 2024-11-26 16:16:57 -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
|
EFAULT = C.EFAULT
|
||||||
EBUSY = C.EBUSY
|
EBUSY = C.EBUSY
|
||||||
EAGAIN = C.EAGAIN
|
EAGAIN = C.EAGAIN
|
||||||
|
ENOSYS = C.ENOSYS
|
||||||
|
|
||||||
|
O_NONBLOCK = C.O_NONBLOCK
|
||||||
|
O_CLOEXEC = C.O_CLOEXEC
|
||||||
|
|
||||||
PROT_NONE = C.PROT_NONE
|
PROT_NONE = C.PROT_NONE
|
||||||
PROT_READ = C.PROT_READ
|
PROT_READ = C.PROT_READ
|
||||||
|
@ -10,6 +10,10 @@ const (
|
|||||||
_EFAULT = 0xe
|
_EFAULT = 0xe
|
||||||
_EBUSY = 0x10
|
_EBUSY = 0x10
|
||||||
_EAGAIN = 0x23
|
_EAGAIN = 0x23
|
||||||
|
_ENOSYS = 0x4e
|
||||||
|
|
||||||
|
_O_NONBLOCK = 0x4
|
||||||
|
_O_CLOEXEC = 0x20000
|
||||||
|
|
||||||
_PROT_NONE = 0x0
|
_PROT_NONE = 0x0
|
||||||
_PROT_READ = 0x1
|
_PROT_READ = 0x1
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build freebsd || linux || netbsd || openbsd || solaris
|
//go:build dragonfly || freebsd || linux || netbsd || openbsd || solaris
|
||||||
// +build freebsd linux netbsd openbsd solaris
|
// +build dragonfly freebsd linux netbsd openbsd solaris
|
||||||
|
|
||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build aix || darwin || dragonfly
|
//go:build aix || darwin
|
||||||
// +build aix darwin dragonfly
|
// +build aix darwin
|
||||||
|
|
||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build aix || darwin || dragonfly
|
//go:build aix || darwin
|
||||||
// +build aix darwin dragonfly
|
// +build aix darwin
|
||||||
|
|
||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build freebsd || linux || netbsd || openbsd || solaris
|
//go:build dragonfly || freebsd || linux || netbsd || openbsd || solaris
|
||||||
// +build freebsd linux netbsd openbsd solaris
|
// +build dragonfly freebsd linux netbsd openbsd solaris
|
||||||
|
|
||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
|
@ -60,10 +60,11 @@ func kqueue() int32
|
|||||||
|
|
||||||
//go:noescape
|
//go:noescape
|
||||||
func kevent(kq int32, ch *keventt, nch int32, ev *keventt, nev int32, ts *timespec) int32
|
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 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>
|
// From DragonFly's <sys/sysctl.h>
|
||||||
const (
|
const (
|
||||||
|
@ -123,6 +123,24 @@ pipeok:
|
|||||||
MOVL $0, errno+8(FP)
|
MOVL $0, errno+8(FP)
|
||||||
RET
|
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
|
TEXT runtime·write1(SB),NOSPLIT,$-8
|
||||||
MOVQ fd+0(FP), DI // arg 1 fd
|
MOVQ fd+0(FP), DI // arg 1 fd
|
||||||
MOVQ p+8(FP), SI // arg 2 buf
|
MOVQ p+8(FP), SI // arg 2 buf
|
||||||
|
Loading…
Reference in New Issue
Block a user