summaryrefslogtreecommitdiff
path: root/src/syscall
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2008-07-29 15:06:21 -0700
committerRob Pike <r@golang.org>2008-07-29 15:06:21 -0700
commit682619f4a77382f8a22f0d3d417b413d9dc6b310 (patch)
treed8896caa3bfdc7eac171df0fd75f7f969357e394 /src/syscall
parente4597000ebdedb97d417391403b29006418cdf5f (diff)
downloadgo-682619f4a77382f8a22f0d3d417b413d9dc6b310.tar.gz
fixes for linux system call linkage
R=gri OCL=13547 CL=13547
Diffstat (limited to 'src/syscall')
-rw-r--r--src/syscall/file_amd64_linux.go12
-rw-r--r--src/syscall/syscall_amd64_linux.s5
2 files changed, 14 insertions, 3 deletions
diff --git a/src/syscall/file_amd64_linux.go b/src/syscall/file_amd64_linux.go
index 910d6f48c..e407a17fe 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 38d6ac442..b50fc0c13 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)