Skip to content

Commit ec230da

Browse files
jrick4a6f656c
authored andcommitted
unix: use fcntl(2) libc stub on OpenBSD
Future OpenBSD releases will remove the syscall(2) interface. This converts the Fcntl functions to use fcntl(2) from libc, rather than indirectly through syscall(2). Updates golang/go#63900. Change-Id: I50c3b91cb40245653c772e65b0b15c625974bebe GitHub-Last-Rev: 9c62104 GitHub-Pull-Request: #179 Reviewed-on: https://go-review.googlesource.com/c/sys/+/538995 Reviewed-by: Bryan Mills <bcmills@google.com> Reviewed-by: Joel Sing <joel@sing.id.au> Reviewed-by: Cherry Mui <cherryyz@google.com> Run-TryBot: Joel Sing <joel@sing.id.au> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Mauri de Souza Meneguzzo <mauri870@gmail.com>
1 parent cb378ae commit ec230da

16 files changed

+233
-1
lines changed

unix/fcntl.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// Use of this source code is governed by a BSD-style
33
// license that can be found in the LICENSE file.
44

5-
//go:build dragonfly || freebsd || linux || netbsd || openbsd
5+
//go:build dragonfly || freebsd || linux || netbsd
66

77
package unix
88

unix/syscall_openbsd.go

+14
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,20 @@ func Getresgid() (rgid, egid, sgid int) {
166166

167167
//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
168168

169+
//sys fcntl(fd int, cmd int, arg int) (n int, err error)
170+
//sys fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) = SYS_FCNTL
171+
172+
// FcntlInt performs a fcntl syscall on fd with the provided command and argument.
173+
func FcntlInt(fd uintptr, cmd, arg int) (int, error) {
174+
return fcntl(int(fd), cmd, arg)
175+
}
176+
177+
// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.
178+
func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {
179+
_, err := fcntlPtr(int(fd), cmd, unsafe.Pointer(lk))
180+
return err
181+
}
182+
169183
//sys ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error)
170184

171185
func Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {

unix/zsyscall_openbsd_386.go

+26
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

unix/zsyscall_openbsd_386.s

+5
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,11 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
178178
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $4
179179
DATA ·libc_sysctl_trampoline_addr(SB)/4, $libc_sysctl_trampoline<>(SB)
180180

181+
TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0
182+
JMP libc_fcntl(SB)
183+
GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $4
184+
DATA ·libc_fcntl_trampoline_addr(SB)/4, $libc_fcntl_trampoline<>(SB)
185+
181186
TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
182187
JMP libc_ppoll(SB)
183188
GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $4

unix/zsyscall_openbsd_amd64.go

+26
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

unix/zsyscall_openbsd_amd64.s

+5
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,11 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
178178
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8
179179
DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)
180180

181+
TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0
182+
JMP libc_fcntl(SB)
183+
GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $8
184+
DATA ·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB)
185+
181186
TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
182187
JMP libc_ppoll(SB)
183188
GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $8

unix/zsyscall_openbsd_arm.go

+26
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

unix/zsyscall_openbsd_arm.s

+5
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,11 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
178178
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $4
179179
DATA ·libc_sysctl_trampoline_addr(SB)/4, $libc_sysctl_trampoline<>(SB)
180180

181+
TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0
182+
JMP libc_fcntl(SB)
183+
GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $4
184+
DATA ·libc_fcntl_trampoline_addr(SB)/4, $libc_fcntl_trampoline<>(SB)
185+
181186
TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
182187
JMP libc_ppoll(SB)
183188
GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $4

unix/zsyscall_openbsd_arm64.go

+26
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

unix/zsyscall_openbsd_arm64.s

+5
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,11 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
178178
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8
179179
DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)
180180

181+
TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0
182+
JMP libc_fcntl(SB)
183+
GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $8
184+
DATA ·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB)
185+
181186
TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
182187
JMP libc_ppoll(SB)
183188
GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $8

unix/zsyscall_openbsd_mips64.go

+26
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

unix/zsyscall_openbsd_mips64.s

+5
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,11 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
178178
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8
179179
DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)
180180

181+
TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0
182+
JMP libc_fcntl(SB)
183+
GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $8
184+
DATA ·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB)
185+
181186
TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
182187
JMP libc_ppoll(SB)
183188
GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $8

unix/zsyscall_openbsd_ppc64.go

+26
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

unix/zsyscall_openbsd_ppc64.s

+6
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,12 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
213213
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8
214214
DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)
215215

216+
TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0
217+
CALL libc_fcntl(SB)
218+
RET
219+
GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $8
220+
DATA ·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB)
221+
216222
TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
217223
CALL libc_ppoll(SB)
218224
RET

unix/zsyscall_openbsd_riscv64.go

+26
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

unix/zsyscall_openbsd_riscv64.s

+5
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,11 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
178178
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8
179179
DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)
180180

181+
TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0
182+
JMP libc_fcntl(SB)
183+
GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $8
184+
DATA ·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB)
185+
181186
TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
182187
JMP libc_ppoll(SB)
183188
GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $8

0 commit comments

Comments
 (0)