diff options
Diffstat (limited to 'src/syscall')
-rw-r--r-- | src/syscall/Makefile | 1 | ||||
-rw-r--r-- | src/syscall/file_amd64_darwin.go | 18 | ||||
-rw-r--r-- | src/syscall/file_amd64_linux.go | 22 | ||||
-rw-r--r-- | src/syscall/syscall.go | 2 | ||||
-rw-r--r-- | src/syscall/syscall_amd64_darwin.s | 4 | ||||
-rw-r--r-- | src/syscall/syscall_amd64_linux.s | 11 | ||||
-rw-r--r-- | src/syscall/time_amd64_darwin.go | 19 | ||||
-rw-r--r-- | src/syscall/time_amd64_linux.go | 19 |
8 files changed, 70 insertions, 26 deletions
diff --git a/src/syscall/Makefile b/src/syscall/Makefile index 9ae0c6a72..6c30d0c3e 100644 --- a/src/syscall/Makefile +++ b/src/syscall/Makefile @@ -16,6 +16,7 @@ O1=\ O2=\ file_$(GOARCH)_$(GOOS).$O \ + time_$(GOARCH)_$(GOOS).$O \ syscall_$(GOARCH)_$(GOOS).$O \ diff --git a/src/syscall/file_amd64_darwin.go b/src/syscall/file_amd64_darwin.go index 6bf60b927..fcf6db0a7 100644 --- a/src/syscall/file_amd64_darwin.go +++ b/src/syscall/file_amd64_darwin.go @@ -13,7 +13,7 @@ import syscall "syscall" //export open, creat, close, read, write, pipe //export unlink -func StatToInt(s *Stat) int64; +func StatPtr(s *Stat) int64; type dev_t uint32; type ino_t uint64; @@ -73,7 +73,7 @@ export func open(name string, mode int64, perm int64) (ret int64, errno int64) { return -1, syscall.ENAMETOOLONG } const SYSOPEN = 5; - r1, r2, err := syscall.Syscall(SYSOPEN, AddrToInt(&namebuf[0]), mode, perm); + r1, r2, err := syscall.Syscall(SYSOPEN, BytePtr(&namebuf[0]), mode, perm); return r1, err; } @@ -83,7 +83,7 @@ export func creat(name string, perm int64) (ret int64, errno int64) { return -1, syscall.ENAMETOOLONG } const SYSOPEN = 5; - r1, r2, err := syscall.Syscall(SYSOPEN, AddrToInt(&namebuf[0]), O_CREAT|O_WRONLY|O_TRUNC, perm); + r1, r2, err := syscall.Syscall(SYSOPEN, BytePtr(&namebuf[0]), O_CREAT|O_WRONLY|O_TRUNC, perm); return r1, err; } @@ -95,13 +95,13 @@ export func close(fd int64) (ret int64, errno int64) { export func read(fd int64, buf *byte, nbytes int64) (ret int64, errno int64) { const SYSREAD = 3; - r1, r2, err := syscall.Syscall(SYSREAD, fd, AddrToInt(buf), nbytes); + r1, r2, err := syscall.Syscall(SYSREAD, fd, BytePtr(buf), nbytes); return r1, err; } export func write(fd int64, buf *byte, nbytes int64) (ret int64, errno int64) { const SYSWRITE = 4; - r1, r2, err := syscall.Syscall(SYSWRITE, fd, AddrToInt(buf), nbytes); + r1, r2, err := syscall.Syscall(SYSWRITE, fd, BytePtr(buf), nbytes); return r1, err; } @@ -122,19 +122,19 @@ export func stat(name string, buf *Stat) (ret int64, errno int64) { return -1, syscall.ENAMETOOLONG } const SYSSTAT = 338; - r1, r2, err := syscall.Syscall(SYSSTAT, AddrToInt(&namebuf[0]), StatToInt(buf), 0); + r1, r2, err := syscall.Syscall(SYSSTAT, BytePtr(&namebuf[0]), StatPtr(buf), 0); return r1, err; } export func lstat(name *byte, buf *Stat) (ret int64, errno int64) { const SYSLSTAT = 340; - r1, r2, err := syscall.Syscall(SYSLSTAT, AddrToInt(name), StatToInt(buf), 0); + r1, r2, err := syscall.Syscall(SYSLSTAT, BytePtr(name), StatPtr(buf), 0); return r1, err; } export func fstat(fd int64, buf *Stat) (ret int64, errno int64) { const SYSFSTAT = 339; - r1, r2, err := syscall.Syscall(SYSFSTAT, fd, StatToInt(buf), 0); + r1, r2, err := syscall.Syscall(SYSFSTAT, fd, StatPtr(buf), 0); return r1, err; } @@ -144,6 +144,6 @@ export func unlink(name string) (ret int64, errno int64) { return -1, syscall.ENAMETOOLONG } const SYSUNLINK = 10; - r1, r2, err := syscall.Syscall(SYSUNLINK, AddrToInt(&namebuf[0]), 0, 0); + r1, r2, err := syscall.Syscall(SYSUNLINK, BytePtr(&namebuf[0]), 0, 0); return r1, err; } diff --git a/src/syscall/file_amd64_linux.go b/src/syscall/file_amd64_linux.go index 1757bf7c7..5b5d90359 100644 --- a/src/syscall/file_amd64_linux.go +++ b/src/syscall/file_amd64_linux.go @@ -13,8 +13,8 @@ import syscall "syscall" //export open, creat, close, read, write, pipe //export unlink -func StatToInt(s *Stat) int64; -func Addr32ToInt(s *int32) int64; +func StatPtr(s *Stat) int64; +func Int32Ptr(s *int32) int64; type dev_t uint64; type ino_t uint64; @@ -74,7 +74,7 @@ export func open(name string, mode int64, perm int64) (ret int64, errno int64) { return -1, syscall.ENAMETOOLONG } const SYSOPEN = 2; - r1, r2, err := syscall.Syscall(SYSOPEN, AddrToInt(&namebuf[0]), mode, perm); + r1, r2, err := syscall.Syscall(SYSOPEN, BytePtr(&namebuf[0]), mode, perm); return r1, err; } @@ -84,7 +84,7 @@ export func creat(name string, perm int64) (ret int64, errno int64) { return -1, syscall.ENAMETOOLONG } const SYSOPEN = 2; - r1, r2, err := syscall.Syscall(SYSOPEN, AddrToInt(&namebuf[0]), O_CREAT|O_WRONLY|O_TRUNC, perm); + r1, r2, err := syscall.Syscall(SYSOPEN, BytePtr(&namebuf[0]), O_CREAT|O_WRONLY|O_TRUNC, perm); return r1, err; } @@ -96,20 +96,20 @@ export func close(fd int64) (ret int64, errno int64) { export func read(fd int64, buf *byte, nbytes int64) (ret int64, errno int64) { const SYSREAD = 0; - r1, r2, err := syscall.Syscall(SYSREAD, fd, AddrToInt(buf), nbytes); + r1, r2, err := syscall.Syscall(SYSREAD, fd, BytePtr(buf), nbytes); return r1, err; } export func write(fd int64, buf *byte, nbytes int64) (ret int64, errno int64) { const SYSWRITE = 1; - r1, r2, err := syscall.Syscall(SYSWRITE, fd, AddrToInt(buf), nbytes); + r1, r2, err := syscall.Syscall(SYSWRITE, fd, BytePtr(buf), nbytes); return r1, err; } export func pipe(fds *[2]int64) (ret int64, errno int64) { const SYSPIPE = 22; var t [2] int32; - r1, r2, err := syscall.Syscall(SYSPIPE, Addr32ToInt(&t[0]), 0, 0); + r1, r2, err := syscall.Syscall(SYSPIPE, Int32Ptr(&t[0]), 0, 0); if r1 < 0 { return r1, err; } @@ -124,19 +124,19 @@ export func stat(name string, buf *Stat) (ret int64, errno int64) { return -1, syscall.ENAMETOOLONG } const SYSSTAT = 4; - r1, r2, err := syscall.Syscall(SYSSTAT, AddrToInt(&namebuf[0]), StatToInt(buf), 0); + r1, r2, err := syscall.Syscall(SYSSTAT, BytePtr(&namebuf[0]), StatPtr(buf), 0); return r1, err; } export func lstat(name *byte, buf *Stat) (ret int64, errno int64) { const SYSLSTAT = 6; - r1, r2, err := syscall.Syscall(SYSLSTAT, AddrToInt(name), StatToInt(buf), 0); + r1, r2, err := syscall.Syscall(SYSLSTAT, BytePtr(name), StatPtr(buf), 0); return r1, err; } export func fstat(fd int64, buf *Stat) (ret int64, errno int64) { const SYSFSTAT = 5; - r1, r2, err := syscall.Syscall(SYSFSTAT, fd, StatToInt(buf), 0); + r1, r2, err := syscall.Syscall(SYSFSTAT, fd, StatPtr(buf), 0); return r1, err; } @@ -146,6 +146,6 @@ export func unlink(name string) (ret int64, errno int64) { return -1, syscall.ENAMETOOLONG } const SYSUNLINK = 87; - r1, r2, err := syscall.Syscall(SYSUNLINK, AddrToInt(&namebuf[0]), 0, 0); + r1, r2, err := syscall.Syscall(SYSUNLINK, BytePtr(&namebuf[0]), 0, 0); return r1, err; } diff --git a/src/syscall/syscall.go b/src/syscall/syscall.go index 986ed9c4b..9ec14de27 100644 --- a/src/syscall/syscall.go +++ b/src/syscall/syscall.go @@ -10,7 +10,7 @@ package syscall export func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64); export func Syscall6(trap int64, a1, a2, a3, a4, a5, a6 int64) (r1, r2, err int64); -export func AddrToInt(b *byte) int64; +export func BytePtr(b *byte) int64; /* * Used to convert file names to byte arrays for passing to kernel, diff --git a/src/syscall/syscall_amd64_darwin.s b/src/syscall/syscall_amd64_darwin.s index 1fab42dc6..8677451d4 100644 --- a/src/syscall/syscall_amd64_darwin.s +++ b/src/syscall/syscall_amd64_darwin.s @@ -48,12 +48,12 @@ TEXT syscall·Syscall6(SB),7,$-8 RET // conversion operators - really just casts -TEXT syscall·AddrToInt(SB),7,$-8 +TEXT syscall·BytePtr(SB),7,$-8 MOVQ 8(SP), AX MOVQ AX, 16(SP) RET -TEXT syscall·StatToInt(SB),7,$-8 +TEXT syscall·StatPtr(SB),7,$-8 MOVQ 8(SP), AX MOVQ AX, 16(SP) RET diff --git a/src/syscall/syscall_amd64_linux.s b/src/syscall/syscall_amd64_linux.s index c279ff8bf..4fea6d55b 100644 --- a/src/syscall/syscall_amd64_linux.s +++ b/src/syscall/syscall_amd64_linux.s @@ -50,17 +50,22 @@ TEXT syscall·Syscall6(SB),7,$-8 RET // conversion operators - really just casts -TEXT syscall·AddrToInt(SB),7,$-8 +TEXT syscall·BytePtr(SB),7,$-8 MOVQ 8(SP), AX MOVQ AX, 16(SP) RET -TEXT syscall·Addr32ToInt(SB),7,$-8 +TEXT syscall·Int32Ptr(SB),7,$-8 MOVQ 8(SP), AX MOVQ AX, 16(SP) RET -TEXT syscall·StatToInt(SB),7,$-8 +TEXT syscall·Int64Ptr(SB),7,$-8 + MOVQ 8(SP), AX + MOVQ AX, 16(SP) + RET + +TEXT syscall·StatPtr(SB),7,$-8 MOVQ 8(SP), AX MOVQ AX, 16(SP) RET diff --git a/src/syscall/time_amd64_darwin.go b/src/syscall/time_amd64_darwin.go new file mode 100644 index 000000000..d4cdaa048 --- /dev/null +++ b/src/syscall/time_amd64_darwin.go @@ -0,0 +1,19 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package syscall + +import syscall "syscall" + +export func gettimeofday() (sec, nsec, errno int64) { + const GETTIMEOFDAY = 116; + // The "1" in the call is the timeval pointer, which must be + // non-zero but is otherwise unused. The results + // are returned in r1, r2. + r1, r2, err := syscall.Syscall(GETTIMEOFDAY, 1, 0, 0); + if err != 0 { + return 0, 0, err + } + return r1, r2, 0 +} diff --git a/src/syscall/time_amd64_linux.go b/src/syscall/time_amd64_linux.go new file mode 100644 index 000000000..9feacf654 --- /dev/null +++ b/src/syscall/time_amd64_linux.go @@ -0,0 +1,19 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package syscall + +import syscall "syscall" + +func Int64Ptr(s *int64) int64; + +export func gettimeofday() (sec, nsec, errno int64) { + const GETTIMEOFDAY = 96 + var tv [2]int64; // struct timeval + r1, r2, err := syscall.Syscall(GETTIMEOFDAY, Int64Ptr(&tv[0]), 0, 0); + if err != 0 { + return 0, 0, err + } + return tv[0], tv[1], 0 +} |