Skip to content

Commit 6c04c26

Browse files
4a6f656cbradfitz
authored andcommitted
syscall: add support for openbsd/arm64
Generated on OpenBSD 6.5. Updates #31656 Change-Id: I0a7ddeee42d982ecbc226e82dec983c63e6c836d Reviewed-on: https://go-review.googlesource.com/c/go/+/174120 Reviewed-by: Brad Fitzpatrick <[email protected]> Run-TryBot: Brad Fitzpatrick <[email protected]> TryBot-Result: Gobot Gobot <[email protected]>
1 parent 3d94dd7 commit 6c04c26

7 files changed

+3805
-0
lines changed

src/syscall/asm_openbsd_arm64.s

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
// Copyright 2019 The Go Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style
3+
// license that can be found in the LICENSE file.
4+
5+
#include "textflag.h"
6+
7+
// func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64);
8+
TEXT ·Syscall(SB),NOSPLIT,$0-56
9+
BL runtime·entersyscall(SB)
10+
MOVD a1+8(FP), R0
11+
MOVD a2+16(FP), R1
12+
MOVD a3+24(FP), R2
13+
MOVD $0, R3
14+
MOVD $0, R4
15+
MOVD $0, R5
16+
MOVD trap+0(FP), R8 // syscall number
17+
SVC
18+
BCC ok
19+
MOVD $-1, R4
20+
MOVD R4, r1+32(FP) // r1
21+
MOVD ZR, r2+40(FP) // r2
22+
MOVD R0, err+48(FP) // errno
23+
BL runtime·exitsyscall(SB)
24+
RET
25+
ok:
26+
MOVD R0, r1+32(FP) // r1
27+
MOVD R1, r2+40(FP) // r2
28+
MOVD ZR, err+48(FP) // errno
29+
BL runtime·exitsyscall(SB)
30+
RET
31+
32+
TEXT ·Syscall6(SB),NOSPLIT,$0-80
33+
BL runtime·entersyscall(SB)
34+
MOVD a1+8(FP), R0
35+
MOVD a2+16(FP), R1
36+
MOVD a3+24(FP), R2
37+
MOVD a4+32(FP), R3
38+
MOVD a5+40(FP), R4
39+
MOVD a6+48(FP), R5
40+
MOVD trap+0(FP), R8 // syscall number
41+
SVC
42+
BCC ok
43+
MOVD $-1, R4
44+
MOVD R4, r1+56(FP) // r1
45+
MOVD ZR, r2+64(FP) // r2
46+
MOVD R0, err+72(FP) // errno
47+
BL runtime·exitsyscall(SB)
48+
RET
49+
ok:
50+
MOVD R0, r1+56(FP) // r1
51+
MOVD R1, r2+64(FP) // r2
52+
MOVD ZR, err+72(FP) // errno
53+
BL runtime·exitsyscall(SB)
54+
RET
55+
56+
TEXT ·Syscall9(SB),NOSPLIT,$0-104
57+
BL runtime·entersyscall(SB)
58+
MOVD a1+8(FP), R0
59+
MOVD a2+16(FP), R1
60+
MOVD a3+24(FP), R2
61+
MOVD a4+32(FP), R3
62+
MOVD a5+40(FP), R4
63+
MOVD a6+48(FP), R5
64+
MOVD a7+56(FP), R6
65+
MOVD a8+64(FP), R7
66+
MOVD a9+72(FP), R8 // on stack
67+
MOVD R8, 8(RSP)
68+
MOVD trap+0(FP), R8 // syscall number
69+
SVC
70+
BCC ok
71+
MOVD $-1, R4
72+
MOVD R4, r1+80(FP) // r1
73+
MOVD ZR, r2+88(FP) // r2
74+
MOVD R0, err+96(FP) // errno
75+
BL runtime·exitsyscall(SB)
76+
RET
77+
ok:
78+
MOVD R0, r1+80(FP) // r1
79+
MOVD R1, r2+88(FP) // r2
80+
MOVD ZR, err+96(FP) // errno
81+
BL runtime·exitsyscall(SB)
82+
RET
83+
84+
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
85+
MOVD a1+8(FP), R0
86+
MOVD a2+16(FP), R1
87+
MOVD a3+24(FP), R2
88+
MOVD $0, R3
89+
MOVD $0, R4
90+
MOVD $0, R5
91+
MOVD trap+0(FP), R8 // syscall number
92+
SVC
93+
BCC ok
94+
MOVD $-1, R4
95+
MOVD R4, r1+32(FP) // r1
96+
MOVD ZR, r2+40(FP) // r2
97+
MOVD R0, err+48(FP) // errno
98+
RET
99+
ok:
100+
MOVD R0, r1+32(FP) // r1
101+
MOVD R1, r2+40(FP) // r2
102+
MOVD ZR, err+48(FP) // errno
103+
RET
104+
105+
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
106+
MOVD a1+8(FP), R0
107+
MOVD a2+16(FP), R1
108+
MOVD a3+24(FP), R2
109+
MOVD a4+32(FP), R3
110+
MOVD a5+40(FP), R4
111+
MOVD a6+48(FP), R5
112+
MOVD trap+0(FP), R8 // syscall number
113+
SVC
114+
BCC ok
115+
MOVD $-1, R4
116+
MOVD R4, r1+56(FP) // r1
117+
MOVD ZR, r2+64(FP) // r2
118+
MOVD R0, err+72(FP) // errno
119+
RET
120+
ok:
121+
MOVD R0, r1+56(FP) // r1
122+
MOVD R1, r2+64(FP) // r2
123+
MOVD ZR, err+72(FP) // errno
124+
RET

src/syscall/mkall.sh

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,16 @@ openbsd_arm)
314314
# API consistent between platforms.
315315
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
316316
;;
317+
openbsd_arm64)
318+
mkerrors="$mkerrors -m64"
319+
mksyscall="./mksyscall.pl -openbsd"
320+
mksysctl="./mksysctl_openbsd.pl"
321+
zsysctl="zsysctl_openbsd.go"
322+
mksysnum="curl -s 'http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_openbsd.pl"
323+
# Let the type of C char be signed to make the bare syscall
324+
# API consistent between platforms.
325+
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
326+
;;
317327
plan9_386)
318328
mkerrors=
319329
mksyscall="./mksyscall.pl -l32 -plan9"

src/syscall/syscall_openbsd_arm64.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// Copyright 2019 The Go Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style
3+
// license that can be found in the LICENSE file.
4+
5+
package syscall
6+
7+
func setTimespec(sec, nsec int64) Timespec {
8+
return Timespec{Sec: sec, Nsec: nsec}
9+
}
10+
11+
func setTimeval(sec, usec int64) Timeval {
12+
return Timeval{Sec: sec, Usec: usec}
13+
}
14+
15+
func SetKevent(k *Kevent_t, fd, mode, flags int) {
16+
k.Ident = uint64(fd)
17+
k.Filter = int16(mode)
18+
k.Flags = uint16(flags)
19+
}
20+
21+
func (iov *Iovec) SetLen(length int) {
22+
iov.Len = uint64(length)
23+
}
24+
25+
func (msghdr *Msghdr) SetControllen(length int) {
26+
msghdr.Controllen = uint32(length)
27+
}
28+
29+
func (cmsg *Cmsghdr) SetLen(length int) {
30+
cmsg.Len = uint32(length)
31+
}
32+
33+
// RTM_LOCK only exists in OpenBSD 6.3 and earlier.
34+
const RTM_LOCK = 0x8
35+
36+
// SYS___SYSCTL only exists in OpenBSD 5.8 and earlier, when it was
37+
// was renamed to SYS_SYSCTL.
38+
const SYS___SYSCTL = SYS_SYSCTL

0 commit comments

Comments
 (0)