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