diff options
Diffstat (limited to 'src/pkg/syscall/syscall_linux_386.go')
| -rw-r--r-- | src/pkg/syscall/syscall_linux_386.go | 50 | 
1 files changed, 33 insertions, 17 deletions
| diff --git a/src/pkg/syscall/syscall_linux_386.go b/src/pkg/syscall/syscall_linux_386.go index 5bd3406de..2b6bdebf8 100644 --- a/src/pkg/syscall/syscall_linux_386.go +++ b/src/pkg/syscall/syscall_linux_386.go @@ -31,10 +31,10 @@ func NsecToTimeval(nsec int64) (tv Timeval) {  //sys	Fchown(fd int, uid int, gid int) (errno int) = SYS_FCHOWN32  //sys	Fstat(fd int, stat *Stat_t) (errno int) = SYS_FSTAT64  //sys	Ftruncate(fd int, length int64) (errno int) = SYS_FTRUNCATE64 -//sys	Getegid() (egid int) = SYS_GETEGID32 -//sys	Geteuid() (euid int) = SYS_GETEUID32 -//sys	Getgid() (gid int) = SYS_GETGID32 -//sys	Getuid() (uid int) = SYS_GETUID32 +//sysnb	Getegid() (egid int) = SYS_GETEGID32 +//sysnb	Geteuid() (euid int) = SYS_GETEUID32 +//sysnb	Getgid() (gid int) = SYS_GETGID32 +//sysnb	Getuid() (uid int) = SYS_GETUID32  //sys	Ioperm(from int, num int, on int) (errno int)  //sys	Iopl(level int) (errno int)  //sys	Lchown(path string, uid int, gid int) (errno int) = SYS_LCHOWN32 @@ -43,26 +43,36 @@ func NsecToTimeval(nsec int64) (tv Timeval) {  //sys	Pwrite(fd int, p []byte, offset int64) (n int, errno int) = SYS_PWRITE64  //sys	Setfsgid(gid int) (errno int) = SYS_SETFSGID32  //sys	Setfsuid(uid int) (errno int) = SYS_SETFSUID32 -//sys	Setgid(gid int) (errno int) = SYS_SETGID32 -//sys	Setregid(rgid int, egid int) (errno int) = SYS_SETREGID32 -//sys	Setresgid(rgid int, egid int, sgid int) (errno int) = SYS_SETRESGID32 -//sys	Setresuid(ruid int, euid int, suid int) (errno int) = SYS_SETRESUID32 -//sys	Setreuid(ruid int, euid int) (errno int) = SYS_SETREUID32 +//sysnb	Setgid(gid int) (errno int) = SYS_SETGID32 +//sysnb	Setregid(rgid int, egid int) (errno int) = SYS_SETREGID32 +//sysnb	Setresgid(rgid int, egid int, sgid int) (errno int) = SYS_SETRESGID32 +//sysnb	Setresuid(ruid int, euid int, suid int) (errno int) = SYS_SETRESUID32 +//sysnb	Setreuid(ruid int, euid int) (errno int) = SYS_SETREUID32  //sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, errno int)  //sys	Stat(path string, stat *Stat_t) (errno int) = SYS_STAT64  //sys	SyncFileRange(fd int, off int64, n int64, flags int) (errno int)  //sys	Truncate(path string, length int64) (errno int) = SYS_TRUNCATE64 -//sys	getgroups(n int, list *_Gid_t) (nn int, errno int) = SYS_GETGROUPS32 -//sys	setgroups(n int, list *_Gid_t) (errno int) = SYS_SETGROUPS32 +//sysnb	getgroups(n int, list *_Gid_t) (nn int, errno int) = SYS_GETGROUPS32 +//sysnb	setgroups(n int, list *_Gid_t) (errno int) = SYS_SETGROUPS32  //sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, errno int) = SYS__NEWSELECT +//sys	mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, errno int) + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, errno int) { +	page := uintptr(offset / 4096) +	if offset != int64(page)*4096 { +		return 0, EINVAL +	} +	return mmap2(addr, length, prot, flags, fd, page) +} +  // Underlying system call writes to newoffset via pointer.  // Implemented in assembly to avoid allocation.  func Seek(fd int, offset int64, whence int) (newoffset int64, errno int)  // Vsyscalls on amd64. -//sys	Gettimeofday(tv *Timeval) (errno int) -//sys	Time(t *Time_t) (tt Time_t, errno int) +//sysnb	Gettimeofday(tv *Timeval) (errno int) +//sysnb	Time(t *Time_t) (tt Time_t, errno int)  // On x86 Linux, all the socket calls go through an extra indirection,  // I think because the 5-register system call interface can't handle @@ -93,6 +103,7 @@ const (  )  func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, errno int) +func rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, errno int)  func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, errno int) {  	fd, errno = socketcall(_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) @@ -100,17 +111,17 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, errno int) {  }  func getsockname(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (errno int) { -	_, errno = socketcall(_GETSOCKNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) +	_, errno = rawsocketcall(_GETSOCKNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)  	return  }  func getpeername(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (errno int) { -	_, errno = socketcall(_GETPEERNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) +	_, errno = rawsocketcall(_GETPEERNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)  	return  }  func socketpair(domain int, typ int, flags int, fd *[2]int) (errno int) { -	_, errno = socketcall(_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd)), 0, 0) +	_, errno = rawsocketcall(_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd)), 0, 0)  	return  } @@ -125,7 +136,12 @@ func connect(s int, addr uintptr, addrlen _Socklen) (errno int) {  }  func socket(domain int, typ int, proto int) (fd int, errno int) { -	fd, errno = socketcall(_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0) +	fd, errno = rawsocketcall(_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0) +	return +} + +func getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (errno int) { +	_, errno = socketcall(_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)  	return  } | 
