Source file src/syscall/syscall_linux_s390x.go
1
2
3
4
5 package syscall
6
7 import "unsafe"
8
9 const (
10 _SYS_dup = SYS_DUP2
11 _SYS_setgroups = SYS_SETGROUPS
12 )
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 func Time(t *Time_t) (tt Time_t, err error) {
52 var tv Timeval
53 err = Gettimeofday(&tv)
54 if err != nil {
55 return 0, err
56 }
57 if t != nil {
58 *t = Time_t(tv.Sec)
59 }
60 return Time_t(tv.Sec), nil
61 }
62
63 func setTimespec(sec, nsec int64) Timespec {
64 return Timespec{Sec: sec, Nsec: nsec}
65 }
66
67 func setTimeval(sec, usec int64) Timeval {
68 return Timeval{Sec: sec, Usec: usec}
69 }
70
71 func Pipe(p []int) (err error) {
72 if len(p) != 2 {
73 return EINVAL
74 }
75 var pp [2]_C_int
76 err = pipe2(&pp, 0)
77 p[0] = int(pp[0])
78 p[1] = int(pp[1])
79 return
80 }
81
82
83
84 func Pipe2(p []int, flags int) (err error) {
85 if len(p) != 2 {
86 return EINVAL
87 }
88 var pp [2]_C_int
89 err = pipe2(&pp, flags)
90 p[0] = int(pp[0])
91 p[1] = int(pp[1])
92 return
93 }
94
95
96
97 func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
98 mmap_args := [6]uintptr{addr, length, uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)}
99 r0, _, e1 := Syscall(SYS_MMAP, uintptr(unsafe.Pointer(&mmap_args[0])), 0, 0)
100 xaddr = uintptr(r0)
101 if e1 != 0 {
102 err = errnoErr(e1)
103 }
104 return
105 }
106
107
108
109
110
111
112 const (
113
114 _SOCKET = 1
115 _BIND = 2
116 _CONNECT = 3
117 _LISTEN = 4
118 _ACCEPT = 5
119 _GETSOCKNAME = 6
120 _GETPEERNAME = 7
121 _SOCKETPAIR = 8
122 _SEND = 9
123 _RECV = 10
124 _SENDTO = 11
125 _RECVFROM = 12
126 _SHUTDOWN = 13
127 _SETSOCKOPT = 14
128 _GETSOCKOPT = 15
129 _SENDMSG = 16
130 _RECVMSG = 17
131 _ACCEPT4 = 18
132 _RECVMMSG = 19
133 _SENDMMSG = 20
134 )
135
136 func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err Errno)
137 func rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err Errno)
138
139 func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
140 fd, e := socketcall(_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
141 if e != 0 {
142 err = e
143 }
144 return
145 }
146
147 func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
148 fd, e := socketcall(_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
149 if e != 0 {
150 err = e
151 }
152 return
153 }
154
155 func getsockname(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
156 _, e := rawsocketcall(_GETSOCKNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
157 if e != 0 {
158 err = e
159 }
160 return
161 }
162
163 func getpeername(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
164 _, e := rawsocketcall(_GETPEERNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
165 if e != 0 {
166 err = e
167 }
168 return
169 }
170
171 func socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) {
172 _, e := rawsocketcall(_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd)), 0, 0)
173 if e != 0 {
174 err = e
175 }
176 return
177 }
178
179 func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
180 _, e := socketcall(_BIND, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)
181 if e != 0 {
182 err = e
183 }
184 return
185 }
186
187 func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
188 _, e := socketcall(_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)
189 if e != 0 {
190 err = e
191 }
192 return
193 }
194
195 func socket(domain int, typ int, proto int) (fd int, err error) {
196 fd, e := rawsocketcall(_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0)
197 if e != 0 {
198 err = e
199 }
200 return
201 }
202
203 func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
204 _, e := socketcall(_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
205 if e != 0 {
206 err = e
207 }
208 return
209 }
210
211 func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
212 _, e := socketcall(_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), vallen, 0)
213 if e != 0 {
214 err = e
215 }
216 return
217 }
218
219 func recvfrom(s int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
220 var base uintptr
221 if len(p) > 0 {
222 base = uintptr(unsafe.Pointer(&p[0]))
223 }
224 n, e := socketcall(_RECVFROM, uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
225 if e != 0 {
226 err = e
227 }
228 return
229 }
230
231 func sendto(s int, p []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
232 var base uintptr
233 if len(p) > 0 {
234 base = uintptr(unsafe.Pointer(&p[0]))
235 }
236 _, e := socketcall(_SENDTO, uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(to), uintptr(addrlen))
237 if e != 0 {
238 err = e
239 }
240 return
241 }
242
243 func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
244 n, e := socketcall(_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)
245 if e != 0 {
246 err = e
247 }
248 return
249 }
250
251 func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
252 n, e := socketcall(_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)
253 if e != 0 {
254 err = e
255 }
256 return
257 }
258
259 func Listen(s int, n int) (err error) {
260 _, e := socketcall(_LISTEN, uintptr(s), uintptr(n), 0, 0, 0, 0)
261 if e != 0 {
262 err = e
263 }
264 return
265 }
266
267 func Shutdown(s, how int) (err error) {
268 _, e := socketcall(_SHUTDOWN, uintptr(s), uintptr(how), 0, 0, 0, 0)
269 if e != 0 {
270 err = e
271 }
272 return
273 }
274
275 func (r *PtraceRegs) PC() uint64 { return r.Psw.Addr }
276
277 func (r *PtraceRegs) SetPC(pc uint64) { r.Psw.Addr = pc }
278
279 func (iov *Iovec) SetLen(length int) {
280 iov.Len = uint64(length)
281 }
282
283 func (msghdr *Msghdr) SetControllen(length int) {
284 msghdr.Controllen = uint64(length)
285 }
286
287 func (cmsg *Cmsghdr) SetLen(length int) {
288 cmsg.Len = uint64(length)
289 }
290
291 func rawVforkSyscall(trap, a1 uintptr) (r1 uintptr, err Errno)
292
View as plain text