Commit e06d1540 authored by Rob Pike's avatar Rob Pike

fixes for linux system call linkage

R=gri
OCL=13547
CL=13547
parent ebcd76d5
...@@ -11,6 +11,7 @@ export stat, fstat, lstat ...@@ -11,6 +11,7 @@ export stat, fstat, lstat
export open, close, read, write, pipe export open, close, read, write, pipe
func StatToInt(s *Stat) int64; func StatToInt(s *Stat) int64;
func Addr32ToInt(s *int32) int64;
// Stat and relatives for Linux // Stat and relatives for Linux
...@@ -45,6 +46,9 @@ type Stat struct { ...@@ -45,6 +46,9 @@ type Stat struct {
st_atime Timespec; /* time of last access */ st_atime Timespec; /* time of last access */
st_mtime Timespec; /* time of last modification */ st_mtime Timespec; /* time of last modification */
st_ctime Timespec; /* time of last status change */ 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) { func open(name *byte, mode int64) (ret int64, errno int64) {
...@@ -60,6 +64,7 @@ func close(fd 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) { func read(fd int64, buf *byte, nbytes int64) (ret int64, errno int64) {
print "READ: ", fd, " ", nbytes, "\n";
const SYSREAD = 0; const SYSREAD = 0;
r1, r2, err := syscall.Syscall(SYSREAD, fd, AddrToInt(buf), nbytes); r1, r2, err := syscall.Syscall(SYSREAD, fd, AddrToInt(buf), nbytes);
return r1, err; return r1, err;
...@@ -73,12 +78,13 @@ func write(fd int64, buf *byte, nbytes int64) (ret int64, errno int64) { ...@@ -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) { func pipe(fds *[2]int64) (ret int64, errno int64) {
const SYSPIPE = 22; 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 { if r1 < 0 {
return r1, err; return r1, err;
} }
fds[0] = r1; fds[0] = int64(t[0]);
fds[1] = r2; fds[1] = int64(t[1]);
return 0, err; return 0, err;
} }
......
...@@ -32,6 +32,11 @@ TEXT syscall·AddrToInt(SB),1,$-8 ...@@ -32,6 +32,11 @@ TEXT syscall·AddrToInt(SB),1,$-8
MOVQ AX, 16(SP) MOVQ AX, 16(SP)
RET RET
TEXT syscall·Addr32ToInt(SB),1,$-8
MOVQ 8(SP), AX
MOVQ AX, 16(SP)
RET
TEXT syscall·StatToInt(SB),1,$-8 TEXT syscall·StatToInt(SB),1,$-8
MOVQ 8(SP), AX MOVQ 8(SP), AX
MOVQ AX, 16(SP) MOVQ AX, 16(SP)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment