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