diff -ru orig/src/runtime/os_netbsd.go go-1.9.2/src/runtime/os_netbsd.go
--- orig/src/runtime/os_netbsd.go	2017-10-25 14:30:21.000000000 -0400
+++ go-1.9.2/src/runtime/os_netbsd.go	2017-12-01 23:38:44.990130284 -0500
@@ -55,7 +55,7 @@
 func lwp_create(ctxt unsafe.Pointer, flags uintptr, lwpid unsafe.Pointer) int32
 
 //go:noescape
-func lwp_park(abstime *timespec, unpark int32, hint, unparkhint unsafe.Pointer) int32
+func lwp_park(clockid, flags int32, ts *timespec, unpark int32, hint, unparkhint unsafe.Pointer) int32
 
 //go:noescape
 func lwp_unpark(lwp int32, hint unsafe.Pointer) int32
@@ -73,6 +73,9 @@
 	_CLOCK_VIRTUAL   = 1
 	_CLOCK_PROF      = 2
 	_CLOCK_MONOTONIC = 3
+
+	_TIMER_RELTIME   = 0
+	_TIMER_ABSTIME   = 1
 )
 
 var sigset_all = sigset{[4]uint32{^uint32(0), ^uint32(0), ^uint32(0), ^uint32(0)}}
@@ -119,7 +122,6 @@
 	if ns >= 0 {
 		var ts timespec
 		var nsec int32
-		ns += nanotime()
 		ts.set_sec(timediv(ns, 1000000000, &nsec))
 		ts.set_nsec(nsec)
 		tsp = &ts
@@ -135,7 +137,7 @@
 		}
 
 		// Sleep until unparked by semawakeup or timeout.
-		ret := lwp_park(tsp, 0, unsafe.Pointer(&_g_.m.waitsemacount), nil)
+		ret := lwp_park(_CLOCK_REALTIME, _TIMER_RELTIME, tsp, 0, unsafe.Pointer(&_g_.m.waitsemacount), nil)
 		if ret == _ETIMEDOUT {
 			return -1
 		}
diff -ru orig/src/runtime/sys_netbsd_386.s go-1.9.2/src/runtime/sys_netbsd_386.s
--- orig/src/runtime/sys_netbsd_386.s	2017-10-25 14:30:21.000000000 -0400
+++ go-1.9.2/src/runtime/sys_netbsd_386.s	2017-12-01 21:57:44.239038286 -0500
@@ -337,7 +337,7 @@
 	RET
 
 TEXT runtime·lwp_park(SB),NOSPLIT,$-4
-	MOVL	$434, AX		// sys__lwp_park
+	MOVL	$478, AX		// sys__lwp_park
 	INT	$0x80
 	MOVL	AX, ret+16(FP)
 	RET
diff -ru orig/src/runtime/sys_netbsd_amd64.s go-1.9.2/src/runtime/sys_netbsd_amd64.s
--- orig/src/runtime/sys_netbsd_amd64.s	2017-10-25 14:30:21.000000000 -0400
+++ go-1.9.2/src/runtime/sys_netbsd_amd64.s	2017-12-01 23:08:09.084741081 -0500
@@ -48,13 +48,15 @@
 	RET
 
 TEXT runtime·lwp_park(SB),NOSPLIT,$0
-	MOVQ	abstime+0(FP), DI		// arg 1 - abstime
-	MOVL	unpark+8(FP), SI		// arg 2 - unpark
-	MOVQ	hint+16(FP), DX		// arg 3 - hint
-	MOVQ	unparkhint+24(FP), R10		// arg 4 - unparkhint
-	MOVL	$434, AX		// sys__lwp_park
+	MOVL	clockid+0(FP), DI		// arg 1 - clockid
+	MOVL	flags+4(FP), SI			// arg 2 - flags
+	MOVQ	ts+8(FP), DX			// arg 3 - ts
+	MOVL	unpark+16(FP), R10		// arg 4 - unpark
+	MOVQ	hint+24(FP), R8			// arg 5 - hint
+	MOVQ	unparkhint+32(FP), R9		// arg 6 - unparkhint
+	MOVL	$478, AX			// sys__lwp_park
 	SYSCALL
-	MOVL	AX, ret+32(FP)
+	MOVL	AX, ret+40(FP)
 	RET
 
 TEXT runtime·lwp_unpark(SB),NOSPLIT,$0
diff -ru orig/src/runtime/sys_netbsd_arm.s go-1.9.2/src/runtime/sys_netbsd_arm.s
--- orig/src/runtime/sys_netbsd_arm.s	2017-10-25 14:30:21.000000000 -0400
+++ go-1.9.2/src/runtime/sys_netbsd_arm.s	2017-12-01 22:03:17.729010903 -0500
@@ -72,11 +72,15 @@
 	RET
 
 TEXT runtime·lwp_park(SB),NOSPLIT,$0
-	MOVW abstime+0(FP), R0	// arg 1 - abstime
-	MOVW unpark+4(FP), R1	// arg 2 - unpark
-	MOVW hint+8(FP), R2	// arg 3 - hint
-	MOVW unparkhint+12(FP), R3	// arg 4 - unparkhint
-	SWI $0xa001b2	// sys__lwp_park
+	MOVW clock_id+0(FP), R0		// arg 1 - clock_id
+	MOVW flags+4(FP), R1		// arg 2 - flags
+	MOVW ts+8(FP), R2		// arg 3 - ts
+	MOVW unpark+12(FP), R3		// arg 4 - unpark
+	MOVW hint+16(FP), R4		// arg 5 - hint
+	MOVW R4, 4(R13)
+	MOVW unparkhint+20(FP), R5	// arg 6 - unparkhint
+	MOVW R5, 8(R13)
+	SWI $0xa001de			// sys__lwp_park
 	MOVW	R0, ret+16(FP)
 	RET
 
diff -ru orig/src/syscall/zsysnum_netbsd_386.go go-1.9.2/src/syscall/zsysnum_netbsd_386.go
--- orig/src/syscall/zsysnum_netbsd_386.go	2017-10-25 14:30:21.000000000 -0400
+++ go-1.9.2/src/syscall/zsysnum_netbsd_386.go	2017-12-01 21:53:19.252259373 -0500
@@ -229,7 +229,6 @@
 	SYS_CLOCK_GETRES         = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); }
 	SYS_NANOSLEEP            = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
 	SYS___SIGTIMEDWAIT       = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); }
-	SYS__LWP_PARK            = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); }
 	SYS_KEVENT               = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); }
 	SYS_PSELECT              = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }
 	SYS_POLLTS               = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }
@@ -270,4 +269,6 @@
 	SYS_POSIX_SPAWN          = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); }
 	SYS_RECVMMSG             = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); }
 	SYS_SENDMMSG             = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); }
+	SYS_CLOCK_NANOSLEEP      = 477 // { int|sys||clock_nanosleep(clockid_t clockid, int flags, const struct timespec *rqtp, struct timespec *rmtp); */
+	SYS__LWP_PARK            = 478 // { int|sys||lwp_park(clockid_t clock_id, int flags, const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint);
 )
diff -ru orig/src/syscall/zsysnum_netbsd_amd64.go go-1.9.2/src/syscall/zsysnum_netbsd_amd64.go
--- orig/src/syscall/zsysnum_netbsd_amd64.go	2017-10-25 14:30:21.000000000 -0400
+++ go-1.9.2/src/syscall/zsysnum_netbsd_amd64.go	2017-12-01 21:53:27.852516570 -0500
@@ -229,7 +229,6 @@
 	SYS_CLOCK_GETRES         = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); }
 	SYS_NANOSLEEP            = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
 	SYS___SIGTIMEDWAIT       = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); }
-	SYS__LWP_PARK            = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); }
 	SYS_KEVENT               = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); }
 	SYS_PSELECT              = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }
 	SYS_POLLTS               = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }
@@ -270,4 +269,6 @@
 	SYS_POSIX_SPAWN          = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); }
 	SYS_RECVMMSG             = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); }
 	SYS_SENDMMSG             = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); }
+	SYS_CLOCK_NANOSLEEP      = 477 // { int|sys||clock_nanosleep(clockid_t clockid, int flags, const struct timespec *rqtp, struct timespec *rmtp); */
+	SYS__LWP_PARK            = 478 // { int|sys||lwp_park(clockid_t clock_id, int flags, const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint);
 )
diff -ru orig/src/syscall/zsysnum_netbsd_arm.go go-1.9.2/src/syscall/zsysnum_netbsd_arm.go
--- orig/src/syscall/zsysnum_netbsd_arm.go	2017-10-25 14:30:21.000000000 -0400
+++ go-1.9.2/src/syscall/zsysnum_netbsd_arm.go	2017-12-01 21:53:10.091318992 -0500
@@ -229,7 +229,6 @@
 	SYS_CLOCK_GETRES         = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); }
 	SYS_NANOSLEEP            = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
 	SYS___SIGTIMEDWAIT       = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); }
-	SYS__LWP_PARK            = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); }
 	SYS_KEVENT               = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); }
 	SYS_PSELECT              = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }
 	SYS_POLLTS               = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }
@@ -270,4 +269,6 @@
 	SYS_POSIX_SPAWN          = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); }
 	SYS_RECVMMSG             = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); }
 	SYS_SENDMMSG             = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); }
+	SYS_CLOCK_NANOSLEEP      = 477 // { int|sys||clock_nanosleep(clockid_t clockid, int flags, const struct timespec *rqtp, struct timespec *rmtp); */
+	SYS__LWP_PARK            = 478 // { int|sys||lwp_park(clockid_t clock_id, int flags, const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint);
 )