Text file
src/syscall/asm_unix_386.s
Documentation: syscall
1 // +build netbsd freebsd openbsd
2
3 // Copyright 2009 The Go Authors. All rights reserved.
4 // Use of this source code is governed by a BSD-style
5 // license that can be found in the LICENSE file.
6
7 #include "textflag.h"
8 #include "funcdata.h"
9
10 //
11 // System call support for some 386 unixes
12 //
13
14 // func Syscall(trap int32, a1, a2, a3 int32) (r1, r2, err int32);
15 // func Syscall6(trap int32, a1, a2, a3, a4, a5, a6 int32) (r1, r2, err int32);
16 // Trap # in AX, args on stack above caller pc.
17
18 TEXT ·Syscall(SB),NOSPLIT,$0-28
19 CALL runtime·entersyscall(SB)
20 MOVL trap+0(FP), AX // syscall entry
21 // slide args down on top of system call number
22 LEAL 8(SP), SI
23 LEAL 4(SP), DI
24 CLD
25 MOVSL
26 MOVSL
27 MOVSL
28 INT $0x80
29 JAE ok
30 MOVL $-1, r1+16(FP) // r1
31 MOVL $-1, r2+20(FP) // r2
32 MOVL AX, err+24(FP) // errno
33 CALL runtime·exitsyscall(SB)
34 RET
35 ok:
36 MOVL AX, r1+16(FP) // r1
37 MOVL DX, r2+20(FP) // r2
38 MOVL $0, err+24(FP) // errno
39 CALL runtime·exitsyscall(SB)
40 RET
41
42 TEXT ·Syscall6(SB),NOSPLIT,$0-40
43 CALL runtime·entersyscall(SB)
44 MOVL trap+0(FP), AX // syscall entry
45 // slide args down on top of system call number
46 LEAL 8(SP), SI
47 LEAL 4(SP), DI
48 CLD
49 MOVSL
50 MOVSL
51 MOVSL
52 MOVSL
53 MOVSL
54 MOVSL
55 INT $0x80
56 JAE ok6
57 MOVL $-1, r1+28(FP) // r1
58 MOVL $-1, r2+32(FP) // r2
59 MOVL AX, err+36(FP) // errno
60 CALL runtime·exitsyscall(SB)
61 RET
62 ok6:
63 MOVL AX, r1+28(FP) // r1
64 MOVL DX, r2+32(FP) // r2
65 MOVL $0, err+36(FP) // errno
66 CALL runtime·exitsyscall(SB)
67 RET
68
69 TEXT ·Syscall9(SB),NOSPLIT,$0-52
70 CALL runtime·entersyscall(SB)
71 MOVL num+0(FP), AX // syscall entry
72 // slide args down on top of system call number
73 LEAL 8(SP), SI
74 LEAL 4(SP), DI
75 CLD
76 MOVSL
77 MOVSL
78 MOVSL
79 MOVSL
80 MOVSL
81 MOVSL
82 MOVSL
83 MOVSL
84 MOVSL
85 INT $0x80
86 JAE ok9
87 MOVL $-1, r1+40(FP) // r1
88 MOVL $-1, r2+44(FP) // r2
89 MOVL AX, err+48(FP) // errno
90 CALL runtime·exitsyscall(SB)
91 RET
92 ok9:
93 MOVL AX, r1+40(FP) // r1
94 MOVL DX, r2+44(FP) // r2
95 MOVL $0, err+48(FP) // errno
96 CALL runtime·exitsyscall(SB)
97 RET
98
99 TEXT ·RawSyscall(SB),NOSPLIT,$0-28
100 MOVL trap+0(FP), AX // syscall entry
101 // slide args down on top of system call number
102 LEAL 8(SP), SI
103 LEAL 4(SP), DI
104 CLD
105 MOVSL
106 MOVSL
107 MOVSL
108 INT $0x80
109 JAE ok1
110 MOVL $-1, r1+16(FP) // r1
111 MOVL $-1, r2+20(FP) // r2
112 MOVL AX, err+24(FP) // errno
113 RET
114 ok1:
115 MOVL AX, r1+16(FP) // r1
116 MOVL DX, r2+20(FP) // r2
117 MOVL $0, err+24(FP) // errno
118 RET
119
120 TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
121 MOVL trap+0(FP), AX // syscall entry
122 // slide args down on top of system call number
123 LEAL 8(SP), SI
124 LEAL 4(SP), DI
125 CLD
126 MOVSL
127 MOVSL
128 MOVSL
129 MOVSL
130 MOVSL
131 MOVSL
132 INT $0x80
133 JAE ok2
134 MOVL $-1, r1+28(FP) // r1
135 MOVL $-1, r2+32(FP) // r2
136 MOVL AX, err+36(FP) // errno
137 RET
138 ok2:
139 MOVL AX, r1+28(FP) // r1
140 MOVL DX, r2+32(FP) // r2
141 MOVL $0, err+36(FP) // errno
142 RET
View as plain text