From e06d1540c88263ddd919936c0a7e8d451216abf2 Mon Sep 17 00:00:00 2001 From: Rob Pike Date: Tue, 29 Jul 2008 15:06:21 -0700 Subject: [PATCH] fixes for linux system call linkage R=gri OCL=13547 CL=13547 --- src/syscall/file_amd64_linux.go | 12 +++++++++--- src/syscall/syscall_amd64_linux.s | 5 +++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/syscall/file_amd64_linux.go b/src/syscall/file_amd64_linux.go index 910d6f48cc..e407a17fec 100644 --- a/src/syscall/file_amd64_linux.go +++ b/src/syscall/file_amd64_linux.go @@ -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; } diff --git a/src/syscall/syscall_amd64_linux.s b/src/syscall/syscall_amd64_linux.s index 38d6ac442d..b50fc0c139 100644 --- a/src/syscall/syscall_amd64_linux.s +++ b/src/syscall/syscall_amd64_linux.s @@ -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) -- 2.48.1