OLD | NEW |
1 // Copyright 2009 The Go Authors. All rights reserved. | 1 // Copyright 2009 The Go Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style | 2 // Use of this source code is governed by a BSD-style |
3 // license that can be found in the LICENSE file. | 3 // license that can be found in the LICENSE file. |
4 | 4 |
5 // | 5 // |
6 // System calls and other sys.stuff for AMD64, Linux | 6 // System calls and other sys.stuff for AMD64, Linux |
7 // | 7 // |
8 | 8 |
9 #include "zasm_GOOS_GOARCH.h" | 9 #include "zasm_GOOS_GOARCH.h" |
10 #include "../../cmd/ld/textflag.h" | 10 #include "../../cmd/ld/textflag.h" |
11 | 11 |
12 TEXT runtime·exit(SB),NOSPLIT,$0-8 | 12 TEXT runtime·exit(SB),NOSPLIT,$0-4 |
13 » MOVL» 8(SP), DI | 13 » MOVL» code+0(FP), DI |
14 MOVL $231, AX // exitgroup - force all os threads to exit | 14 MOVL $231, AX // exitgroup - force all os threads to exit |
15 SYSCALL | 15 SYSCALL |
16 RET | 16 RET |
17 | 17 |
18 TEXT runtime·exit1(SB),NOSPLIT,$0-8 | 18 TEXT runtime·exit1(SB),NOSPLIT,$0-4 |
19 » MOVL» 8(SP), DI | 19 » MOVL» code+0(FP), DI |
20 MOVL $60, AX // exit - exit the current os thread | 20 MOVL $60, AX // exit - exit the current os thread |
21 SYSCALL | 21 SYSCALL |
22 RET | 22 RET |
23 | 23 |
24 TEXT runtime·open(SB),NOSPLIT,$0-16 | 24 TEXT runtime·open(SB),NOSPLIT,$0-20 |
25 » MOVQ» 8(SP), DI | 25 » MOVQ» name+0(FP), DI |
26 » MOVL» 16(SP), SI | 26 » MOVL» mode+8(FP), SI |
27 » MOVL» 20(SP), DX | 27 » MOVL» perm+12(FP), DX |
28 MOVL $2, AX // syscall entry | 28 MOVL $2, AX // syscall entry |
29 SYSCALL | 29 SYSCALL |
| 30 MOVL AX, ret+16(FP) |
30 RET | 31 RET |
31 | 32 |
32 TEXT runtime·close(SB),NOSPLIT,$0-16 | 33 TEXT runtime·close(SB),NOSPLIT,$0-12 |
33 » MOVL» 8(SP), DI | 34 » MOVL» fd+0(FP), DI |
34 MOVL $3, AX // syscall entry | 35 MOVL $3, AX // syscall entry |
35 SYSCALL | 36 SYSCALL |
| 37 MOVL AX, ret+8(FP) |
36 RET | 38 RET |
37 | 39 |
38 TEXT runtime·write(SB),NOSPLIT,$0-24 | 40 TEXT runtime·write(SB),NOSPLIT,$0-28 |
39 » MOVL» 8(SP), DI | 41 » MOVQ» fd+0(FP), DI |
40 » MOVQ» 16(SP), SI | 42 » MOVQ» p+8(FP), SI |
41 » MOVL» 24(SP), DX | 43 » MOVL» n+16(FP), DX |
42 MOVL $1, AX // syscall entry | 44 MOVL $1, AX // syscall entry |
43 SYSCALL | 45 SYSCALL |
| 46 MOVL AX, ret+24(FP) |
44 RET | 47 RET |
45 | 48 |
46 TEXT runtime·read(SB),NOSPLIT,$0-24 | 49 TEXT runtime·read(SB),NOSPLIT,$0-28 |
47 » MOVL» 8(SP), DI | 50 » MOVL» fd+0(FP), DI |
48 » MOVQ» 16(SP), SI | 51 » MOVQ» p+8(FP), SI |
49 » MOVL» 24(SP), DX | 52 » MOVL» n+16(FP), DX |
50 MOVL $0, AX // syscall entry | 53 MOVL $0, AX // syscall entry |
51 SYSCALL | 54 SYSCALL |
| 55 MOVL AX, ret+24(FP) |
52 RET | 56 RET |
53 | 57 |
54 TEXT runtime·getrlimit(SB),NOSPLIT,$0-24 | 58 TEXT runtime·getrlimit(SB),NOSPLIT,$0-20 |
55 » MOVL» 8(SP), DI | 59 » MOVL» kind+0(FP), DI |
56 » MOVQ» 16(SP), SI | 60 » MOVQ» limit+8(FP), SI |
57 MOVL $97, AX // syscall entry | 61 MOVL $97, AX // syscall entry |
58 SYSCALL | 62 SYSCALL |
| 63 MOVL AX, ret+16(FP) |
59 RET | 64 RET |
60 | 65 |
61 TEXT runtime·usleep(SB),NOSPLIT,$16 | 66 TEXT runtime·usleep(SB),NOSPLIT,$16 |
62 MOVL $0, DX | 67 MOVL $0, DX |
63 MOVL usec+0(FP), AX | 68 MOVL usec+0(FP), AX |
64 MOVL $1000000, CX | 69 MOVL $1000000, CX |
65 DIVL CX | 70 DIVL CX |
66 MOVQ AX, 0(SP) | 71 MOVQ AX, 0(SP) |
67 MOVQ DX, 8(SP) | 72 MOVQ DX, 8(SP) |
68 | 73 |
(...skipping 10 matching lines...) Expand all Loading... |
79 TEXT runtime·raise(SB),NOSPLIT,$0 | 84 TEXT runtime·raise(SB),NOSPLIT,$0 |
80 MOVL $186, AX // syscall - gettid | 85 MOVL $186, AX // syscall - gettid |
81 SYSCALL | 86 SYSCALL |
82 MOVL AX, DI // arg 1 tid | 87 MOVL AX, DI // arg 1 tid |
83 MOVL sig+0(FP), SI // arg 2 | 88 MOVL sig+0(FP), SI // arg 2 |
84 MOVL $200, AX // syscall - tkill | 89 MOVL $200, AX // syscall - tkill |
85 SYSCALL | 90 SYSCALL |
86 RET | 91 RET |
87 | 92 |
88 TEXT runtime·setitimer(SB),NOSPLIT,$0-24 | 93 TEXT runtime·setitimer(SB),NOSPLIT,$0-24 |
89 » MOVL» 8(SP), DI | 94 » MOVL» mode+0(FP), DI |
90 » MOVQ» 16(SP), SI | 95 » MOVQ» new+8(FP), SI |
91 » MOVQ» 24(SP), DX | 96 » MOVQ» old+16(FP), DX |
92 MOVL $38, AX // syscall entry | 97 MOVL $38, AX // syscall entry |
93 SYSCALL | 98 SYSCALL |
94 RET | 99 RET |
95 | 100 |
96 TEXT runtime·mincore(SB),NOSPLIT,$0-24 | 101 TEXT runtime·mincore(SB),NOSPLIT,$0-28 |
97 » MOVQ» 8(SP), DI | 102 » MOVQ» addr+0(FP), DI |
98 » MOVQ» 16(SP), SI | 103 » MOVQ» n+8(FP), SI |
99 » MOVQ» 24(SP), DX | 104 » MOVQ» dst+16(FP), DX |
100 MOVL $27, AX // syscall entry | 105 MOVL $27, AX // syscall entry |
101 SYSCALL | 106 SYSCALL |
| 107 MOVL AX, ret+24(FP) |
102 RET | 108 RET |
103 | 109 |
104 // func now() (sec int64, nsec int32) | 110 // func now() (sec int64, nsec int32) |
105 TEXT time·now(SB),NOSPLIT,$16 | 111 TEXT time·now(SB),NOSPLIT,$16 |
106 // Be careful. We're calling a function with gcc calling convention here
. | 112 // Be careful. We're calling a function with gcc calling convention here
. |
107 // We're guaranteed 128 bytes on entry, and we've taken 16, and the | 113 // We're guaranteed 128 bytes on entry, and we've taken 16, and the |
108 // call uses another 8. | 114 // call uses another 8. |
109 // That leaves 104 for the gettime code to use. Hope that's enough! | 115 // That leaves 104 for the gettime code to use. Hope that's enough! |
110 MOVQ runtime·__vdso_clock_gettime_sym(SB), AX | 116 MOVQ runtime·__vdso_clock_gettime_sym(SB), AX |
111 CMPQ AX, $0 | 117 CMPQ AX, $0 |
(...skipping 26 matching lines...) Expand all Loading... |
138 JEQ fallback_gtod_nt | 144 JEQ fallback_gtod_nt |
139 MOVL $1, DI // CLOCK_MONOTONIC | 145 MOVL $1, DI // CLOCK_MONOTONIC |
140 LEAQ 0(SP), SI | 146 LEAQ 0(SP), SI |
141 CALL AX | 147 CALL AX |
142 MOVQ 0(SP), AX // sec | 148 MOVQ 0(SP), AX // sec |
143 MOVQ 8(SP), DX // nsec | 149 MOVQ 8(SP), DX // nsec |
144 // sec is in AX, nsec in DX | 150 // sec is in AX, nsec in DX |
145 // return nsec in AX | 151 // return nsec in AX |
146 IMULQ $1000000000, AX | 152 IMULQ $1000000000, AX |
147 ADDQ DX, AX | 153 ADDQ DX, AX |
| 154 MOVQ AX, ret+0(FP) |
148 RET | 155 RET |
149 fallback_gtod_nt: | 156 fallback_gtod_nt: |
150 LEAQ 0(SP), DI | 157 LEAQ 0(SP), DI |
151 MOVQ $0, SI | 158 MOVQ $0, SI |
152 MOVQ runtime·__vdso_gettimeofday_sym(SB), AX | 159 MOVQ runtime·__vdso_gettimeofday_sym(SB), AX |
153 CALL AX | 160 CALL AX |
154 MOVQ 0(SP), AX // sec | 161 MOVQ 0(SP), AX // sec |
155 MOVL 8(SP), DX // usec | 162 MOVL 8(SP), DX // usec |
156 IMULQ $1000, DX | 163 IMULQ $1000, DX |
157 // sec is in AX, nsec in DX | 164 // sec is in AX, nsec in DX |
158 // return nsec in AX | 165 // return nsec in AX |
159 IMULQ $1000000000, AX | 166 IMULQ $1000000000, AX |
160 ADDQ DX, AX | 167 ADDQ DX, AX |
| 168 MOVQ AX, ret+0(FP) |
161 RET | 169 RET |
162 | 170 |
163 TEXT runtime·rtsigprocmask(SB),NOSPLIT,$0-32 | 171 TEXT runtime·rtsigprocmask(SB),NOSPLIT,$0-28 |
164 » MOVL» 8(SP), DI | 172 » MOVL» sig+0(FP), DI |
165 » MOVQ» 16(SP), SI | 173 » MOVQ» new+8(FP), SI |
166 » MOVQ» 24(SP), DX | 174 » MOVQ» old+16(FP), DX |
167 » MOVL» 32(SP), R10 | 175 » MOVL» size+24(FP), R10 |
168 MOVL $14, AX // syscall entry | 176 MOVL $14, AX // syscall entry |
169 SYSCALL | 177 SYSCALL |
170 CMPQ AX, $0xfffffffffffff001 | 178 CMPQ AX, $0xfffffffffffff001 |
171 JLS 2(PC) | 179 JLS 2(PC) |
172 MOVL $0xf1, 0xf1 // crash | 180 MOVL $0xf1, 0xf1 // crash |
173 RET | 181 RET |
174 | 182 |
175 TEXT runtime·rt_sigaction(SB),NOSPLIT,$0-32 | 183 TEXT runtime·rt_sigaction(SB),NOSPLIT,$0-36 |
176 » MOVL» 8(SP), DI | 184 » MOVQ» sig+0(FP), DI |
177 » MOVQ» 16(SP), SI | 185 » MOVQ» new+8(FP), SI |
178 » MOVQ» 24(SP), DX | 186 » MOVQ» old+16(FP), DX |
179 » MOVQ» 32(SP), R10 | 187 » MOVQ» size+24(FP), R10 |
180 MOVL $13, AX // syscall entry | 188 MOVL $13, AX // syscall entry |
181 SYSCALL | 189 SYSCALL |
| 190 MOVL AX, ret+32(FP) |
182 RET | 191 RET |
183 | 192 |
184 TEXT runtime·sigtramp(SB),NOSPLIT,$64 | 193 TEXT runtime·sigtramp(SB),NOSPLIT,$64 |
185 get_tls(BX) | 194 get_tls(BX) |
186 | 195 |
187 // check that g exists | 196 // check that g exists |
188 MOVQ g(BX), R10 | 197 MOVQ g(BX), R10 |
189 CMPQ R10, $0 | 198 CMPQ R10, $0 |
190 JNE 5(PC) | 199 JNE 5(PC) |
191 MOVQ DI, 0(SP) | 200 MOVQ DI, 0(SP) |
(...skipping 21 matching lines...) Expand all Loading... |
213 MOVQ 40(SP), R10 | 222 MOVQ 40(SP), R10 |
214 MOVQ R10, g(BX) | 223 MOVQ R10, g(BX) |
215 RET | 224 RET |
216 | 225 |
217 TEXT runtime·sigreturn(SB),NOSPLIT,$0 | 226 TEXT runtime·sigreturn(SB),NOSPLIT,$0 |
218 MOVL $15, AX // rt_sigreturn | 227 MOVL $15, AX // rt_sigreturn |
219 SYSCALL | 228 SYSCALL |
220 INT $3 // not reached | 229 INT $3 // not reached |
221 | 230 |
222 TEXT runtime·mmap(SB),NOSPLIT,$0 | 231 TEXT runtime·mmap(SB),NOSPLIT,$0 |
223 » MOVQ» 8(SP), DI | 232 » MOVQ» addr+0(FP), DI |
224 » MOVQ» 16(SP), SI | 233 » MOVQ» n+8(FP), SI |
225 » MOVL» 24(SP), DX | 234 » MOVL» prot+16(FP), DX |
226 » MOVL» 28(SP), R10 | 235 » MOVL» flags+20(FP), R10 |
227 » MOVL» 32(SP), R8 | 236 » MOVL» fd+24(FP), R8 |
228 » MOVL» 36(SP), R9 | 237 » MOVL» off+28(FP), R9 |
229 | 238 |
230 MOVL $9, AX // mmap | 239 MOVL $9, AX // mmap |
231 SYSCALL | 240 SYSCALL |
232 CMPQ AX, $0xfffffffffffff001 | 241 CMPQ AX, $0xfffffffffffff001 |
233 JLS 3(PC) | 242 JLS 3(PC) |
234 NOTQ AX | 243 NOTQ AX |
235 INCQ AX | 244 INCQ AX |
| 245 MOVQ AX, ret+32(FP) |
236 RET | 246 RET |
237 | 247 |
238 TEXT runtime·munmap(SB),NOSPLIT,$0 | 248 TEXT runtime·munmap(SB),NOSPLIT,$0 |
239 » MOVQ» 8(SP), DI | 249 » MOVQ» addr+0(FP), DI |
240 » MOVQ» 16(SP), SI | 250 » MOVQ» n+8(FP), SI |
241 MOVQ $11, AX // munmap | 251 MOVQ $11, AX // munmap |
242 SYSCALL | 252 SYSCALL |
243 CMPQ AX, $0xfffffffffffff001 | 253 CMPQ AX, $0xfffffffffffff001 |
244 JLS 2(PC) | 254 JLS 2(PC) |
245 MOVL $0xf1, 0xf1 // crash | 255 MOVL $0xf1, 0xf1 // crash |
246 RET | 256 RET |
247 | 257 |
248 TEXT runtime·madvise(SB),NOSPLIT,$0 | 258 TEXT runtime·madvise(SB),NOSPLIT,$0 |
249 » MOVQ» 8(SP), DI | 259 » MOVQ» addr+0(FP), DI |
250 » MOVQ» 16(SP), SI | 260 » MOVQ» n+8(FP), SI |
251 » MOVQ» 24(SP), DX | 261 » MOVL» flags+16(FP), DX |
252 MOVQ $28, AX // madvise | 262 MOVQ $28, AX // madvise |
253 SYSCALL | 263 SYSCALL |
254 // ignore failure - maybe pages are locked | 264 // ignore failure - maybe pages are locked |
255 RET | 265 RET |
256 | 266 |
257 // int64 futex(int32 *uaddr, int32 op, int32 val, | 267 // int64 futex(int32 *uaddr, int32 op, int32 val, |
258 // struct timespec *timeout, int32 *uaddr2, int32 val2); | 268 // struct timespec *timeout, int32 *uaddr2, int32 val2); |
259 TEXT runtime·futex(SB),NOSPLIT,$0 | 269 TEXT runtime·futex(SB),NOSPLIT,$0 |
260 » MOVQ» 8(SP), DI | 270 » MOVQ» addr+0(FP), DI |
261 » MOVL» 16(SP), SI | 271 » MOVL» op+8(FP), SI |
262 » MOVL» 20(SP), DX | 272 » MOVL» val+12(FP), DX |
263 » MOVQ» 24(SP), R10 | 273 » MOVQ» ts+16(FP), R10 |
264 » MOVQ» 32(SP), R8 | 274 » MOVQ» addr2+24(FP), R8 |
265 » MOVL» 40(SP), R9 | 275 » MOVL» val3+32(FP), R9 |
266 MOVL $202, AX | 276 MOVL $202, AX |
267 SYSCALL | 277 SYSCALL |
| 278 MOVL AX, ret+40(FP) |
268 RET | 279 RET |
269 | 280 |
270 // int64 clone(int32 flags, void *stack, M *mp, G *gp, void (*fn)(void)); | 281 // int32 clone(int32 flags, void *stack, M *mp, G *gp, void (*fn)(void)); |
271 TEXT runtime·clone(SB),NOSPLIT,$0 | 282 TEXT runtime·clone(SB),NOSPLIT,$0 |
272 MOVL flags+8(SP), DI | 283 MOVL flags+8(SP), DI |
273 MOVQ stack+16(SP), SI | 284 MOVQ stack+16(SP), SI |
274 | 285 |
275 // Copy mp, gp, fn off parent stack for use by child. | 286 // Copy mp, gp, fn off parent stack for use by child. |
276 // Careful: Linux system call clobbers CX and R11. | 287 // Careful: Linux system call clobbers CX and R11. |
277 MOVQ mm+24(SP), R8 | 288 MOVQ mm+24(SP), R8 |
278 MOVQ gg+32(SP), R9 | 289 MOVQ gg+32(SP), R9 |
279 MOVQ fn+40(SP), R12 | 290 MOVQ fn+40(SP), R12 |
280 | 291 |
281 MOVL $56, AX | 292 MOVL $56, AX |
282 SYSCALL | 293 SYSCALL |
283 | 294 |
284 // In parent, return. | 295 // In parent, return. |
285 CMPQ AX, $0 | 296 CMPQ AX, $0 |
286 » JEQ» 2(PC) | 297 » JEQ» 3(PC) |
| 298 » MOVL» AX, ret+40(FP) |
287 RET | 299 RET |
288 | 300 |
289 // In child, on new stack. | 301 // In child, on new stack. |
290 MOVQ SI, SP | 302 MOVQ SI, SP |
291 | 303 |
292 // Initialize m->procid to Linux tid | 304 // Initialize m->procid to Linux tid |
293 MOVL $186, AX // gettid | 305 MOVL $186, AX // gettid |
294 SYSCALL | 306 SYSCALL |
295 MOVQ AX, m_procid(R8) | 307 MOVQ AX, m_procid(R8) |
296 | 308 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
335 JLS 2(PC) | 347 JLS 2(PC) |
336 MOVL $0xf1, 0xf1 // crash | 348 MOVL $0xf1, 0xf1 // crash |
337 RET | 349 RET |
338 | 350 |
339 TEXT runtime·osyield(SB),NOSPLIT,$0 | 351 TEXT runtime·osyield(SB),NOSPLIT,$0 |
340 MOVL $24, AX | 352 MOVL $24, AX |
341 SYSCALL | 353 SYSCALL |
342 RET | 354 RET |
343 | 355 |
344 TEXT runtime·sched_getaffinity(SB),NOSPLIT,$0 | 356 TEXT runtime·sched_getaffinity(SB),NOSPLIT,$0 |
345 » MOVQ» 8(SP), DI | 357 » MOVQ» pid+0(FP), DI |
346 » MOVL» 16(SP), SI | 358 » MOVQ» len+8(FP), SI |
347 » MOVQ» 24(SP), DX | 359 » MOVQ» buf+16(FP), DX |
348 MOVL $204, AX // syscall entry | 360 MOVL $204, AX // syscall entry |
349 SYSCALL | 361 SYSCALL |
| 362 MOVL AX, ret+24(FP) |
350 RET | 363 RET |
351 | 364 |
352 // int32 runtime·epollcreate(int32 size); | 365 // int32 runtime·epollcreate(int32 size); |
353 TEXT runtime·epollcreate(SB),NOSPLIT,$0 | 366 TEXT runtime·epollcreate(SB),NOSPLIT,$0 |
354 » MOVL 8(SP), DI | 367 » MOVL size+0(FP), DI |
355 MOVL $213, AX // syscall entry | 368 MOVL $213, AX // syscall entry |
356 SYSCALL | 369 SYSCALL |
| 370 MOVL AX, ret+8(FP) |
357 RET | 371 RET |
358 | 372 |
359 // int32 runtime·epollcreate1(int32 flags); | 373 // int32 runtime·epollcreate1(int32 flags); |
360 TEXT runtime·epollcreate1(SB),NOSPLIT,$0 | 374 TEXT runtime·epollcreate1(SB),NOSPLIT,$0 |
361 » MOVL» 8(SP), DI | 375 » MOVL» flags+0(FP), DI |
362 MOVL $291, AX // syscall entry | 376 MOVL $291, AX // syscall entry |
363 SYSCALL | 377 SYSCALL |
| 378 MOVL AX, ret+8(FP) |
364 RET | 379 RET |
365 | 380 |
366 // int32 runtime·epollctl(int32 epfd, int32 op, int32 fd, EpollEvent *ev); | 381 // int32 runtime·epollctl(int32 epfd, int32 op, int32 fd, EpollEvent *ev); |
367 TEXT runtime·epollctl(SB),NOSPLIT,$0 | 382 TEXT runtime·epollctl(SB),NOSPLIT,$0 |
368 » MOVL» 8(SP), DI | 383 » MOVL» epfd+0(FP), DI |
369 » MOVL» 12(SP), SI | 384 » MOVL» op+4(FP), SI |
370 » MOVL» 16(SP), DX | 385 » MOVL» fd+8(FP), DX |
371 » MOVQ» 24(SP), R10 | 386 » MOVQ» ev+16(FP), R10 |
372 MOVL $233, AX // syscall entry | 387 MOVL $233, AX // syscall entry |
373 SYSCALL | 388 SYSCALL |
| 389 MOVL AX, ret+24(FP) |
374 RET | 390 RET |
375 | 391 |
376 // int32 runtime·epollwait(int32 epfd, EpollEvent *ev, int32 nev, int32 timeout)
; | 392 // int32 runtime·epollwait(int32 epfd, EpollEvent *ev, int32 nev, int32 timeout)
; |
377 TEXT runtime·epollwait(SB),NOSPLIT,$0 | 393 TEXT runtime·epollwait(SB),NOSPLIT,$0 |
378 » MOVL» 8(SP), DI | 394 » MOVL» epfd+0(FP), DI |
379 » MOVQ» 16(SP), SI | 395 » MOVQ» ev+8(FP), SI |
380 » MOVL» 24(SP), DX | 396 » MOVL» nev+16(FP), DX |
381 » MOVL» 28(SP), R10 | 397 » MOVL» timeout+20(FP), R10 |
382 MOVL $232, AX // syscall entry | 398 MOVL $232, AX // syscall entry |
383 SYSCALL | 399 SYSCALL |
| 400 MOVL AX, ret+24(FP) |
384 RET | 401 RET |
385 | 402 |
386 // void runtime·closeonexec(int32 fd); | 403 // void runtime·closeonexec(int32 fd); |
387 TEXT runtime·closeonexec(SB),NOSPLIT,$0 | 404 TEXT runtime·closeonexec(SB),NOSPLIT,$0 |
388 » MOVL 8(SP), DI // fd | 405 » MOVL fd+0(FP), DI // fd |
389 MOVQ $2, SI // F_SETFD | 406 MOVQ $2, SI // F_SETFD |
390 MOVQ $1, DX // FD_CLOEXEC | 407 MOVQ $1, DX // FD_CLOEXEC |
391 MOVL $72, AX // fcntl | 408 MOVL $72, AX // fcntl |
392 SYSCALL | 409 SYSCALL |
393 RET | 410 RET |
OLD | NEW |