diff --git a/src/lib/net/net_darwin.go b/src/lib/net/net_darwin.go index 8ce94da6c3ac06c0445fcfb1c2b4f8567865f980..1238a4cdcae82b34c761ca1f7a192bfd5e221607 100644 --- a/src/lib/net/net_darwin.go +++ b/src/lib/net/net_darwin.go @@ -7,7 +7,8 @@ package net import ( "os"; "syscall"; - "net" + "net"; + "unsafe"; ) export func IPv4ToSockaddr(p *[]byte, port int) (sa1 *syscall.Sockaddr, err *os.Error) { @@ -23,7 +24,7 @@ export func IPv4ToSockaddr(p *[]byte, port int) (sa1 *syscall.Sockaddr, err *os. for i := 0; i < IPv4len; i++ { sa.addr[i] = p[i] } - return syscall.SockaddrInet4ToSockaddr(sa), nil + return unsafe.pointer(sa).(*syscall.Sockaddr), nil } export func IPv6ToSockaddr(p *[]byte, port int) (sa1 *syscall.Sockaddr, err *os.Error) { @@ -39,20 +40,20 @@ export func IPv6ToSockaddr(p *[]byte, port int) (sa1 *syscall.Sockaddr, err *os. for i := 0; i < IPv6len; i++ { sa.addr[i] = p[i] } - return syscall.SockaddrInet6ToSockaddr(sa), nil + return unsafe.pointer(sa).(*syscall.Sockaddr), nil } export func SockaddrToIP(sa1 *syscall.Sockaddr) (p *[]byte, port int, err *os.Error) { switch sa1.family { case syscall.AF_INET: - sa := syscall.SockaddrToSockaddrInet4(sa1); + sa := unsafe.pointer(sa1).(*syscall.SockaddrInet4); a := ToIPv6(&sa.addr); if a == nil { return nil, 0, os.EINVAL } return a, int(sa.port[0])<<8 + int(sa.port[1]), nil; case syscall.AF_INET6: - sa := syscall.SockaddrToSockaddrInet6(sa1); + sa := unsafe.pointer(sa1).(*syscall.SockaddrInet6); a := ToIPv6(&sa.addr); if a == nil { return nil, 0, os.EINVAL diff --git a/src/lib/net/net_linux.go b/src/lib/net/net_linux.go index a7c1ecc008a143998d35660fead62cfa05e268c5..1ae4e9a5b1ff549397e90c8c6ee608377791609c 100644 --- a/src/lib/net/net_linux.go +++ b/src/lib/net/net_linux.go @@ -7,7 +7,8 @@ package net import ( "os"; "syscall"; - "net" + "net"; + "unsafe"; ) export func IPv4ToSockaddr(p *[]byte, port int) (sa1 *syscall.Sockaddr, err *os.Error) { @@ -22,7 +23,7 @@ export func IPv4ToSockaddr(p *[]byte, port int) (sa1 *syscall.Sockaddr, err *os. for i := 0; i < IPv4len; i++ { sa.addr[i] = p[i] } - return syscall.SockaddrInet4ToSockaddr(sa), nil + return unsafe.pointer(sa).(*syscall.Sockaddr), nil } var IPv6zero [16]byte; @@ -47,20 +48,20 @@ export func IPv6ToSockaddr(p *[]byte, port int) (sa1 *syscall.Sockaddr, err *os. for i := 0; i < IPv6len; i++ { sa.addr[i] = p[i] } - return syscall.SockaddrInet6ToSockaddr(sa), nil + return unsafe.pointer(sa).(*syscall.Sockaddr), nil } export func SockaddrToIP(sa1 *syscall.Sockaddr) (p *[]byte, port int, err *os.Error) { switch sa1.family { case syscall.AF_INET: - sa := syscall.SockaddrToSockaddrInet4(sa1); + sa := unsafe.pointer(sa1).(*syscall.SockaddrInet4); a := ToIPv6(&sa.addr); if a == nil { return nil, 0, os.EINVAL } return a, int(sa.port[0])<<8 + int(sa.port[1]), nil; case syscall.AF_INET6: - sa := syscall.SockaddrToSockaddrInet6(sa1); + sa := unsafe.pointer(sa1).(*syscall.SockaddrInet6); a := ToIPv6(&sa.addr); if a == nil { return nil, 0, os.EINVAL diff --git a/src/lib/syscall/Makefile b/src/lib/syscall/Makefile index 5f613b9b42117591cadc65c10894e8266812734c..a9975b5c6f9ebeb52b796cf4f0e21a7c0f94b87a 100644 --- a/src/lib/syscall/Makefile +++ b/src/lib/syscall/Makefile @@ -5,7 +5,7 @@ # DO NOT EDIT. Automatically generated by gobuild. # gobuild -m errstr_darwin.go file_darwin.go socket_darwin.go\ # syscall_amd64_darwin.go time_amd64_darwin.go types_amd64_darwin.go\ -# asm_amd64_darwin.s cast_amd64.s syscall.go signal_amd64_darwin.go >Makefile +# asm_amd64_darwin.s syscall.go signal_amd64_darwin.go >Makefile O=6 GC=$(O)g CC=$(O)c -w @@ -38,7 +38,6 @@ O1=\ syscall_$(GOARCH)_$(GOOS).$O\ types_$(GOARCH)_$(GOOS).$O\ asm_$(GOARCH)_$(GOOS).$O\ - cast_$(GOARCH).$O\ syscall.$O\ signal_$(GOARCH)_$(GOOS).$O\ @@ -50,7 +49,7 @@ O2=\ syscall.a: a1 a2 a1: $(O1) - $(AR) grc syscall.a errstr_$(GOOS).$O syscall_$(GOARCH)_$(GOOS).$O types_$(GOARCH)_$(GOOS).$O asm_$(GOARCH)_$(GOOS).$O cast_$(GOARCH).$O syscall.$O signal_$(GOARCH)_$(GOOS).$O + $(AR) grc syscall.a errstr_$(GOOS).$O syscall_$(GOARCH)_$(GOOS).$O types_$(GOARCH)_$(GOOS).$O asm_$(GOARCH)_$(GOOS).$O syscall.$O signal_$(GOARCH)_$(GOOS).$O rm -f $(O1) a2: $(O2) diff --git a/src/lib/syscall/cast_amd64.s b/src/lib/syscall/cast_amd64.s deleted file mode 100644 index 3eaa5e70e6c5fd7bbba83813109c7fb90d65ff41..0000000000000000000000000000000000000000 --- a/src/lib/syscall/cast_amd64.s +++ /dev/null @@ -1,85 +0,0 @@ -// 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. - -// conversion operators - really just casts -TEXT syscall·BytePtr(SB),7,$-8 - MOVQ 8(SP), AX - MOVQ AX, 16(SP) - RET - -TEXT syscall·BytePtrPtr(SB),7,$-8 - MOVQ 8(SP), AX - MOVQ AX, 16(SP) - RET - -TEXT syscall·Int32Ptr(SB),7,$-8 - MOVQ 8(SP), AX - MOVQ AX, 16(SP) - RET - -TEXT syscall·Int64Ptr(SB),7,$-8 - MOVQ 8(SP), AX - MOVQ AX, 16(SP) - RET - -TEXT syscall·KeventPtr(SB),7,$-8 - MOVQ 8(SP), AX - MOVQ AX, 16(SP) - RET - -TEXT syscall·EpollEventPtr(SB),7,$-8 - MOVQ 8(SP), AX - MOVQ AX, 16(SP) - RET - -TEXT syscall·LingerPtr(SB),7,$-8 - MOVQ 8(SP), AX - MOVQ AX, 16(SP) - RET - -TEXT syscall·SockaddrPtr(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 - -TEXT syscall·TimespecPtr(SB),7,$-8 - MOVQ 8(SP), AX - MOVQ AX, 16(SP) - RET - -TEXT syscall·TimevalPtr(SB),7,$-8 - MOVQ 8(SP), AX - MOVQ AX, 16(SP) - RET - -TEXT syscall·RusagePtr(SB),7,$-8 - MOVQ 8(SP), AX - MOVQ AX, 16(SP) - RET - -TEXT syscall·SockaddrToSockaddrInet4(SB),7,$-8 - MOVQ 8(SP), AX - MOVQ AX, 16(SP) - RET - -TEXT syscall·SockaddrToSockaddrInet6(SB),7,$-8 - MOVQ 8(SP), AX - MOVQ AX, 16(SP) - RET - -TEXT syscall·SockaddrInet4ToSockaddr(SB),7,$-8 - MOVQ 8(SP), AX - MOVQ AX, 16(SP) - RET - -TEXT syscall·SockaddrInet6ToSockaddr(SB),7,$-8 - MOVQ 8(SP), AX - MOVQ AX, 16(SP) - RET - diff --git a/src/lib/syscall/file_darwin.go b/src/lib/syscall/file_darwin.go index 0c6a38a3add3f243f80ae65611045ee10faedfe7..55add2567a97c9534807eaced8520c59965f50eb 100644 --- a/src/lib/syscall/file_darwin.go +++ b/src/lib/syscall/file_darwin.go @@ -2,11 +2,14 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -package syscall - // File operations for Darwin -import syscall "syscall" +package syscall + +import ( + "syscall"; + "unsafe"; +) const NameBufsize = 512 @@ -15,7 +18,7 @@ export func open(name string, mode int64, perm int64) (ret int64, errno int64) { if !StringToBytes(&namebuf, name) { return -1, ENAMETOOLONG } - r1, r2, err := Syscall(SYS_OPEN, BytePtr(&namebuf[0]), mode, perm); + r1, r2, err := Syscall(SYS_OPEN, int64(uintptr(unsafe.pointer(&namebuf[0]))), mode, perm); return r1, err; } @@ -24,7 +27,7 @@ export func creat(name string, perm int64) (ret int64, errno int64) { if !StringToBytes(&namebuf, name) { return -1, ENAMETOOLONG } - r1, r2, err := Syscall(SYS_OPEN, BytePtr(&namebuf[0]), O_CREAT|O_WRONLY|O_TRUNC, perm); + r1, r2, err := Syscall(SYS_OPEN, int64(uintptr(unsafe.pointer(&namebuf[0]))), O_CREAT|O_WRONLY|O_TRUNC, perm); return r1, err; } @@ -34,12 +37,12 @@ export func close(fd int64) (ret int64, errno int64) { } export func read(fd int64, buf *byte, nbytes int64) (ret int64, errno int64) { - r1, r2, err := Syscall(SYS_READ, fd, BytePtr(buf), nbytes); + r1, r2, err := Syscall(SYS_READ, fd, int64(uintptr(unsafe.pointer(buf))), nbytes); return r1, err; } export func write(fd int64, buf *byte, nbytes int64) (ret int64, errno int64) { - r1, r2, err := Syscall(SYS_WRITE, fd, BytePtr(buf), nbytes); + r1, r2, err := Syscall(SYS_WRITE, fd, int64(uintptr(unsafe.pointer(buf))), nbytes); return r1, err; } @@ -58,17 +61,17 @@ export func stat(name string, buf *Stat) (ret int64, errno int64) { if !StringToBytes(&namebuf, name) { return -1, ENAMETOOLONG } - r1, r2, err := Syscall(SYS_STAT64, BytePtr(&namebuf[0]), StatPtr(buf), 0); + r1, r2, err := Syscall(SYS_STAT64, int64(uintptr(unsafe.pointer(&namebuf[0]))), int64(uintptr(unsafe.pointer(buf))), 0); return r1, err; } export func lstat(name *byte, buf *Stat) (ret int64, errno int64) { - r1, r2, err := Syscall(SYS_LSTAT, BytePtr(name), StatPtr(buf), 0); + r1, r2, err := Syscall(SYS_LSTAT, int64(uintptr(unsafe.pointer(name))), int64(uintptr(unsafe.pointer(buf))), 0); return r1, err; } export func fstat(fd int64, buf *Stat) (ret int64, errno int64) { - r1, r2, err := Syscall(SYS_FSTAT, fd, StatPtr(buf), 0); + r1, r2, err := Syscall(SYS_FSTAT, fd, int64(uintptr(unsafe.pointer(buf))), 0); return r1, err; } @@ -77,7 +80,7 @@ export func unlink(name string) (ret int64, errno int64) { if !StringToBytes(&namebuf, name) { return -1, ENAMETOOLONG } - r1, r2, err := Syscall(SYS_UNLINK, BytePtr(&namebuf[0]), 0, 0); + r1, r2, err := Syscall(SYS_UNLINK, int64(uintptr(unsafe.pointer(&namebuf[0]))), 0, 0); return r1, err; } @@ -91,7 +94,7 @@ export func mkdir(name string, perm int64) (ret int64, errno int64) { if !StringToBytes(&namebuf, name) { return -1, ENAMETOOLONG } - r1, r2, err := Syscall(SYS_MKDIR, BytePtr(&namebuf[0]), perm, 0); + r1, r2, err := Syscall(SYS_MKDIR, int64(uintptr(unsafe.pointer(&namebuf[0]))), perm, 0); return r1, err; } diff --git a/src/lib/syscall/file_linux.go b/src/lib/syscall/file_linux.go index 3fa2588aff98283af30935ef1c0bf28fe56c180e..4d6982bb2ba4434df037f22fbb4b9348652edfff 100644 --- a/src/lib/syscall/file_linux.go +++ b/src/lib/syscall/file_linux.go @@ -6,7 +6,10 @@ package syscall // File operations for Linux -import syscall "syscall" +import ( + "syscall"; + "unsafe"; +) const NameBufsize = 512 @@ -15,7 +18,7 @@ export func open(name string, mode int64, perm int64) (ret int64, errno int64) { if !StringToBytes(&namebuf, name) { return -1, ENAMETOOLONG } - r1, r2, err := Syscall(SYS_OPEN, BytePtr(&namebuf[0]), mode, perm); + r1, r2, err := Syscall(SYS_OPEN, int64(uintptr(unsafe.pointer(&namebuf[0]))), mode, perm); return r1, err; } @@ -24,7 +27,7 @@ export func creat(name string, perm int64) (ret int64, errno int64) { if !StringToBytes(&namebuf, name) { return -1, ENAMETOOLONG } - r1, r2, err := Syscall(SYS_OPEN, BytePtr(&namebuf[0]), O_CREAT|O_WRONLY|O_TRUNC, perm); + r1, r2, err := Syscall(SYS_OPEN, int64(uintptr(unsafe.pointer(&namebuf[0]))), O_CREAT|O_WRONLY|O_TRUNC, perm); return r1, err; } @@ -34,18 +37,18 @@ export func close(fd int64) (ret int64, errno int64) { } export func read(fd int64, buf *byte, nbytes int64) (ret int64, errno int64) { - r1, r2, err := Syscall(SYS_READ, fd, BytePtr(buf), nbytes); + r1, r2, err := Syscall(SYS_READ, fd, int64(uintptr(unsafe.pointer(buf))), nbytes); return r1, err; } export func write(fd int64, buf *byte, nbytes int64) (ret int64, errno int64) { - r1, r2, err := Syscall(SYS_WRITE, fd, BytePtr(buf), nbytes); + r1, r2, err := Syscall(SYS_WRITE, fd, int64(uintptr(unsafe.pointer(buf))), nbytes); return r1, err; } export func pipe(fds *[2]int64) (ret int64, errno int64) { var t [2] int32; - r1, r2, err := Syscall(SYS_PIPE, Int32Ptr(&t[0]), 0, 0); + r1, r2, err := Syscall(SYS_PIPE, int64(uintptr(unsafe.pointer(&t[0]))), 0, 0); if r1 < 0 { return r1, err; } @@ -59,17 +62,17 @@ export func stat(name string, buf *Stat) (ret int64, errno int64) { if !StringToBytes(&namebuf, name) { return -1, ENAMETOOLONG } - r1, r2, err := Syscall(SYS_STAT, BytePtr(&namebuf[0]), StatPtr(buf), 0); + r1, r2, err := Syscall(SYS_STAT, int64(uintptr(unsafe.pointer(&namebuf[0]))), int64(uintptr(unsafe.pointer(buf))), 0); return r1, err; } export func lstat(name *byte, buf *Stat) (ret int64, errno int64) { - r1, r2, err := Syscall(SYS_LSTAT, BytePtr(name), StatPtr(buf), 0); + r1, r2, err := Syscall(SYS_LSTAT, int64(uintptr(unsafe.pointer(name))), int64(uintptr(unsafe.pointer(buf))), 0); return r1, err; } export func fstat(fd int64, buf *Stat) (ret int64, errno int64) { - r1, r2, err := Syscall(SYS_FSTAT, fd, StatPtr(buf), 0); + r1, r2, err := Syscall(SYS_FSTAT, fd, int64(uintptr(unsafe.pointer(buf))), 0); return r1, err; } @@ -78,7 +81,7 @@ export func unlink(name string) (ret int64, errno int64) { if !StringToBytes(&namebuf, name) { return -1, ENAMETOOLONG } - r1, r2, err := Syscall(SYS_UNLINK, BytePtr(&namebuf[0]), 0, 0); + r1, r2, err := Syscall(SYS_UNLINK, int64(uintptr(unsafe.pointer(&namebuf[0]))), 0, 0); return r1, err; } @@ -92,7 +95,7 @@ export func mkdir(name string, perm int64) (ret int64, errno int64) { if !StringToBytes(&namebuf, name) { return -1, ENAMETOOLONG } - r1, r2, err := Syscall(SYS_MKDIR, BytePtr(&namebuf[0]), perm, 0); + r1, r2, err := Syscall(SYS_MKDIR, int64(uintptr(unsafe.pointer(&namebuf[0]))), perm, 0); return r1, err; } diff --git a/src/lib/syscall/socket_darwin.go b/src/lib/syscall/socket_darwin.go index 6ea30986a2e3c8c26520ceed622ae85f99b62fb5..eb9f72c55b78e42ac933a54fcb3482c71b3f5259 100644 --- a/src/lib/syscall/socket_darwin.go +++ b/src/lib/syscall/socket_darwin.go @@ -7,7 +7,10 @@ // DO NOT USE DIRECTLY. package syscall -import "syscall" +import ( + "syscall"; + "unsafe"; +) export func SockaddrToSockaddrInet4(s *Sockaddr) *SockaddrInet4; export func SockaddrToSockaddrInet6(s *Sockaddr) *SockaddrInet6; @@ -20,12 +23,12 @@ export func socket(domain, proto, typ int64) (ret int64, err int64) { } export func connect(fd int64, sa *Sockaddr) (ret int64, err int64) { - r1, r2, e := Syscall(SYS_CONNECT, fd, SockaddrPtr(sa), int64(sa.len)); + r1, r2, e := Syscall(SYS_CONNECT, fd, int64(uintptr(unsafe.pointer(sa))), int64(sa.len)); return r1, e } export func bind(fd int64, sa *Sockaddr) (ret int64, err int64) { - r1, r2, e := Syscall(SYS_BIND, fd, SockaddrPtr(sa), int64(sa.len)); + r1, r2, e := Syscall(SYS_BIND, fd, int64(uintptr(unsafe.pointer(sa))), int64(sa.len)); return r1, e } @@ -36,7 +39,7 @@ export func listen(fd, n int64) (ret int64, err int64) { export func accept(fd int64, sa *Sockaddr) (ret int64, err int64) { var n int32 = SizeofSockaddr; - r1, r2, e := Syscall(SYS_ACCEPT, fd, SockaddrPtr(sa), Int32Ptr(&n)); + r1, r2, e := Syscall(SYS_ACCEPT, fd, int64(uintptr(unsafe.pointer(sa))), int64(uintptr(unsafe.pointer(&n)))); return r1, e } @@ -50,7 +53,7 @@ export func setsockopt(fd, level, opt, valueptr, length int64) (ret int64, err i export func setsockopt_int(fd, level, opt int64, value int) int64 { var n int32 = int32(opt); - r1, e := setsockopt(fd, level, opt, Int32Ptr(&n), 4); + r1, e := setsockopt(fd, level, opt, int64(uintptr(unsafe.pointer(&n))), 4); return e } @@ -59,7 +62,7 @@ export func setsockopt_tv(fd, level, opt, nsec int64) int64 { nsec += 999; tv.sec = int64(nsec/1000000000); tv.usec = uint32(nsec%1000000000); - r1, e := setsockopt(fd, level, opt, TimevalPtr(&tv), 4); + r1, e := setsockopt(fd, level, opt, int64(uintptr(unsafe.pointer(&tv))), 4); return e } @@ -72,7 +75,7 @@ export func setsockopt_linger(fd, level, opt int64, sec int) int64 { l.yes = 0; l.sec = 0; } - r1, err := setsockopt(fd, level, opt, LingerPtr(&l), 8); + r1, err := setsockopt(fd, level, opt, int64(uintptr(unsafe.pointer(&l))), 8); return err } @@ -95,15 +98,15 @@ export func kevent(kq int64, changes, events *[]Kevent, timeout *Timespec) (ret nevent = 0; eventptr = 0; if changes != nil && len(changes) > 0 { - changeptr = KeventPtr(&changes[0]); + changeptr = int64(uintptr(unsafe.pointer(&changes[0]))); nchange = int64(len(changes)) } if events != nil && len(events) > 0 { - eventptr = KeventPtr(&events[0]); + eventptr = int64(uintptr(unsafe.pointer(&events[0]))); nevent = int64(len(events)) } r1, r2, err := Syscall6(SYS_KEVENT, kq, changeptr, nchange, - eventptr, nevent, TimespecPtr(timeout)); + eventptr, nevent, int64(uintptr(unsafe.pointer(timeout)))); return r1, err } diff --git a/src/lib/syscall/socket_linux.go b/src/lib/syscall/socket_linux.go index 69a05308ca7488a2b73efab43e34295d27f049be..614c6bcb24abc9fa7bd52263e90838c278e32c78 100644 --- a/src/lib/syscall/socket_linux.go +++ b/src/lib/syscall/socket_linux.go @@ -7,7 +7,10 @@ // DO NOT USE DIRECTLY. package syscall -import "syscall" +import ( + "syscall"; + "unsafe"; +) export func SockaddrToSockaddrInet4(s *Sockaddr) *SockaddrInet4; export func SockaddrToSockaddrInet6(s *Sockaddr) *SockaddrInet6; @@ -32,12 +35,12 @@ export func socket(domain, proto, typ int64) (ret int64, err int64) { } export func connect(fd int64, sa *Sockaddr) (ret int64, err int64) { - r1, r2, e := Syscall(SYS_CONNECT, fd, SockaddrPtr(sa), Len(sa)); + r1, r2, e := Syscall(SYS_CONNECT, fd, int64(uintptr(unsafe.pointer(sa))), Len(sa)); return r1, e } export func bind(fd int64, sa *Sockaddr) (ret int64, err int64) { - r1, r2, e := Syscall(SYS_BIND, fd, SockaddrPtr(sa), Len(sa)); + r1, r2, e := Syscall(SYS_BIND, fd, int64(uintptr(unsafe.pointer(sa))), Len(sa)); return r1, e } @@ -48,7 +51,7 @@ export func listen(fd, n int64) (ret int64, err int64) { export func accept(fd int64, sa *Sockaddr) (ret int64, err int64) { var n int32 = SizeofSockaddr; - r1, r2, e := Syscall(SYS_ACCEPT, fd, SockaddrPtr(sa), Int32Ptr(&n)); + r1, r2, e := Syscall(SYS_ACCEPT, fd, int64(uintptr(unsafe.pointer(sa))), int64(uintptr(unsafe.pointer(&n)))); return r1, e } @@ -62,7 +65,7 @@ export func setsockopt(fd, level, opt, valueptr, length int64) (ret int64, err i export func setsockopt_int(fd, level, opt int64, value int) int64 { n := int32(opt); - r1, e := setsockopt(fd, level, opt, Int32Ptr(&n), 4); + r1, e := setsockopt(fd, level, opt, int64(uintptr(unsafe.pointer(&n))), 4); return e } @@ -71,7 +74,7 @@ export func setsockopt_tv(fd, level, opt, nsec int64) int64 { nsec += 999; tv.sec = int64(nsec/1000000000); tv.usec = uint64(nsec%1000000000); - r1, e := setsockopt(fd, level, opt, TimevalPtr(&tv), 4); + r1, e := setsockopt(fd, level, opt, int64(uintptr(unsafe.pointer(&tv))), 4); return e } @@ -84,7 +87,7 @@ export func setsockopt_linger(fd, level, opt int64, sec int) int64 { l.yes = 0; l.sec = 0 } - r1, err := setsockopt(fd, level, opt, LingerPtr(&l), 8); + r1, err := setsockopt(fd, level, opt, int64(uintptr(unsafe.pointer(&l))), 8); return err } @@ -101,7 +104,7 @@ export func epoll_create(size int64) (ret int64, errno int64) { } export func epoll_ctl(epfd, op, fd int64, ev *EpollEvent) int64 { - r1, r2, err := syscall.Syscall6(SYS_EPOLL_CTL, epfd, op, fd, EpollEventPtr(ev), 0, 0); + r1, r2, err := syscall.Syscall6(SYS_EPOLL_CTL, epfd, op, fd, int64(uintptr(unsafe.pointer(ev))), 0, 0); return err } @@ -109,7 +112,7 @@ export func epoll_wait(epfd int64, ev *[]EpollEvent, msec int64) (ret int64, err var evptr, nev int64; if ev != nil && len(ev) > 0 { nev = int64(len(ev)); - evptr = EpollEventPtr(&ev[0]) + evptr = int64(uintptr(unsafe.pointer(&ev[0]))) } r1, r2, err1 := syscall.Syscall6(SYS_EPOLL_WAIT, epfd, evptr, nev, msec, 0, 0); return r1, err1 diff --git a/src/lib/syscall/syscall.go b/src/lib/syscall/syscall.go index eb1ad36a64bd3ed1e07944fc3b2b1f89d214e4c8..79fc13ad997b092cd14e1e7eb18b2bb3dbd5b361 100644 --- a/src/lib/syscall/syscall.go +++ b/src/lib/syscall/syscall.go @@ -12,11 +12,6 @@ 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 RawSyscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64); -export func BytePtr(b *byte) int64; -export func Int32Ptr(p *int32) int64; -export func Int64Ptr(p *int64) int64; -export func BytePtrPtr(b **byte) int64; - /* * Used to convert file names to byte arrays for passing to kernel, * but useful elsewhere too. diff --git a/src/lib/syscall/time_amd64_linux.go b/src/lib/syscall/time_amd64_linux.go index f9b5f014d96590f4d26745216cc9fd5bcb007b73..61ad270051de64bf17fea101fb04a0568d189e97 100644 --- a/src/lib/syscall/time_amd64_linux.go +++ b/src/lib/syscall/time_amd64_linux.go @@ -4,11 +4,14 @@ package syscall -import syscall "syscall" +import ( + "syscall"; + "unsafe"; +) export func gettimeofday() (sec, nsec, errno int64) { var tv Timeval; - r1, r2, e := Syscall(SYS_GETTIMEOFDAY, TimevalPtr(&tv), 0, 0); + r1, r2, e := Syscall(SYS_GETTIMEOFDAY, int64(uintptr(unsafe.pointer(&tv))), 0, 0); if e != 0 { return 0, 0, e } diff --git a/src/lib/syscall/types_amd64_darwin.go b/src/lib/syscall/types_amd64_darwin.go index 2c98fd521e33f2f0b2b55196c05cc8ff8c625a14..f03f8c75468e23b4eb3027414189141053dda6e8 100644 --- a/src/lib/syscall/types_amd64_darwin.go +++ b/src/lib/syscall/types_amd64_darwin.go @@ -14,13 +14,11 @@ export type Timespec struct { sec int64; nsec uint64; } -export func TimespecPtr(t *Timespec) int64; export type Timeval struct { sec int64; usec uint32; } -export func TimevalPtr(t *Timeval) int64; // Processes @@ -43,7 +41,6 @@ export type Rusage struct { nvcsw int64; nivcsw int64; } -export func RusagePtr(r *Rusage) int64; // Files @@ -91,7 +88,6 @@ export type Stat struct { lspare uint32; qspare [2]uint64; } -export func StatPtr(s *Stat) int64; // Sockets @@ -163,13 +159,11 @@ export type Sockaddr struct { opaque [126]byte } export const SizeofSockaddr = 128 -export func SockaddrPtr(s *Sockaddr) int64; export type Linger struct { yes int32; sec int32; } -export func LingerPtr(l *Linger) int64; // Events (kqueue, kevent) @@ -215,5 +209,4 @@ export type Kevent struct { data int64; udata int64; } -export func KeventPtr(e *Kevent) int64; diff --git a/src/lib/syscall/types_amd64_linux.go b/src/lib/syscall/types_amd64_linux.go index ccca2671cd501ef785926de7576636ff59bd1b27..f422c62b6d1898822174a7952ec1f8304b7313ff 100644 --- a/src/lib/syscall/types_amd64_linux.go +++ b/src/lib/syscall/types_amd64_linux.go @@ -14,13 +14,11 @@ export type Timespec struct { sec int64; nsec uint64; } -export func TimespecPtr(t *Timespec) int64; export type Timeval struct { sec int64; usec uint64; } -export func TimevalPtr(t *Timeval) int64; // Processes @@ -43,7 +41,6 @@ export type Rusage struct { nvcsw int64; nivcsw int64; } -export func RusagePtr(r *Rusage) int64; // Files @@ -87,7 +84,6 @@ export type Stat struct { ctime Timespec; _unused [3]int64 } -export func StatPtr(s *Stat) int64; // Sockets @@ -165,13 +161,11 @@ export type Sockaddr struct { opaque [126]byte } export const SizeofSockaddr = 128 -export func SockaddrPtr(s *Sockaddr) int64; export type Linger struct { yes int32; sec int32; } -export func LingerPtr(l *Linger) int64; // Events (epoll) @@ -197,4 +191,3 @@ export type EpollEvent struct { fd int32; pad int32; } -export func EpollEventPtr(ev *EpollEvent) int64; diff --git a/src/lib/time/tick.go b/src/lib/time/tick.go index d8f7eae09d60791884600f8c8307dddc704f6094..f3df11c45e8413c017144df00fb58f27555953dd 100644 --- a/src/lib/time/tick.go +++ b/src/lib/time/tick.go @@ -6,7 +6,8 @@ package time import ( "syscall"; - "time" + "time"; + "unsafe"; ) // TODO(rsc): This implementation of time.Tick is a @@ -30,7 +31,7 @@ func Ticker(ns int64, c *chan int64) { when := now; for { when += ns; // next alarm - + // if c <- now took too long, skip ahead if when < now { // one big step @@ -42,7 +43,7 @@ func Ticker(ns int64, c *chan int64) { } syscall.nstotimeval(when - now, &tv); - syscall.Syscall6(syscall.SYS_SELECT, 0, 0, 0, 0, syscall.TimevalPtr(&tv), 0); + syscall.Syscall6(syscall.SYS_SELECT, 0, 0, 0, 0, int64(uintptr(unsafe.pointer(&tv))), 0); now = time.Nanoseconds(); c <- now; }