blob: 6458bdf0204fb7cd4c75921ebe846644e1d6bb9b [file] [log] [blame]
Joel Sing88e984f2011-08-29 10:04:28 -04001// 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
Russ Cox7ad60b72014-05-15 16:47:53 -04005// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP)
6// so that go vet can check that they are correct.
7
Rob Pike8bca1482014-08-12 17:04:45 -07008#include "textflag.h"
Russ Cox860a6452014-09-12 00:55:24 -04009#include "funcdata.h"
Keith Randalldb324cc2013-08-12 10:24:30 -070010
Joel Sing88e984f2011-08-29 10:04:28 -040011//
12// System call support for 386, OpenBSD
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
Russ Cox7ad60b72014-05-15 16:47:53 -040019TEXT ·Syscall(SB),NOSPLIT,$0-28
Joel Sing88e984f2011-08-29 10:04:28 -040020 CALL runtime·entersyscall(SB)
21 MOVL 4(SP), AX // syscall entry
22 // slide args down on top of system call number
23 LEAL 8(SP), SI
24 LEAL 4(SP), DI
25 CLD
26 MOVSL
27 MOVSL
28 MOVSL
29 INT $0x80
30 JAE ok
31 MOVL $-1, 20(SP) // r1
32 MOVL $-1, 24(SP) // r2
33 MOVL AX, 28(SP) // errno
34 CALL runtime·exitsyscall(SB)
35 RET
36ok:
37 MOVL AX, 20(SP) // r1
38 MOVL DX, 24(SP) // r2
39 MOVL $0, 28(SP) // errno
40 CALL runtime·exitsyscall(SB)
41 RET
42
Russ Cox7ad60b72014-05-15 16:47:53 -040043TEXT ·Syscall6(SB),NOSPLIT,$0-40
Joel Sing88e984f2011-08-29 10:04:28 -040044 CALL runtime·entersyscall(SB)
45 MOVL 4(SP), AX // syscall entry
46 // slide args down on top of system call number
47 LEAL 8(SP), SI
48 LEAL 4(SP), DI
49 CLD
50 MOVSL
51 MOVSL
52 MOVSL
53 MOVSL
54 MOVSL
55 MOVSL
56 INT $0x80
57 JAE ok6
58 MOVL $-1, 32(SP) // r1
59 MOVL $-1, 36(SP) // r2
60 MOVL AX, 40(SP) // errno
61 CALL runtime·exitsyscall(SB)
62 RET
63ok6:
64 MOVL AX, 32(SP) // r1
65 MOVL DX, 36(SP) // r2
66 MOVL $0, 40(SP) // errno
67 CALL runtime·exitsyscall(SB)
68 RET
69
Russ Cox7ad60b72014-05-15 16:47:53 -040070TEXT ·Syscall9(SB),NOSPLIT,$0-52
Joel Sing88e984f2011-08-29 10:04:28 -040071 CALL runtime·entersyscall(SB)
72 MOVL 4(SP), AX // syscall entry
73 // slide args down on top of system call number
74 LEAL 8(SP), SI
75 LEAL 4(SP), 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, 44(SP) // r1
89 MOVL $-1, 48(SP) // r2
90 MOVL AX, 52(SP) // errno
91 CALL runtime·exitsyscall(SB)
92 RET
93ok9:
94 MOVL AX, 44(SP) // r1
95 MOVL DX, 48(SP) // r2
96 MOVL $0, 52(SP) // errno
97 CALL runtime·exitsyscall(SB)
98 RET
99
Russ Cox7ad60b72014-05-15 16:47:53 -0400100TEXT ·RawSyscall(SB),NOSPLIT,$0-28
Joel Sing88e984f2011-08-29 10:04:28 -0400101 MOVL 4(SP), AX // syscall entry
102 // slide args down on top of system call number
103 LEAL 8(SP), SI
104 LEAL 4(SP), DI
105 CLD
106 MOVSL
107 MOVSL
108 MOVSL
109 INT $0x80
110 JAE ok1
111 MOVL $-1, 20(SP) // r1
112 MOVL $-1, 24(SP) // r2
113 MOVL AX, 28(SP) // errno
114 RET
115ok1:
116 MOVL AX, 20(SP) // r1
117 MOVL DX, 24(SP) // r2
118 MOVL $0, 28(SP) // errno
119 RET
120
Russ Cox7ad60b72014-05-15 16:47:53 -0400121TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
Joel Sing88e984f2011-08-29 10:04:28 -0400122 MOVL 4(SP), AX // syscall entry
123 // slide args down on top of system call number
124 LEAL 8(SP), SI
125 LEAL 4(SP), DI
126 CLD
127 MOVSL
128 MOVSL
129 MOVSL
130 MOVSL
131 MOVSL
132 MOVSL
133 INT $0x80
134 JAE ok2
135 MOVL $-1, 32(SP) // r1
136 MOVL $-1, 36(SP) // r2
137 MOVL AX, 40(SP) // errno
138 RET
139ok2:
140 MOVL AX, 32(SP) // r1
141 MOVL DX, 36(SP) // r2
142 MOVL $0, 40(SP) // errno
143 RET