1
0
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:
Tobias Klauser 2021-02-24 09:43:59 +01:00 committed by Tobias Klauser
parent 1f7a01459b
commit ee2a45e5fb
8 changed files with 37 additions and 10 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 (

View File

@ -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