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