Text file
src/syscall/asm_plan9_amd64.s
1 // Copyright 2009 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 #include "funcdata.h"
7
8 //
9 // System call support for Plan 9
10 //
11
12 //func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err string)
13 //func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err string)
14 //func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr)
15 //func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)
16
17 #define SYS_ERRSTR 41 /* from zsysnum_plan9.go */
18
19 TEXT ·Syscall(SB),NOSPLIT,$168-64
20 NO_LOCAL_POINTERS
21 CALL runtime·entersyscall(SB)
22 MOVQ trap+0(FP), BP // syscall entry
23 // copy args down
24 LEAQ a1+8(FP), SI
25 LEAQ sysargs-160(SP), DI
26 CLD
27 MOVSQ
28 MOVSQ
29 MOVSQ
30 SYSCALL
31 MOVQ AX, r1+32(FP)
32 MOVQ $0, r2+40(FP)
33 CMPL AX, $-1
34 JNE ok3
35
36 LEAQ errbuf-128(SP), AX
37 MOVQ AX, sysargs-160(SP)
38 MOVQ $128, sysargs1-152(SP)
39 MOVQ $SYS_ERRSTR, BP
40 SYSCALL
41 CALL runtime·exitsyscall(SB)
42 MOVQ sysargs-160(SP), AX
43 MOVQ AX, errbuf-168(SP)
44 CALL runtime·gostring(SB)
45 LEAQ str-160(SP), SI
46 JMP copyresult3
47
48 ok3:
49 CALL runtime·exitsyscall(SB)
50 LEAQ ·emptystring(SB), SI
51
52 copyresult3:
53 LEAQ err+48(FP), DI
54
55 CLD
56 MOVSQ
57 MOVSQ
58
59 RET
60
61 TEXT ·Syscall6(SB),NOSPLIT,$168-88
62 NO_LOCAL_POINTERS
63 CALL runtime·entersyscall(SB)
64 MOVQ trap+0(FP), BP // syscall entry
65 // copy args down
66 LEAQ a1+8(FP), SI
67 LEAQ sysargs-160(SP), DI
68 CLD
69 MOVSQ
70 MOVSQ
71 MOVSQ
72 MOVSQ
73 MOVSQ
74 MOVSQ
75 SYSCALL
76 MOVQ AX, r1+56(FP)
77 MOVQ $0, r2+64(FP)
78 CMPL AX, $-1
79 JNE ok4
80
81 LEAQ errbuf-128(SP), AX
82 MOVQ AX, sysargs-160(SP)
83 MOVQ $128, sysargs1-152(SP)
84 MOVQ $SYS_ERRSTR, BP
85 SYSCALL
86 CALL runtime·exitsyscall(SB)
87 MOVQ sysargs-160(SP), AX
88 MOVQ AX, errbuf-168(SP)
89 CALL runtime·gostring(SB)
90 LEAQ str-160(SP), SI
91 JMP copyresult4
92
93 ok4:
94 CALL runtime·exitsyscall(SB)
95 LEAQ ·emptystring(SB), SI
96
97 copyresult4:
98 LEAQ err+72(FP), DI
99
100 CLD
101 MOVSQ
102 MOVSQ
103
104 RET
105
106 TEXT ·RawSyscall(SB),NOSPLIT,$0-56
107 MOVQ trap+0(FP), BP // syscall entry
108 // slide args down on top of system call number
109 LEAQ a1+8(FP), SI
110 LEAQ trap+0(FP), DI
111 CLD
112 MOVSQ
113 MOVSQ
114 MOVSQ
115 SYSCALL
116 MOVQ AX, r1+32(FP)
117 MOVQ AX, r2+40(FP)
118 MOVQ AX, err+48(FP)
119 RET
120
121 TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
122 MOVQ trap+0(FP), BP // syscall entry
123 // slide args down on top of system call number
124 LEAQ a1+8(FP), SI
125 LEAQ trap+0(FP), DI
126 CLD
127 MOVSQ
128 MOVSQ
129 MOVSQ
130 MOVSQ
131 MOVSQ
132 MOVSQ
133 SYSCALL
134 MOVQ AX, r1+56(FP)
135 MOVQ AX, r2+64(FP)
136 MOVQ AX, err+72(FP)
137 RET
138
139 #define SYS_SEEK 39 /* from zsysnum_plan9.go */
140
141 //func seek(placeholder uintptr, fd int, offset int64, whence int) (newoffset int64, err string)
142 TEXT ·seek(SB),NOSPLIT,$48-56
143 NO_LOCAL_POINTERS
144 LEAQ newoffset+32(FP), AX
145 MOVQ AX, placeholder+0(FP)
146
147 // copy args down
148 LEAQ placeholder+0(FP), SI
149 LEAQ sysargs-40(SP), DI
150 CLD
151 MOVSQ
152 MOVSQ
153 MOVSQ
154 MOVSQ
155 MOVSQ
156 MOVQ $SYS_SEEK, BP // syscall entry
157 SYSCALL
158
159 CMPL AX, $-1
160 JNE ok6
161 MOVQ AX, newoffset+32(FP)
162
163 CALL syscall·errstr(SB)
164 MOVQ SP, SI
165 JMP copyresult6
166
167 ok6:
168 LEAQ ·emptystring(SB), SI
169
170 copyresult6:
171 LEAQ err+40(FP), DI
172
173 CLD
174 MOVSQ
175 MOVSQ
176 RET
177
View as plain text