OSDN Git Service

new repo
[bytom/vapor.git] / vendor / golang.org / x / sys / unix / syscall_linux_mipsx.go
1 // Copyright 2016 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 // +build linux
6 // +build mips mipsle
7
8 package unix
9
10 import (
11         "syscall"
12         "unsafe"
13 )
14
15 func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
16
17 //sys   Dup2(oldfd int, newfd int) (err error)
18 //sys   Fchown(fd int, uid int, gid int) (err error)
19 //sys   Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64
20 //sysnb Getegid() (egid int)
21 //sysnb Geteuid() (euid int)
22 //sysnb Getgid() (gid int)
23 //sysnb Getuid() (uid int)
24 //sys   Lchown(path string, uid int, gid int) (err error)
25 //sys   Listen(s int, n int) (err error)
26 //sys   Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
27 //sys   Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
28 //sys   Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
29 //sys   sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
30 //sys   Setfsgid(gid int) (err error)
31 //sys   Setfsuid(uid int) (err error)
32 //sysnb Setregid(rgid int, egid int) (err error)
33 //sysnb Setresgid(rgid int, egid int, sgid int) (err error)
34 //sysnb Setresuid(ruid int, euid int, suid int) (err error)
35
36 //sysnb Setreuid(ruid int, euid int) (err error)
37 //sys   Shutdown(fd int, how int) (err error)
38 //sys   Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
39
40 //sys   SyncFileRange(fd int, off int64, n int64, flags int) (err error)
41 //sys   Truncate(path string, length int64) (err error) = SYS_TRUNCATE64
42 //sys   accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
43 //sys   accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
44 //sys   bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
45 //sys   connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
46 //sysnb getgroups(n int, list *_Gid_t) (nn int, err error)
47 //sysnb setgroups(n int, list *_Gid_t) (err error)
48 //sys   getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
49 //sys   setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
50 //sysnb socket(domain int, typ int, proto int) (fd int, err error)
51 //sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
52 //sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
53 //sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
54 //sys   recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
55 //sys   sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
56 //sys   recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
57 //sys   sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
58
59 //sysnb InotifyInit() (fd int, err error)
60 //sys   Ioperm(from int, num int, on int) (err error)
61 //sys   Iopl(level int) (err error)
62
63 //sysnb Gettimeofday(tv *Timeval) (err error)
64 //sysnb Time(t *Time_t) (tt Time_t, err error)
65
66 //sys   Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
67 //sys   Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
68 //sys   Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
69
70 //sys   Utime(path string, buf *Utimbuf) (err error)
71 //sys   EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
72 //sys   Pause() (err error)
73
74 func Fstatfs(fd int, buf *Statfs_t) (err error) {
75         _, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
76         if e != 0 {
77                 err = errnoErr(e)
78         }
79         return
80 }
81
82 func Statfs(path string, buf *Statfs_t) (err error) {
83         p, err := BytePtrFromString(path)
84         if err != nil {
85                 return err
86         }
87         _, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(p)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
88         if e != 0 {
89                 err = errnoErr(e)
90         }
91         return
92 }
93
94 func Seek(fd int, offset int64, whence int) (off int64, err error) {
95         _, _, e := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offset>>32), uintptr(offset), uintptr(unsafe.Pointer(&off)), uintptr(whence), 0)
96         if e != 0 {
97                 err = errnoErr(e)
98         }
99         return
100 }
101
102 func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
103
104 func NsecToTimespec(nsec int64) (ts Timespec) {
105         ts.Sec = int32(nsec / 1e9)
106         ts.Nsec = int32(nsec % 1e9)
107         return
108 }
109
110 func NsecToTimeval(nsec int64) (tv Timeval) {
111         nsec += 999 // round up to microsecond
112         tv.Sec = int32(nsec / 1e9)
113         tv.Usec = int32(nsec % 1e9 / 1e3)
114         return
115 }
116
117 //sysnb pipe2(p *[2]_C_int, flags int) (err error)
118
119 func Pipe2(p []int, flags int) (err error) {
120         if len(p) != 2 {
121                 return EINVAL
122         }
123         var pp [2]_C_int
124         err = pipe2(&pp, flags)
125         p[0] = int(pp[0])
126         p[1] = int(pp[1])
127         return
128 }
129
130 func Pipe(p []int) (err error) {
131         if len(p) != 2 {
132                 return EINVAL
133         }
134         var pp [2]_C_int
135         err = pipe2(&pp, 0)
136         p[0] = int(pp[0])
137         p[1] = int(pp[1])
138         return
139 }
140
141 //sys   mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error)
142
143 func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
144         page := uintptr(offset / 4096)
145         if offset != int64(page)*4096 {
146                 return 0, EINVAL
147         }
148         return mmap2(addr, length, prot, flags, fd, page)
149 }
150
151 const rlimInf32 = ^uint32(0)
152 const rlimInf64 = ^uint64(0)
153
154 type rlimit32 struct {
155         Cur uint32
156         Max uint32
157 }
158
159 //sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT
160
161 func Getrlimit(resource int, rlim *Rlimit) (err error) {
162         err = prlimit(0, resource, nil, rlim)
163         if err != ENOSYS {
164                 return err
165         }
166
167         rl := rlimit32{}
168         err = getrlimit(resource, &rl)
169         if err != nil {
170                 return
171         }
172
173         if rl.Cur == rlimInf32 {
174                 rlim.Cur = rlimInf64
175         } else {
176                 rlim.Cur = uint64(rl.Cur)
177         }
178
179         if rl.Max == rlimInf32 {
180                 rlim.Max = rlimInf64
181         } else {
182                 rlim.Max = uint64(rl.Max)
183         }
184         return
185 }
186
187 //sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
188
189 func Setrlimit(resource int, rlim *Rlimit) (err error) {
190         err = prlimit(0, resource, rlim, nil)
191         if err != ENOSYS {
192                 return err
193         }
194
195         rl := rlimit32{}
196         if rlim.Cur == rlimInf64 {
197                 rl.Cur = rlimInf32
198         } else if rlim.Cur < uint64(rlimInf32) {
199                 rl.Cur = uint32(rlim.Cur)
200         } else {
201                 return EINVAL
202         }
203         if rlim.Max == rlimInf64 {
204                 rl.Max = rlimInf32
205         } else if rlim.Max < uint64(rlimInf32) {
206                 rl.Max = uint32(rlim.Max)
207         } else {
208                 return EINVAL
209         }
210
211         return setrlimit(resource, &rl)
212 }
213
214 func (r *PtraceRegs) PC() uint64 { return r.Epc }
215
216 func (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc }
217
218 func (iov *Iovec) SetLen(length int) {
219         iov.Len = uint32(length)
220 }
221
222 func (msghdr *Msghdr) SetControllen(length int) {
223         msghdr.Controllen = uint32(length)
224 }
225
226 func (cmsg *Cmsghdr) SetLen(length int) {
227         cmsg.Len = uint32(length)
228 }
229
230 //sys   poll(fds *PollFd, nfds int, timeout int) (n int, err error)
231
232 func Poll(fds []PollFd, timeout int) (n int, err error) {
233         if len(fds) == 0 {
234                 return poll(nil, 0, timeout)
235         }
236         return poll(&fds[0], len(fds), timeout)
237 }
238
239 func Getpagesize() int { return 4096 }