lin
2025-06-05 ed3dd9d3e7519a82bb871d5eedb24a2fa0c91f47
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
 
#include "textflag.h"
#include "funcdata.h"
 
//
// System call support for ARM, OpenBSD
//
 
// func Syscall(trap int32, a1, a2, a3 int32) (r1, r2, err int32);
// func Syscall6(trap int32, a1, a2, a3, a4, a5, a6 int32) (r1, r2, err int32);
// func Syscall9(trap int32, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int32)
// func RawSyscall(trap int32, a1, a2, a3 int32) (r1, r2, err int32);
// func RawSyscall6(trap int32, a1, a2, a3, a4, a5, a6 int32) (r1, r2, err int32);
 
TEXT    ·Syscall(SB),NOSPLIT,$0-28
   BL runtime·entersyscall(SB)
   MOVW trap+0(FP), R12        // syscall number
   MOVW a1+4(FP), R0        // arg 1
   MOVW a2+8(FP), R1        // arg 2
   MOVW a3+12(FP), R2        // arg 3
   SWI $0
   MOVW $0, R2
   BCS error
   MOVW R0, r1+16(FP)        // ret 1
   MOVW R1, r2+20(FP)        // ret 2
   MOVW R2, err+24(FP)        // err
   BL runtime·exitsyscall(SB)
   RET
error:
   MOVW $-1, R3
   MOVW R3, r1+16(FP)        // ret 1
   MOVW R2, r2+20(FP)        // ret 2
   MOVW R0, err+24(FP)        // err
   BL runtime·exitsyscall(SB)
   RET
 
TEXT    ·Syscall6(SB),NOSPLIT,$0-40
   BL runtime·entersyscall(SB)
   MOVW trap+0(FP), R12        // syscall number
   MOVW a1+4(FP), R0        // arg 1
   MOVW a2+8(FP), R1        // arg 2
   MOVW a3+12(FP), R2        // arg 3
   MOVW a4+16(FP), R3        // arg 4
   MOVW R13, R4
   MOVW $a5+20(FP), R13        // arg 5 to arg 6 are passed on stack
   SWI $0
   MOVW R4, R13
   MOVW $0, R2
   BCS error6
   MOVW R0, r1+28(FP)        // ret 1
   MOVW R1, r2+32(FP)        // ret 2
   MOVW R2, err+36(FP)        // err
   BL runtime·exitsyscall(SB)
   RET
error6:
   MOVW $-1, R3
   MOVW R3, r1+28(FP)        // ret 1
   MOVW R2, r2+32(FP)        // ret 2
   MOVW R0, err+36(FP)        // err
   BL runtime·exitsyscall(SB)
   RET
 
TEXT    ·Syscall9(SB),NOSPLIT,$0-52
   BL runtime·entersyscall(SB)
   MOVW num+0(FP), R12        // syscall number
   MOVW a1+4(FP), R0        // arg 1
   MOVW a2+8(FP), R1        // arg 2
   MOVW a3+12(FP), R2        // arg 3
   MOVW a4+16(FP), R3        // arg 4
   MOVW R13, R4
   MOVW $a5+20(FP), R13        // arg 5 to arg 9 are passed on stack
   SWI $0
   MOVW R4, R13
   MOVW $0, R2
   BCS error9
   MOVW R0, r1+40(FP)        // ret 1
   MOVW R1, r2+44(FP)        // ret 2
   MOVW R2, err+48(FP)        // err
   BL runtime·exitsyscall(SB)
   RET
error9:
   MOVW $-1, R3
   MOVW R3, r1+40(FP)        // ret 1
   MOVW R2, r2+44(FP)        // ret 2
   MOVW R0, err+48(FP)        // err
   BL runtime·exitsyscall(SB)
   RET
 
TEXT    ·RawSyscall(SB),NOSPLIT,$0-28
   MOVW trap+0(FP), R12        // syscall number
   MOVW a1+4(FP), R0        // arg 1
   MOVW a2+8(FP), R1        // arg 2
   MOVW a3+12(FP), R2        // arg 3
   SWI $0
   MOVW $0, R2
   BCS errorr
   MOVW R0, r1+16(FP)        // ret 1
   MOVW R1, r2+20(FP)        // ret 2
   MOVW R2, err+24(FP)        // err
   RET
errorr:
   MOVW $-1, R3
   MOVW R3, r1+16(FP)        // ret 1
   MOVW R2, r2+20(FP)        // ret 2
   MOVW R0, err+24(FP)        // err
   RET
 
TEXT    ·RawSyscall6(SB),NOSPLIT,$0-40
   MOVW trap+0(FP), R12        // syscall number
   MOVW a1+4(FP), R0        // arg 1
   MOVW a2+8(FP), R1        // arg 2
   MOVW a3+12(FP), R2        // arg 3
   MOVW a4+16(FP), R3        // arg 4
   MOVW R13, R4
   MOVW $a5+20(FP), R13        // arg 5 to arg 6 are passed on stack
   SWI $0
   MOVW R4, R13
   MOVW $0, R2
   BCS errorr6
   MOVW R0, r1+28(FP)        // ret 1
   MOVW R1, r2+32(FP)        // ret 2
   MOVW R2, err+36(FP)        // err
   RET
errorr6:
   MOVW $-1, R3
   MOVW R3, r1+28(FP)        // ret 1
   MOVW R2, r2+32(FP)        // ret 2
   MOVW R0, err+36(FP)        // err
   RET