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 2009 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"
#define SYS_ERRSTR 41 /* from zsysnum_plan9.go */
#define SYS_SEEK 39 /* from zsysnum_plan9.go */
// System call support for plan9 on arm
//func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err ErrorString)
TEXT ·Syscall(SB),NOSPLIT,$144-32
NO_LOCAL_POINTERS
BL runtime·entersyscall(SB)
MOVW $a1+4(FP), R0 // move syscall args
MOVW $sysargs-144(SP), R1
MOVM.IA (R0), [R2-R4]
MOVM.IA [R2-R4], (R1)
MOVW trap+0(FP), R0 // syscall num
SWI $0
MOVW $0, R2
MOVW $r1+16(FP), R3
MOVM.IA [R0,R2], (R3)
CMP $-1, R0
B.EQ syscallerr
BL runtime·exitsyscall(SB)
MOVW $·emptystring+0(SB), R2
B syscallok
syscallerr:
MOVW $errbuf-128(SP), R2
MOVW $128, R3
MOVM.IA [R2,R3], (R1)
MOVW $SYS_ERRSTR, R0
SWI $0
BL runtime·exitsyscall(SB)
BL runtime·gostring(SB)
MOVW $str-140(SP), R2
syscallok:
MOVW $err+24(FP), R1
MOVM.IA (R2), [R3-R4]
MOVM.IA [R3-R4], (R1)
RET
//func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err ErrorString)
// Actually Syscall5 but the rest of the code expects it to be named Syscall6.
TEXT ·Syscall6(SB),NOSPLIT,$144-44
NO_LOCAL_POINTERS
BL runtime·entersyscall(SB)
MOVW $a1+4(FP), R0 // move syscall args
MOVW $sysargs-144(SP), R1
MOVM.IA (R0), [R2-R6]
MOVM.IA [R2-R6], (R1)
MOVW trap+0(FP), R0 // syscall num
SWI $0
MOVW $0, R2
MOVW $r1+28(FP), R3
MOVM.IA.W [R0,R2], (R3)
CMP $-1, R0
B.EQ syscall6err
BL runtime·exitsyscall(SB)
MOVW $·emptystring+0(SB), R2
B syscall6ok
syscall6err:
MOVW $errbuf-128(SP), R2
MOVW $128, R3
MOVM.IA [R2,R3], (R1)
MOVW $SYS_ERRSTR, R0
SWI $0
BL runtime·exitsyscall(SB)
BL runtime·gostring(SB)
MOVW $str-140(SP), R2
syscall6ok:
MOVW $err+36(FP), R1
MOVM.IA (R2), [R3-R4]
MOVM.IA [R3-R4], (R1)
RET
//func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr)
TEXT ·RawSyscall(SB),NOSPLIT,$12-28
MOVW $a1+4(FP), R0 // move syscall args
MOVW $sysargs-12(SP), R1
MOVM.IA (R0), [R2-R4]
MOVM.IA [R2-R4], (R1)
MOVW trap+0(FP), R0 // syscall num
SWI $0
MOVW R0, r1+16(FP)
MOVW R0, r2+20(FP)
MOVW R0, err+24(FP)
RET
//func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)
// Actually RawSyscall5 but the rest of the code expects it to be named RawSyscall6.
TEXT ·RawSyscall6(SB),NOSPLIT,$20-40
MOVW $a1+4(FP), R0 // move syscall args
MOVW $sysargs-20(SP), R1
MOVM.IA (R0), [R2-R6]
MOVM.IA [R2-R6], (R1)
MOVW trap+0(FP), R0 // syscall num
SWI $0
MOVW R0, r1+28(FP)
MOVW R0, r2+32(FP)
MOVW R0, err+36(FP)
RET
//func seek(placeholder uintptr, fd int, offset int64, whence int) (newoffset int64, err string)
TEXT ·seek(SB),NOSPLIT,$20-36
NO_LOCAL_POINTERS
MOVW $newoffset_lo+20(FP), R6
MOVW R6, sysargs-20(SP) // dest for return value
MOVW $fd+4(FP), R0 // move syscall args
MOVW $sysarg1-16(SP), R1
MOVM.IA (R0), [R2-R5]
MOVM.IA [R2-R5], (R1)
MOVW $SYS_SEEK, R0 // syscall num
SWI $0
CMP $-1, R0
B.EQ seekerr
MOVW $·emptystring+0(SB), R2
B seekok
seekerr:
MOVW R0, 0(R6)
MOVW R0, 4(R6)
BL ·errstr(SB)
MOVW $ret-20(SP), R2
seekok:
MOVW $err+28(FP), R1
MOVM.IA (R2), [R3-R4]
MOVM.IA [R3-R4], (R1)
RET
|