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;
 	}