]> Cypherpunks repositories - gostls13.git/commitdiff
mksyscall was treating 64-bit systems as 32-bit,
authorRuss Cox <rsc@golang.org>
Tue, 9 Jun 2009 05:10:48 +0000 (22:10 -0700)
committerRuss Cox <rsc@golang.org>
Tue, 9 Jun 2009 05:10:48 +0000 (22:10 -0700)
so 64-bit args like the offset in Seek were being
mishandled.  fix.

R=dsymonds
DELTA=1269  (645 added, 611 deleted, 13 changed)
OCL=30082
CL=30082

src/lib/os/os_test.go
src/lib/syscall/mksyscall
src/lib/syscall/zsyscall_darwin_amd64.go
src/lib/syscall/zsyscall_linux_amd64.go

index 84469b68a7730528a0cc36ca67f1b9ec69139b4e..9f3e833f39e00203bbb28859574832b41a248e78 100644 (file)
@@ -515,3 +515,35 @@ func TestTime(t *testing.T) {
        }
 }
 
+func TestSeek(t *testing.T) {
+       f, err := Open("_obj/seektest", O_CREAT|O_RDWR|O_TRUNC, 0666);
+       if err != nil {
+               t.Fatalf("open _obj/seektest: %s", err);
+       }
+
+       const data = "hello, world\n";
+       io.WriteString(f, data);
+
+       type test struct {
+               in int64;
+               whence int;
+               out int64;
+       }
+       var tests = []test {
+               test{ 0, 1, int64(len(data)) },
+               test{ 0, 0, 0 },
+               test{ 5, 0, 5 },
+               test{ 0, 2, int64(len(data)) },
+               test{ 0, 0, 0 },
+               test{ -1, 2, int64(len(data)) - 1 },
+               test{ 1<<40, 0, 1<<40 },
+               test{ 1<<40, 2, 1<<40 + int64(len(data)) }
+       };
+       for i, tt := range tests {
+               off, err := f.Seek(tt.in, tt.whence);
+               if off != tt.out || err != nil {
+                       t.Errorf("#%d: Seek(%v, %v) = %v, %v want %v, nil", i, tt.in, tt.whence, off, err, tt.out);
+               }
+       }
+       f.Close();
+}
index 20b5c26bf5ab1a51eecf059f1d7270cbe32337a3..850fc1e3fa01648d50b85d255450a7e29a322029 100755 (executable)
@@ -15,7 +15,7 @@
 
 $cmdline = "mksyscall " . join(' ', @ARGV);
 $errors = 0;
-$_32bit = 0;
+$_32bit = "";
 
 if($ARGV[0] eq "-b32") {
        $_32bit = "big-endian";
index 463bc4f63d4871282ef9b4c6e9d0c74c95947e85..c8a0b10a7a1c294191e3cf272ebfe208c280a268 100644 (file)
@@ -8,13 +8,6 @@ import (
        "unsafe";
 )
 
-func getfsstat64(buf *Statfs_t, nbuf int, flags int) (n int, errno int) {
-       r0, r1, e1 := Syscall(SYS_GETFSSTAT64, uintptr(unsafe.Pointer(buf)), uintptr(nbuf), uintptr(flags));
-       n = int(r0);
-       errno = int(e1);
-       return;
-}
-
 func getgroups(ngid int, gid *_Gid_t) (n int, errno int) {
        r0, r1, e1 := Syscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0);
        n = int(r0);
@@ -44,20 +37,12 @@ func pipe() (r int, w int, errno int) {
 }
 
 func lseek(fd int, offset int64, whence int) (newoffset uintptr, errno int) {
-       r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset >> 32), uintptr(whence), 0, 0);
+       r0, r1, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence));
        newoffset = uintptr(r0);
        errno = int(e1);
        return;
 }
 
-func gettimeofday(tp *Timeval) (sec int64, usec int32, errno int) {
-       r0, r1, e1 := Syscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0);
-       sec = int64(r0);
-       usec = int32(r1);
-       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);
@@ -232,7 +217,7 @@ func Fsync(fd int) (errno int) {
 }
 
 func Ftruncate(fd int, length int64) (errno int) {
-       r0, r1, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length >> 32));
+       r0, r1, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0);
        errno = int(e1);
        return;
 }
@@ -264,6 +249,15 @@ func Geteuid() (uid int) {
        return;
 }
 
+func Getfsstat(buf []Statfs_t, flags int) (n int, errno int) {
+       var _p0 *Statfs_t;
+       if len(buf) > 0 { _p0 = &buf[0]; }
+       r0, r1, e1 := Syscall(SYS_GETFSSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags));
+       n = int(r0);
+       errno = int(e1);
+       return;
+}
+
 func Getgid() (gid int) {
        r0, r1, e1 := Syscall(SYS_GETGID, 0, 0, 0);
        gid = int(r0);
@@ -405,7 +399,7 @@ func Pathconf(path string, name int) (val int, errno int) {
 func Pread(fd int, p []byte, offset int64) (n int, errno int) {
        var _p0 *byte;
        if len(p) > 0 { _p0 = &p[0]; }
-       r0, r1, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), uintptr(offset >> 32), 0);
+       r0, r1, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0);
        n = int(r0);
        errno = int(e1);
        return;
@@ -414,7 +408,7 @@ func Pread(fd int, p []byte, offset int64) (n int, errno int) {
 func Pwrite(fd int, p []byte, offset int64) (n int, errno int) {
        var _p0 *byte;
        if len(p) > 0 { _p0 = &p[0]; }
-       r0, r1, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), uintptr(offset >> 32), 0);
+       r0, r1, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0);
        n = int(r0);
        errno = int(e1);
        return;
@@ -566,7 +560,7 @@ func Sync() (errno int) {
 }
 
 func Truncate(path string, length int64) (errno int) {
-       r0, r1, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(length), uintptr(length >> 32));
+       r0, r1, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(length), 0);
        errno = int(e1);
        return;
 }
@@ -618,5 +612,13 @@ func write(fd int, buf *byte, nbuf int) (n int, errno int) {
        return;
 }
 
+func gettimeofday(tp *Timeval) (sec int64, usec int32, errno int) {
+       r0, r1, e1 := Syscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0);
+       sec = int64(r0);
+       usec = int32(r1);
+       errno = int(e1);
+       return;
+}
+
 
 
index 92a0ca1ef024e964059f8f12d2b11d21eec09897..490ffc3926747ff4c26b2dfcfa752da67ca76309 100644 (file)
@@ -55,44 +55,6 @@ func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err
        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);
-       errno = int(e1);
-       return;
-}
-
-func bind(s int, addr uintptr, addrlen _Socklen) (errno int) {
-       r0, r1, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen));
-       errno = int(e1);
-       return;
-}
-
-func connect(s int, addr uintptr, addrlen _Socklen) (errno int) {
-       r0, r1, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen));
-       errno = int(e1);
-       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);
-       errno = int(e1);
-       return;
-}
-
-func setsockopt(s int, level int, name int, val uintptr, vallen int) (errno int) {
-       r0, r1, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0);
-       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 Access(path string, mode int) (errno int) {
        r0, r1, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(mode), 0);
        errno = int(e1);
@@ -197,7 +159,7 @@ func Faccessat(dirfd int, path string, mode int, flags int) (errno int) {
 }
 
 func Fallocate(fd int, mode int, off int64, len int64) (errno int) {
-       r0, r1, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off >> 32), uintptr(len), uintptr(len >> 32));
+       r0, r1, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0);
        errno = int(e1);
        return;
 }
@@ -264,7 +226,7 @@ func Fsync(fd int) (errno int) {
 }
 
 func Ftruncate(fd int, length int64) (errno int) {
-       r0, r1, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length >> 32));
+       r0, r1, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0);
        errno = int(e1);
        return;
 }
@@ -455,7 +417,7 @@ func PivotRoot(newroot string, putold string) (errno int) {
 func Pread(fd int, p []byte, offset int64) (n int, errno int) {
        var _p0 *byte;
        if len(p) > 0 { _p0 = &p[0]; }
-       r0, r1, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), uintptr(offset >> 32), 0);
+       r0, r1, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0);
        n = int(r0);
        errno = int(e1);
        return;
@@ -464,7 +426,7 @@ func Pread(fd int, p []byte, offset int64) (n int, errno int) {
 func Pwrite(fd int, p []byte, offset int64) (n int, errno int) {
        var _p0 *byte;
        if len(p) > 0 { _p0 = &p[0]; }
-       r0, r1, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), uintptr(offset >> 32), 0);
+       r0, r1, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0);
        n = int(r0);
        errno = int(e1);
        return;
@@ -507,7 +469,7 @@ func Rmdir(path string) (errno int) {
 }
 
 func Seek(fd int, offset int64, whence int) (off int64, errno int) {
-       r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset >> 32), uintptr(whence), 0, 0);
+       r0, r1, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence));
        off = int64(r0);
        errno = int(e1);
        return;
@@ -608,12 +570,6 @@ func Setuid(uid int) (errno int) {
        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 Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, errno int) {
        r0, r1, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags));
        n = int64(r0);
@@ -645,7 +601,7 @@ func Sync() () {
 }
 
 func SyncFileRange(fd int, off int64, n int64, flags int) (errno int) {
-       r0, r1, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(off >> 32), uintptr(n), uintptr(n >> 32), uintptr(flags));
+       r0, r1, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0);
        errno = int(e1);
        return;
 }
@@ -684,7 +640,7 @@ func Times(tms *Tms) (ticks uintptr, errno int) {
 }
 
 func Truncate(path string, length int64) (errno int) {
-       r0, r1, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(length), uintptr(length >> 32));
+       r0, r1, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(StringBytePtr(path))), uintptr(length), 0);
        errno = int(e1);
        return;
 }
@@ -760,5 +716,49 @@ func write(fd int, p *byte, np int) (n int, errno int) {
        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);
+       errno = int(e1);
+       return;
+}
+
+func bind(s int, addr uintptr, addrlen _Socklen) (errno int) {
+       r0, r1, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen));
+       errno = int(e1);
+       return;
+}
+
+func connect(s int, addr uintptr, addrlen _Socklen) (errno int) {
+       r0, r1, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen));
+       errno = int(e1);
+       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);
+       errno = int(e1);
+       return;
+}
+
+func setsockopt(s int, level int, name int, val uintptr, vallen int) (errno int) {
+       r0, r1, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0);
+       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 Shutdown(fd int, how int) (errno int) {
+       r0, r1, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0);
+       errno = int(e1);
+       return;
+}
+