usb-ks

USB Killswitch
git clone git://git.laack.co/usb-ks.git
Log | Files | Refs | README | LICENSE

syscall_linux_mipsx.go (6768B)


      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	EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
     19 //sys	Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
     20 //sys	Fchown(fd int, uid int, gid int) (err error)
     21 //sys	Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64
     22 //sysnb	Getegid() (egid int)
     23 //sysnb	Geteuid() (euid int)
     24 //sysnb	Getgid() (gid int)
     25 //sysnb	Getuid() (uid int)
     26 //sys	Lchown(path string, uid int, gid int) (err error)
     27 //sys	Listen(s int, n int) (err error)
     28 //sys	pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
     29 //sys	pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
     30 //sys	Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
     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) (prev int, err error)
     34 //sys	setfsuid(uid int) (prev 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 //sysnb	Setreuid(ruid int, euid int) (err error)
     39 //sys	Shutdown(fd int, how int) (err error)
     40 //sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
     41 //sys	SyncFileRange(fd int, off int64, n int64, flags int) (err error)
     42 //sys	Truncate(path string, length int64) (err error) = SYS_TRUNCATE64
     43 //sys	Ustat(dev int, ubuf *Ustat_t) (err error)
     44 //sys	accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
     45 //sys	bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
     46 //sys	connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
     47 //sysnb	getgroups(n int, list *_Gid_t) (nn int, err error)
     48 //sysnb	setgroups(n int, list *_Gid_t) (err error)
     49 //sys	getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
     50 //sys	setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
     51 //sysnb	socket(domain int, typ int, proto int) (fd int, err error)
     52 //sysnb	socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
     53 //sysnb	getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
     54 //sysnb	getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
     55 //sys	recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
     56 //sys	sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
     57 //sys	recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
     58 //sys	sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
     59 
     60 //sys	Ioperm(from int, num int, on int) (err error)
     61 //sys	Iopl(level int) (err error)
     62 
     63 //sys	futimesat(dirfd int, path string, times *[2]Timeval) (err error)
     64 //sysnb	Gettimeofday(tv *Timeval) (err error)
     65 //sysnb	Time(t *Time_t) (tt Time_t, err error)
     66 //sys	Utime(path string, buf *Utimbuf) (err error)
     67 //sys	utimes(path string, times *[2]Timeval) (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	Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
     72 //sys	Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
     73 
     74 //sys	Pause() (err error)
     75 
     76 func Fstatfs(fd int, buf *Statfs_t) (err error) {
     77 	_, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
     78 	if e != 0 {
     79 		err = errnoErr(e)
     80 	}
     81 	return
     82 }
     83 
     84 func Statfs(path string, buf *Statfs_t) (err error) {
     85 	p, err := BytePtrFromString(path)
     86 	if err != nil {
     87 		return err
     88 	}
     89 	_, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(p)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
     90 	if e != 0 {
     91 		err = errnoErr(e)
     92 	}
     93 	return
     94 }
     95 
     96 func Seek(fd int, offset int64, whence int) (off int64, err error) {
     97 	_, _, e := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offset>>32), uintptr(offset), uintptr(unsafe.Pointer(&off)), uintptr(whence), 0)
     98 	if e != 0 {
     99 		err = errnoErr(e)
    100 	}
    101 	return
    102 }
    103 
    104 func setTimespec(sec, nsec int64) Timespec {
    105 	return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
    106 }
    107 
    108 func setTimeval(sec, usec int64) Timeval {
    109 	return Timeval{Sec: int32(sec), Usec: int32(usec)}
    110 }
    111 
    112 //sys	mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error)
    113 
    114 func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
    115 	page := uintptr(offset / 4096)
    116 	if offset != int64(page)*4096 {
    117 		return 0, EINVAL
    118 	}
    119 	return mmap2(addr, length, prot, flags, fd, page)
    120 }
    121 
    122 const rlimInf32 = ^uint32(0)
    123 const rlimInf64 = ^uint64(0)
    124 
    125 type rlimit32 struct {
    126 	Cur uint32
    127 	Max uint32
    128 }
    129 
    130 //sysnb	getrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT
    131 
    132 func Getrlimit(resource int, rlim *Rlimit) (err error) {
    133 	err = Prlimit(0, resource, nil, rlim)
    134 	if err != ENOSYS {
    135 		return err
    136 	}
    137 
    138 	rl := rlimit32{}
    139 	err = getrlimit(resource, &rl)
    140 	if err != nil {
    141 		return
    142 	}
    143 
    144 	if rl.Cur == rlimInf32 {
    145 		rlim.Cur = rlimInf64
    146 	} else {
    147 		rlim.Cur = uint64(rl.Cur)
    148 	}
    149 
    150 	if rl.Max == rlimInf32 {
    151 		rlim.Max = rlimInf64
    152 	} else {
    153 		rlim.Max = uint64(rl.Max)
    154 	}
    155 	return
    156 }
    157 
    158 //sysnb	setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
    159 
    160 func Setrlimit(resource int, rlim *Rlimit) (err error) {
    161 	err = Prlimit(0, resource, rlim, nil)
    162 	if err != ENOSYS {
    163 		return err
    164 	}
    165 
    166 	rl := rlimit32{}
    167 	if rlim.Cur == rlimInf64 {
    168 		rl.Cur = rlimInf32
    169 	} else if rlim.Cur < uint64(rlimInf32) {
    170 		rl.Cur = uint32(rlim.Cur)
    171 	} else {
    172 		return EINVAL
    173 	}
    174 	if rlim.Max == rlimInf64 {
    175 		rl.Max = rlimInf32
    176 	} else if rlim.Max < uint64(rlimInf32) {
    177 		rl.Max = uint32(rlim.Max)
    178 	} else {
    179 		return EINVAL
    180 	}
    181 
    182 	return setrlimit(resource, &rl)
    183 }
    184 
    185 func (r *PtraceRegs) PC() uint64 { return r.Epc }
    186 
    187 func (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc }
    188 
    189 func (iov *Iovec) SetLen(length int) {
    190 	iov.Len = uint32(length)
    191 }
    192 
    193 func (msghdr *Msghdr) SetControllen(length int) {
    194 	msghdr.Controllen = uint32(length)
    195 }
    196 
    197 func (msghdr *Msghdr) SetIovlen(length int) {
    198 	msghdr.Iovlen = uint32(length)
    199 }
    200 
    201 func (cmsg *Cmsghdr) SetLen(length int) {
    202 	cmsg.Len = uint32(length)
    203 }
    204 
    205 func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
    206 	rsa.Service_name_len = uint32(length)
    207 }