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