386 system call fixes:
* use 64-bit file system calls (Linux, Darwin)
* use 32-bit [sic] uid/gid calls (Linux)
* fix sockets on Linux
Darwin/386 works again.
Linux/386 is better but must never have worked;
there are still bugs surrounding the creation of new
threads in the runtime package.
R=austin
DELTA=1332 (673 added, 614 deleted, 45 changed)
OCL=30327
CL=30380
diff --git a/src/pkg/syscall/zsyscall_linux_amd64.go b/src/pkg/syscall/zsyscall_linux_amd64.go
index 490ffc3..6d5c753 100644
--- a/src/pkg/syscall/zsyscall_linux_amd64.go
+++ b/src/pkg/syscall/zsyscall_linux_amd64.go
@@ -35,19 +35,6 @@
return;
}
-func getgroups(n int, list *_Gid_t) (nn int, errno int) {
- r0, r1, e1 := Syscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0);
- nn = int(r0);
- errno = int(e1);
- return;
-}
-
-func setgroups(n int, list *_Gid_t) (errno int) {
- r0, r1, e1 := Syscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0);
- errno = int(e1);
- return;
-}
-
func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, errno int) {
r0, r1, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0);
wpid = int(r0);
@@ -86,12 +73,6 @@
return;
}
-func Chown(path string, uid int, gid int) (errno int) {
- r0, r1, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(uid), uintptr(gid));
- errno = int(e1);
- return;
-}
-
func Chroot(path string) (errno int) {
r0, r1, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(StringBytePtr(path))), 0, 0);
errno = int(e1);
@@ -182,12 +163,6 @@
return;
}
-func Fchown(fd int, uid int, gid int) (errno int) {
- r0, r1, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid));
- errno = int(e1);
- return;
-}
-
func Fchownat(dirfd int, path string, uid int, gid int, flags int) (errno int) {
r0, r1, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(uid), uintptr(gid), uintptr(flags), 0);
errno = int(e1);
@@ -207,18 +182,6 @@
return;
}
-func Fstat(fd int, stat *Stat_t) (errno int) {
- r0, r1, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0);
- errno = int(e1);
- return;
-}
-
-func Fstatfs(fd int, buf *Statfs_t) (errno int) {
- r0, r1, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0);
- errno = int(e1);
- return;
-}
-
func Fsync(fd int) (errno int) {
r0, r1, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0);
errno = int(e1);
@@ -240,24 +203,6 @@
return;
}
-func Getegid() (egid int) {
- r0, r1, e1 := Syscall(SYS_GETEGID, 0, 0, 0);
- egid = int(r0);
- return;
-}
-
-func Geteuid() (euid int) {
- r0, r1, e1 := Syscall(SYS_GETEUID, 0, 0, 0);
- euid = int(r0);
- return;
-}
-
-func Getgid() (gid int) {
- r0, r1, e1 := Syscall(SYS_GETGID, 0, 0, 0);
- gid = int(r0);
- return;
-}
-
func Getpgid(pid int) (pgid int, errno int) {
r0, r1, e1 := Syscall(SYS_GETPGID, uintptr(pid), 0, 0);
pgid = int(r0);
@@ -307,12 +252,6 @@
return;
}
-func Getuid() (uid int) {
- r0, r1, e1 := Syscall(SYS_GETUID, 0, 0, 0);
- uid = int(r0);
- return;
-}
-
func Ioperm(from int, num int, on int) (errno int) {
r0, r1, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on));
errno = int(e1);
@@ -340,24 +279,12 @@
return;
}
-func Lchown(path string, uid int, gid int) (errno int) {
- r0, r1, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(uid), uintptr(gid));
- errno = int(e1);
- return;
-}
-
func Link(oldpath string, newpath string) (errno int) {
r0, r1, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(StringBytePtr(oldpath))), uintptr(unsafe.Pointer(StringBytePtr(newpath))), 0);
errno = int(e1);
return;
}
-func Lstat(path string, stat *Stat_t) (errno int) {
- r0, r1, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(unsafe.Pointer(stat)), 0);
- errno = int(e1);
- return;
-}
-
func Mkdir(path string, mode int) (errno int) {
r0, r1, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(mode), 0);
errno = int(e1);
@@ -468,13 +395,6 @@
return;
}
-func Seek(fd int, offset int64, whence int) (off int64, errno int) {
- r0, r1, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence));
- off = int64(r0);
- errno = int(e1);
- return;
-}
-
func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, errno int) {
r0, r1, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0);
n = int(r0);
@@ -490,24 +410,6 @@
return;
}
-func Setfsgid(gid int) (errno int) {
- r0, r1, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0);
- errno = int(e1);
- return;
-}
-
-func Setfsuid(uid int) (errno int) {
- r0, r1, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0);
- errno = int(e1);
- return;
-}
-
-func Setgid(gid int) (errno int) {
- r0, r1, e1 := Syscall(SYS_SETGID, uintptr(gid), 0, 0);
- errno = int(e1);
- return;
-}
-
func Sethostname(p []byte) (errno int) {
var _p0 *byte;
if len(p) > 0 { _p0 = &p[0]; }
@@ -522,30 +424,6 @@
return;
}
-func Setregid(rgid int, egid int) (errno int) {
- r0, r1, e1 := Syscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0);
- errno = int(e1);
- return;
-}
-
-func Setresgid(rgid int, egid int, sgid int) (errno int) {
- r0, r1, e1 := Syscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid));
- errno = int(e1);
- return;
-}
-
-func Setresuid(ruid int, euid int, suid int) (errno int) {
- r0, r1, e1 := Syscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid));
- errno = int(e1);
- return;
-}
-
-func Setreuid(ruid int, euid int) (errno int) {
- r0, r1, e1 := Syscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0);
- errno = int(e1);
- return;
-}
-
func Setrlimit(resource int, rlim *Rlimit) (errno int) {
r0, r1, e1 := Syscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0);
errno = int(e1);
@@ -577,18 +455,6 @@
return;
}
-func Stat(path string, stat *Stat_t) (errno int) {
- r0, r1, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(unsafe.Pointer(stat)), 0);
- errno = int(e1);
- return;
-}
-
-func Statfs(path string, buf *Statfs_t) (errno int) {
- r0, r1, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(unsafe.Pointer(buf)), 0);
- errno = int(e1);
- return;
-}
-
func Symlink(oldpath string, newpath string) (errno int) {
r0, r1, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(StringBytePtr(oldpath))), uintptr(unsafe.Pointer(StringBytePtr(newpath))), 0);
errno = int(e1);
@@ -716,6 +582,139 @@
return;
}
+func Chown(path string, uid int, gid int) (errno int) {
+ r0, r1, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(uid), uintptr(gid));
+ errno = int(e1);
+ return;
+}
+
+func Fchown(fd int, uid int, gid int) (errno int) {
+ r0, r1, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid));
+ errno = int(e1);
+ return;
+}
+
+func Fstat(fd int, stat *Stat_t) (errno int) {
+ r0, r1, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0);
+ errno = int(e1);
+ return;
+}
+
+func Fstatfs(fd int, buf *Statfs_t) (errno int) {
+ r0, r1, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0);
+ errno = int(e1);
+ return;
+}
+
+func Getegid() (egid int) {
+ r0, r1, e1 := Syscall(SYS_GETEGID, 0, 0, 0);
+ egid = int(r0);
+ return;
+}
+
+func Geteuid() (euid int) {
+ r0, r1, e1 := Syscall(SYS_GETEUID, 0, 0, 0);
+ euid = int(r0);
+ return;
+}
+
+func Getgid() (gid int) {
+ r0, r1, e1 := Syscall(SYS_GETGID, 0, 0, 0);
+ gid = int(r0);
+ return;
+}
+
+func Getuid() (uid int) {
+ r0, r1, e1 := Syscall(SYS_GETUID, 0, 0, 0);
+ uid = int(r0);
+ return;
+}
+
+func Lchown(path string, uid int, gid int) (errno int) {
+ r0, r1, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(uid), uintptr(gid));
+ errno = int(e1);
+ return;
+}
+
+func Listen(s int, n int) (errno int) {
+ r0, r1, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0);
+ errno = int(e1);
+ return;
+}
+
+func Lstat(path string, stat *Stat_t) (errno int) {
+ r0, r1, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(unsafe.Pointer(stat)), 0);
+ errno = int(e1);
+ return;
+}
+
+func Seek(fd int, offset int64, whence int) (off int64, errno int) {
+ r0, r1, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence));
+ off = int64(r0);
+ errno = int(e1);
+ return;
+}
+
+func Setfsgid(gid int) (errno int) {
+ r0, r1, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0);
+ errno = int(e1);
+ return;
+}
+
+func Setfsuid(uid int) (errno int) {
+ r0, r1, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0);
+ errno = int(e1);
+ return;
+}
+
+func Setgid(gid int) (errno int) {
+ r0, r1, e1 := Syscall(SYS_SETGID, uintptr(gid), 0, 0);
+ errno = int(e1);
+ return;
+}
+
+func Setregid(rgid int, egid int) (errno int) {
+ r0, r1, e1 := Syscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0);
+ errno = int(e1);
+ return;
+}
+
+func Setresgid(rgid int, egid int, sgid int) (errno int) {
+ r0, r1, e1 := Syscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid));
+ errno = int(e1);
+ return;
+}
+
+func Setresuid(ruid int, euid int, suid int) (errno int) {
+ r0, r1, e1 := Syscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid));
+ errno = int(e1);
+ return;
+}
+
+func Setreuid(ruid int, euid int) (errno int) {
+ r0, r1, e1 := Syscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0);
+ errno = int(e1);
+ return;
+}
+
+func Shutdown(fd int, how int) (errno int) {
+ r0, r1, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0);
+ errno = int(e1);
+ return;
+}
+
+func Stat(path string, stat *Stat_t) (errno int) {
+ r0, r1, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(unsafe.Pointer(stat)), 0);
+ errno = int(e1);
+ return;
+}
+
+func Statfs(path string, buf *Statfs_t) (errno int) {
+ r0, r1, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(unsafe.Pointer(buf)), 0);
+ errno = int(e1);
+ return;
+}
+
func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, errno int) {
r0, r1, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)));
fd = int(r0);
@@ -735,9 +734,15 @@
return;
}
-func socket(domain int, typ int, proto int) (fd int, errno int) {
- r0, r1, e1 := Syscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto));
- fd = int(r0);
+func getgroups(n int, list *_Gid_t) (nn int, errno int) {
+ r0, r1, e1 := Syscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0);
+ nn = int(r0);
+ errno = int(e1);
+ return;
+}
+
+func setgroups(n int, list *_Gid_t) (errno int) {
+ r0, r1, e1 := Syscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0);
errno = int(e1);
return;
}
@@ -748,14 +753,9 @@
return;
}
-func Listen(s int, n int) (errno int) {
- r0, r1, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0);
- errno = int(e1);
- return;
-}
-
-func Shutdown(fd int, how int) (errno int) {
- r0, r1, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0);
+func socket(domain int, typ int, proto int) (fd int, errno int) {
+ r0, r1, e1 := Syscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto));
+ fd = int(r0);
errno = int(e1);
return;
}