Dave Cheney | 7c8280c | 2014-02-25 09:47:42 -0500 | [diff] [blame] | 1 | // Copyright 2013 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 | |
Rob Pike | 8bca148 | 2014-08-12 17:04:45 -0700 | [diff] [blame] | 5 | #include "textflag.h" |
Russ Cox | 860a645 | 2014-09-12 00:55:24 -0400 | [diff] [blame] | 6 | #include "funcdata.h" |
Dave Cheney | 7c8280c | 2014-02-25 09:47:42 -0500 | [diff] [blame] | 7 | #include "../runtime/syscall_nacl.h" |
| 8 | |
| 9 | // |
| 10 | // System call support for amd64, Native Client |
| 11 | // |
| 12 | |
| 13 | #define NACL_SYSCALL(code) \ |
| 14 | MOVL $(0x10000 + ((code)<<5)), AX; CALL AX |
| 15 | |
| 16 | #define NACL_SYSJMP(code) \ |
| 17 | MOVL $(0x10000 + ((code)<<5)), AX; JMP AX |
| 18 | |
Shenghou Ma | a6cb053 | 2015-01-08 21:49:28 -0500 | [diff] [blame] | 19 | TEXT ·Syscall(SB),NOSPLIT,$0-28 |
Dave Cheney | 7c8280c | 2014-02-25 09:47:42 -0500 | [diff] [blame] | 20 | CALL runtime·entersyscall(SB) |
| 21 | MOVL trap+0(FP), AX |
| 22 | MOVL a1+4(FP), DI |
| 23 | MOVL a2+8(FP), SI |
| 24 | MOVL a3+12(FP), DX |
| 25 | // more args would use CX, R8, R9 |
| 26 | SHLL $5, AX |
| 27 | ADDL $0x10000, AX |
| 28 | CALL AX |
| 29 | CMPL AX, $0 |
| 30 | JGE ok |
| 31 | MOVL $-1, r1+16(FP) |
| 32 | MOVL $-1, r2+20(FP) |
| 33 | NEGL AX |
Russ Cox | 7ad60b7 | 2014-05-15 16:47:53 -0400 | [diff] [blame] | 34 | MOVL AX, err+24(FP) |
Dave Cheney | 7c8280c | 2014-02-25 09:47:42 -0500 | [diff] [blame] | 35 | CALL runtime·exitsyscall(SB) |
| 36 | RET |
| 37 | ok: |
| 38 | MOVL AX, r1+16(FP) |
| 39 | MOVL DX, r2+20(FP) |
Russ Cox | 7ad60b7 | 2014-05-15 16:47:53 -0400 | [diff] [blame] | 40 | MOVL $0, err+24(FP) |
Dave Cheney | 7c8280c | 2014-02-25 09:47:42 -0500 | [diff] [blame] | 41 | CALL runtime·exitsyscall(SB) |
| 42 | RET |