]> Cypherpunks repositories - gostls13.git/commitdiff
fixes for linux system call linkage
authorRob Pike <r@golang.org>
Tue, 29 Jul 2008 22:06:21 +0000 (15:06 -0700)
committerRob Pike <r@golang.org>
Tue, 29 Jul 2008 22:06:21 +0000 (15:06 -0700)
R=gri
OCL=13547
CL=13547

src/syscall/file_amd64_linux.go
src/syscall/syscall_amd64_linux.s

index 910d6f48cc3a7ad90b438fccfa56f35ce4bf601d..e407a17fec80d247463031782e83b8f5aaebe26c 100644 (file)
@@ -11,6 +11,7 @@ export stat, fstat, lstat
 export open, close, read, write, pipe
 
 func   StatToInt(s *Stat) int64;
+func   Addr32ToInt(s *int32) int64;
 
 // Stat and relatives for Linux
 
@@ -45,6 +46,9 @@ type Stat struct {
        st_atime        Timespec;   /* time of last access */
        st_mtime        Timespec;   /* time of last modification */
        st_ctime        Timespec;   /* time of last status change */
+       st_unused4      int64;
+       st_unused5      int64;
+       st_unused6      int64;
 }
 
 func open(name *byte, mode int64) (ret int64, errno int64) {
@@ -60,6 +64,7 @@ func close(fd int64) (ret int64, errno int64) {
 }
 
 func read(fd int64, buf *byte, nbytes int64) (ret int64, errno int64) {
+print "READ: ", fd, " ", nbytes, "\n";
        const SYSREAD = 0;
        r1, r2, err := syscall.Syscall(SYSREAD, fd, AddrToInt(buf), nbytes);
        return r1, err;
@@ -73,12 +78,13 @@ func write(fd int64, buf *byte, nbytes int64) (ret int64, errno int64) {
 
 func pipe(fds *[2]int64) (ret int64, errno int64) {
        const SYSPIPE = 22;
-       r1, r2, err := syscall.Syscall(SYSPIPE, 0, 0, 0);
+       var t [2] int32;
+       r1, r2, err := syscall.Syscall(SYSPIPE, Addr32ToInt(&t[0]), 0, 0);
        if r1 < 0 {
                return r1, err;
        }
-       fds[0] = r1;
-       fds[1] = r2;
+       fds[0] = int64(t[0]);
+       fds[1] = int64(t[1]);
        return 0, err;
 }
 
index 38d6ac442d07ca49042f7877838d0a3da3a2cef0..b50fc0c13966e19f55c054b7a747b7d925d0b931 100644 (file)
@@ -32,6 +32,11 @@ TEXT syscall·AddrToInt(SB),1,$-8
        MOVQ    AX, 16(SP)
        RET
 
+TEXT   syscall·Addr32ToInt(SB),1,$-8
+       MOVQ    8(SP), AX
+       MOVQ    AX, 16(SP)
+       RET
+
 TEXT   syscall·StatToInt(SB),1,$-8
        MOVQ    8(SP), AX
        MOVQ    AX, 16(SP)