blob: 18bca568205f63e86d14740c6396133d5c6de812 [file] [log] [blame]
Shenghou Ma83116972013-02-13 01:03:25 +08001// 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 Pike8bca1482014-08-12 17:04:45 -07005#include "textflag.h"
Russ Cox860a6452014-09-12 00:55:24 -04006#include "funcdata.h"
Keith Randalldb324cc2013-08-12 10:24:30 -07007
Shenghou Ma83116972013-02-13 01:03:25 +08008//
9// System call support for ARM, NetBSD
10//
11
12// func Syscall(trap int32, a1, a2, a3 int32) (r1, r2, err int32);
13// func Syscall6(trap int32, a1, a2, a3, a4, a5, a6 int32) (r1, r2, err int32);
14// func Syscall9(trap int32, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int32)
15
Keith Randalldb324cc2013-08-12 10:24:30 -070016TEXT ·Syscall(SB),NOSPLIT,$0-28
Shenghou Ma83116972013-02-13 01:03:25 +080017 BL runtime·entersyscall(SB)
Russ Coxc72a2112015-02-23 10:56:10 -050018 MOVW trap+0(FP), R0 // sigcall num
19 MOVW a1+4(FP), R1 // a1
20 MOVW a2+8(FP), R2 // a2
21 MOVW a3+12(FP), R3 // a3
Shenghou Ma83116972013-02-13 01:03:25 +080022 SWI $0 // syscall
23 MOVW $0, R2
24 BCS error
Russ Coxc72a2112015-02-23 10:56:10 -050025 MOVW R0, r1+16(FP) // r1
26 MOVW R1, r2+20(FP) // r2
27 MOVW R2, err+24(FP) // err
Shenghou Ma83116972013-02-13 01:03:25 +080028 BL runtime·exitsyscall(SB)
29 RET
30error:
31 MOVW $-1, R3
Russ Coxc72a2112015-02-23 10:56:10 -050032 MOVW R3, r1+16(FP) // r1
33 MOVW R2, r2+20(FP) // r2
34 MOVW R0, err+24(FP) // err
Shenghou Ma83116972013-02-13 01:03:25 +080035 BL runtime·exitsyscall(SB)
36 RET
37
Keith Randalldb324cc2013-08-12 10:24:30 -070038TEXT ·Syscall6(SB),NOSPLIT,$0-40
Shenghou Ma83116972013-02-13 01:03:25 +080039 BL runtime·entersyscall(SB)
Russ Coxc72a2112015-02-23 10:56:10 -050040 MOVW trap+0(FP), R0 // sigcall num
41 MOVW a1+4(FP), R1 // a1
42 MOVW a2+8(FP), R2 // a2
43 MOVW a3+12(FP), R3 // a3
Shenghou Ma83116972013-02-13 01:03:25 +080044 MOVW R13, R4
Russ Coxc72a2112015-02-23 10:56:10 -050045 MOVW $a4+16(FP), R13 // a4 to a6 are passed on stack
Shenghou Ma83116972013-02-13 01:03:25 +080046 SWI $0 // syscall
47 MOVW R4, R13
48 MOVW $0, R2
49 BCS error6
Russ Coxc72a2112015-02-23 10:56:10 -050050 MOVW R0, r1+28(FP) // r1
51 MOVW R1, r2+32(FP) // r2
52 MOVW R2, err+36(FP) // err
Shenghou Ma83116972013-02-13 01:03:25 +080053 BL runtime·exitsyscall(SB)
54 RET
55error6:
56 MOVW $-1, R3
Russ Coxc72a2112015-02-23 10:56:10 -050057 MOVW R3, r1+28(FP) // r1
58 MOVW R2, r2+32(FP) // r2
59 MOVW R0, err+36(FP) // err
Shenghou Ma83116972013-02-13 01:03:25 +080060 BL runtime·exitsyscall(SB)
61 RET
62
Keith Randalldb324cc2013-08-12 10:24:30 -070063TEXT ·Syscall9(SB),NOSPLIT,$0-52
Shenghou Ma83116972013-02-13 01:03:25 +080064 BL runtime·entersyscall(SB)
Russ Coxc72a2112015-02-23 10:56:10 -050065 MOVW trap+0(FP), R0 // sigcall num
66 MOVW a1+4(FP), R1 // a1
67 MOVW a2+8(FP), R2 // a2
68 MOVW a3+12(FP), R3 // a3
Shenghou Ma83116972013-02-13 01:03:25 +080069 MOVW R13, R4
Russ Coxc72a2112015-02-23 10:56:10 -050070 MOVW $a4+16(FP), R13 // a4 to a9 are passed on stack
Shenghou Ma83116972013-02-13 01:03:25 +080071 SWI $0 // syscall
72 MOVW R4, R13
73 MOVW $0, R2
74 BCS error9
Russ Coxc72a2112015-02-23 10:56:10 -050075 MOVW R0, r1+40(FP) // r1
76 MOVW R1, r2+44(FP) // r2
77 MOVW R2, err+48(FP) // err
Shenghou Ma83116972013-02-13 01:03:25 +080078 BL runtime·exitsyscall(SB)
79 RET
80error9:
81 MOVW $-1, R3
Russ Coxc72a2112015-02-23 10:56:10 -050082 MOVW R3, r1+40(FP) // r1
83 MOVW R2, r2+44(FP) // r2
84 MOVW R0, err+48(FP) // err
Shenghou Ma83116972013-02-13 01:03:25 +080085 BL runtime·exitsyscall(SB)
86 RET
87
Keith Randalldb324cc2013-08-12 10:24:30 -070088TEXT ·RawSyscall(SB),NOSPLIT,$0-28
Russ Coxc72a2112015-02-23 10:56:10 -050089 MOVW trap+0(FP), R0 // sigcall num
90 MOVW a1+4(FP), R1 // a1
91 MOVW a2+8(FP), R2 // a2
92 MOVW a3+12(FP), R3 // a3
Shenghou Ma83116972013-02-13 01:03:25 +080093 SWI $0 // syscall
94 MOVW $0, R2
95 BCS errorr
Russ Coxc72a2112015-02-23 10:56:10 -050096 MOVW R0, r1+16(FP) // r1
97 MOVW R1, r2+20(FP) // r2
98 MOVW R2, err+24(FP) // err
Shenghou Ma83116972013-02-13 01:03:25 +080099 RET
100errorr:
101 MOVW $-1, R3
Russ Coxc72a2112015-02-23 10:56:10 -0500102 MOVW R3, r1+16(FP) // r1
103 MOVW R2, r2+20(FP) // r2
104 MOVW R0, err+24(FP) // err
Shenghou Ma83116972013-02-13 01:03:25 +0800105 RET
106
Keith Randalldb324cc2013-08-12 10:24:30 -0700107TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
Russ Coxc72a2112015-02-23 10:56:10 -0500108 MOVW trap+0(FP), R0 // sigcall num
109 MOVW a1+4(FP), R1 // a1
110 MOVW a2+8(FP), R2 // a2
111 MOVW a3+12(FP), R3 // a3
Shenghou Ma83116972013-02-13 01:03:25 +0800112 MOVW R13, R4
Russ Coxc72a2112015-02-23 10:56:10 -0500113 MOVW $a4+16(FP), R13 // a4 to a9 are passed on stack
Shenghou Ma83116972013-02-13 01:03:25 +0800114 SWI $0 // syscall
115 MOVW R4, R13
116 MOVW $0, R2
117 BCS errorr6
Russ Coxc72a2112015-02-23 10:56:10 -0500118 MOVW R0, r1+28(FP) // r1
119 MOVW R1, r2+32(FP) // r2
120 MOVW R2, err+36(FP) // err
Shenghou Ma83116972013-02-13 01:03:25 +0800121 RET
122errorr6:
123 MOVW $-1, R3
Russ Coxc72a2112015-02-23 10:56:10 -0500124 MOVW R3, r1+28(FP) // r1
125 MOVW R2, r2+32(FP) // r2
126 MOVW R0, err+36(FP) // err
Shenghou Ma83116972013-02-13 01:03:25 +0800127 RET