src

Go monorepo.
git clone git://code.dwrz.net/src
Log | Files | Refs

syscall_linux_mipsx.go (5875B)


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