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