unix: generate darwinTests per GOARCH and enabled darwin/arm64 test

Change-Id: I1c5bb166f6971f83890a08413aa8b35fe23a0c04
Reviewed-on: https://go-review.googlesource.com/c/sys/+/357069
Trust: Tobias Klauser <tobias.klauser@gmail.com>
Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
diff --git a/unix/darwin_amd64_test.go b/unix/darwin_amd64_test.go
new file mode 100644
index 0000000..71d0ef6
--- /dev/null
+++ b/unix/darwin_amd64_test.go
@@ -0,0 +1,160 @@
+// go run mkasm_darwin.go amd64
+// Code generated by the command above; DO NOT EDIT.
+
+//go:build darwin && go1.12
+// +build darwin,go1.12
+
+package unix
+
+// All the _trampoline functions in zsyscall_darwin_amd64.s.
+var darwinTests = [...]darwinTest{
+	{"accept", libc_accept_trampoline_addr},
+	{"access", libc_access_trampoline_addr},
+	{"adjtime", libc_adjtime_trampoline_addr},
+	{"bind", libc_bind_trampoline_addr},
+	{"chdir", libc_chdir_trampoline_addr},
+	{"chflags", libc_chflags_trampoline_addr},
+	{"chmod", libc_chmod_trampoline_addr},
+	{"chown", libc_chown_trampoline_addr},
+	{"chroot", libc_chroot_trampoline_addr},
+	{"clock_gettime", libc_clock_gettime_trampoline_addr},
+	{"clonefile", libc_clonefile_trampoline_addr},
+	{"clonefileat", libc_clonefileat_trampoline_addr},
+	{"close", libc_close_trampoline_addr},
+	{"closedir", libc_closedir_trampoline_addr},
+	{"connect", libc_connect_trampoline_addr},
+	{"dup", libc_dup_trampoline_addr},
+	{"dup2", libc_dup2_trampoline_addr},
+	{"exchangedata", libc_exchangedata_trampoline_addr},
+	{"exit", libc_exit_trampoline_addr},
+	{"faccessat", libc_faccessat_trampoline_addr},
+	{"fchdir", libc_fchdir_trampoline_addr},
+	{"fchflags", libc_fchflags_trampoline_addr},
+	{"fchmod", libc_fchmod_trampoline_addr},
+	{"fchmodat", libc_fchmodat_trampoline_addr},
+	{"fchown", libc_fchown_trampoline_addr},
+	{"fchownat", libc_fchownat_trampoline_addr},
+	{"fclonefileat", libc_fclonefileat_trampoline_addr},
+	{"fcntl", libc_fcntl_trampoline_addr},
+	{"fdopendir", libc_fdopendir_trampoline_addr},
+	{"fgetxattr", libc_fgetxattr_trampoline_addr},
+	{"flistxattr", libc_flistxattr_trampoline_addr},
+	{"flock", libc_flock_trampoline_addr},
+	{"fpathconf", libc_fpathconf_trampoline_addr},
+	{"fremovexattr", libc_fremovexattr_trampoline_addr},
+	{"fsetxattr", libc_fsetxattr_trampoline_addr},
+	{"fstat64", libc_fstat64_trampoline_addr},
+	{"fstatat64", libc_fstatat64_trampoline_addr},
+	{"fstatfs64", libc_fstatfs64_trampoline_addr},
+	{"fsync", libc_fsync_trampoline_addr},
+	{"ftruncate", libc_ftruncate_trampoline_addr},
+	{"futimes", libc_futimes_trampoline_addr},
+	{"getcwd", libc_getcwd_trampoline_addr},
+	{"getdtablesize", libc_getdtablesize_trampoline_addr},
+	{"getegid", libc_getegid_trampoline_addr},
+	{"geteuid", libc_geteuid_trampoline_addr},
+	{"getfsstat64", libc_getfsstat64_trampoline_addr},
+	{"getgid", libc_getgid_trampoline_addr},
+	{"getgroups", libc_getgroups_trampoline_addr},
+	{"getpeername", libc_getpeername_trampoline_addr},
+	{"getpgid", libc_getpgid_trampoline_addr},
+	{"getpgrp", libc_getpgrp_trampoline_addr},
+	{"getpid", libc_getpid_trampoline_addr},
+	{"getppid", libc_getppid_trampoline_addr},
+	{"getpriority", libc_getpriority_trampoline_addr},
+	{"getrlimit", libc_getrlimit_trampoline_addr},
+	{"getrusage", libc_getrusage_trampoline_addr},
+	{"getsid", libc_getsid_trampoline_addr},
+	{"getsockname", libc_getsockname_trampoline_addr},
+	{"getsockopt", libc_getsockopt_trampoline_addr},
+	{"gettimeofday", libc_gettimeofday_trampoline_addr},
+	{"getuid", libc_getuid_trampoline_addr},
+	{"getxattr", libc_getxattr_trampoline_addr},
+	{"ioctl", libc_ioctl_trampoline_addr},
+	{"issetugid", libc_issetugid_trampoline_addr},
+	{"kevent", libc_kevent_trampoline_addr},
+	{"kill", libc_kill_trampoline_addr},
+	{"kqueue", libc_kqueue_trampoline_addr},
+	{"lchown", libc_lchown_trampoline_addr},
+	{"link", libc_link_trampoline_addr},
+	{"linkat", libc_linkat_trampoline_addr},
+	{"listen", libc_listen_trampoline_addr},
+	{"listxattr", libc_listxattr_trampoline_addr},
+	{"lseek", libc_lseek_trampoline_addr},
+	{"lstat64", libc_lstat64_trampoline_addr},
+	{"madvise", libc_madvise_trampoline_addr},
+	{"mkdir", libc_mkdir_trampoline_addr},
+	{"mkdirat", libc_mkdirat_trampoline_addr},
+	{"mkfifo", libc_mkfifo_trampoline_addr},
+	{"mknod", libc_mknod_trampoline_addr},
+	{"mlock", libc_mlock_trampoline_addr},
+	{"mlockall", libc_mlockall_trampoline_addr},
+	{"mmap", libc_mmap_trampoline_addr},
+	{"mprotect", libc_mprotect_trampoline_addr},
+	{"msync", libc_msync_trampoline_addr},
+	{"munlock", libc_munlock_trampoline_addr},
+	{"munlockall", libc_munlockall_trampoline_addr},
+	{"munmap", libc_munmap_trampoline_addr},
+	{"open", libc_open_trampoline_addr},
+	{"openat", libc_openat_trampoline_addr},
+	{"pathconf", libc_pathconf_trampoline_addr},
+	{"pipe", libc_pipe_trampoline_addr},
+	{"poll", libc_poll_trampoline_addr},
+	{"pread", libc_pread_trampoline_addr},
+	{"ptrace", libc_ptrace_trampoline_addr},
+	{"pwrite", libc_pwrite_trampoline_addr},
+	{"read", libc_read_trampoline_addr},
+	{"readdir_r", libc_readdir_r_trampoline_addr},
+	{"readlink", libc_readlink_trampoline_addr},
+	{"readlinkat", libc_readlinkat_trampoline_addr},
+	{"recvfrom", libc_recvfrom_trampoline_addr},
+	{"recvmsg", libc_recvmsg_trampoline_addr},
+	{"removexattr", libc_removexattr_trampoline_addr},
+	{"rename", libc_rename_trampoline_addr},
+	{"renameat", libc_renameat_trampoline_addr},
+	{"revoke", libc_revoke_trampoline_addr},
+	{"rmdir", libc_rmdir_trampoline_addr},
+	{"select", libc_select_trampoline_addr},
+	{"sendfile", libc_sendfile_trampoline_addr},
+	{"sendmsg", libc_sendmsg_trampoline_addr},
+	{"sendto", libc_sendto_trampoline_addr},
+	{"setattrlist", libc_setattrlist_trampoline_addr},
+	{"setegid", libc_setegid_trampoline_addr},
+	{"seteuid", libc_seteuid_trampoline_addr},
+	{"setgid", libc_setgid_trampoline_addr},
+	{"setgroups", libc_setgroups_trampoline_addr},
+	{"setlogin", libc_setlogin_trampoline_addr},
+	{"setpgid", libc_setpgid_trampoline_addr},
+	{"setpriority", libc_setpriority_trampoline_addr},
+	{"setprivexec", libc_setprivexec_trampoline_addr},
+	{"setregid", libc_setregid_trampoline_addr},
+	{"setreuid", libc_setreuid_trampoline_addr},
+	{"setrlimit", libc_setrlimit_trampoline_addr},
+	{"setsid", libc_setsid_trampoline_addr},
+	{"setsockopt", libc_setsockopt_trampoline_addr},
+	{"settimeofday", libc_settimeofday_trampoline_addr},
+	{"setuid", libc_setuid_trampoline_addr},
+	{"setxattr", libc_setxattr_trampoline_addr},
+	{"shmat", libc_shmat_trampoline_addr},
+	{"shmctl", libc_shmctl_trampoline_addr},
+	{"shmdt", libc_shmdt_trampoline_addr},
+	{"shmget", libc_shmget_trampoline_addr},
+	{"shutdown", libc_shutdown_trampoline_addr},
+	{"socket", libc_socket_trampoline_addr},
+	{"socketpair", libc_socketpair_trampoline_addr},
+	{"stat64", libc_stat64_trampoline_addr},
+	{"statfs64", libc_statfs64_trampoline_addr},
+	{"symlink", libc_symlink_trampoline_addr},
+	{"symlinkat", libc_symlinkat_trampoline_addr},
+	{"sync", libc_sync_trampoline_addr},
+	{"sysctl", libc_sysctl_trampoline_addr},
+	{"truncate", libc_truncate_trampoline_addr},
+	{"umask", libc_umask_trampoline_addr},
+	{"undelete", libc_undelete_trampoline_addr},
+	{"unlink", libc_unlink_trampoline_addr},
+	{"unlinkat", libc_unlinkat_trampoline_addr},
+	{"unmount", libc_unmount_trampoline_addr},
+	{"utimes", libc_utimes_trampoline_addr},
+	{"wait4", libc_wait4_trampoline_addr},
+	{"write", libc_write_trampoline_addr},
+}
diff --git a/unix/darwin_arm64_test.go b/unix/darwin_arm64_test.go
new file mode 100644
index 0000000..52116f0
--- /dev/null
+++ b/unix/darwin_arm64_test.go
@@ -0,0 +1,160 @@
+// go run mkasm_darwin.go arm64
+// Code generated by the command above; DO NOT EDIT.
+
+//go:build darwin && go1.12
+// +build darwin,go1.12
+
+package unix
+
+// All the _trampoline functions in zsyscall_darwin_arm64.s.
+var darwinTests = [...]darwinTest{
+	{"accept", libc_accept_trampoline_addr},
+	{"access", libc_access_trampoline_addr},
+	{"adjtime", libc_adjtime_trampoline_addr},
+	{"bind", libc_bind_trampoline_addr},
+	{"chdir", libc_chdir_trampoline_addr},
+	{"chflags", libc_chflags_trampoline_addr},
+	{"chmod", libc_chmod_trampoline_addr},
+	{"chown", libc_chown_trampoline_addr},
+	{"chroot", libc_chroot_trampoline_addr},
+	{"clock_gettime", libc_clock_gettime_trampoline_addr},
+	{"clonefile", libc_clonefile_trampoline_addr},
+	{"clonefileat", libc_clonefileat_trampoline_addr},
+	{"close", libc_close_trampoline_addr},
+	{"closedir", libc_closedir_trampoline_addr},
+	{"connect", libc_connect_trampoline_addr},
+	{"dup", libc_dup_trampoline_addr},
+	{"dup2", libc_dup2_trampoline_addr},
+	{"exchangedata", libc_exchangedata_trampoline_addr},
+	{"exit", libc_exit_trampoline_addr},
+	{"faccessat", libc_faccessat_trampoline_addr},
+	{"fchdir", libc_fchdir_trampoline_addr},
+	{"fchflags", libc_fchflags_trampoline_addr},
+	{"fchmod", libc_fchmod_trampoline_addr},
+	{"fchmodat", libc_fchmodat_trampoline_addr},
+	{"fchown", libc_fchown_trampoline_addr},
+	{"fchownat", libc_fchownat_trampoline_addr},
+	{"fclonefileat", libc_fclonefileat_trampoline_addr},
+	{"fcntl", libc_fcntl_trampoline_addr},
+	{"fdopendir", libc_fdopendir_trampoline_addr},
+	{"fgetxattr", libc_fgetxattr_trampoline_addr},
+	{"flistxattr", libc_flistxattr_trampoline_addr},
+	{"flock", libc_flock_trampoline_addr},
+	{"fpathconf", libc_fpathconf_trampoline_addr},
+	{"fremovexattr", libc_fremovexattr_trampoline_addr},
+	{"fsetxattr", libc_fsetxattr_trampoline_addr},
+	{"fstat", libc_fstat_trampoline_addr},
+	{"fstatat", libc_fstatat_trampoline_addr},
+	{"fstatfs", libc_fstatfs_trampoline_addr},
+	{"fsync", libc_fsync_trampoline_addr},
+	{"ftruncate", libc_ftruncate_trampoline_addr},
+	{"futimes", libc_futimes_trampoline_addr},
+	{"getcwd", libc_getcwd_trampoline_addr},
+	{"getdtablesize", libc_getdtablesize_trampoline_addr},
+	{"getegid", libc_getegid_trampoline_addr},
+	{"geteuid", libc_geteuid_trampoline_addr},
+	{"getfsstat", libc_getfsstat_trampoline_addr},
+	{"getgid", libc_getgid_trampoline_addr},
+	{"getgroups", libc_getgroups_trampoline_addr},
+	{"getpeername", libc_getpeername_trampoline_addr},
+	{"getpgid", libc_getpgid_trampoline_addr},
+	{"getpgrp", libc_getpgrp_trampoline_addr},
+	{"getpid", libc_getpid_trampoline_addr},
+	{"getppid", libc_getppid_trampoline_addr},
+	{"getpriority", libc_getpriority_trampoline_addr},
+	{"getrlimit", libc_getrlimit_trampoline_addr},
+	{"getrusage", libc_getrusage_trampoline_addr},
+	{"getsid", libc_getsid_trampoline_addr},
+	{"getsockname", libc_getsockname_trampoline_addr},
+	{"getsockopt", libc_getsockopt_trampoline_addr},
+	{"gettimeofday", libc_gettimeofday_trampoline_addr},
+	{"getuid", libc_getuid_trampoline_addr},
+	{"getxattr", libc_getxattr_trampoline_addr},
+	{"ioctl", libc_ioctl_trampoline_addr},
+	{"issetugid", libc_issetugid_trampoline_addr},
+	{"kevent", libc_kevent_trampoline_addr},
+	{"kill", libc_kill_trampoline_addr},
+	{"kqueue", libc_kqueue_trampoline_addr},
+	{"lchown", libc_lchown_trampoline_addr},
+	{"link", libc_link_trampoline_addr},
+	{"linkat", libc_linkat_trampoline_addr},
+	{"listen", libc_listen_trampoline_addr},
+	{"listxattr", libc_listxattr_trampoline_addr},
+	{"lseek", libc_lseek_trampoline_addr},
+	{"lstat", libc_lstat_trampoline_addr},
+	{"madvise", libc_madvise_trampoline_addr},
+	{"mkdir", libc_mkdir_trampoline_addr},
+	{"mkdirat", libc_mkdirat_trampoline_addr},
+	{"mkfifo", libc_mkfifo_trampoline_addr},
+	{"mknod", libc_mknod_trampoline_addr},
+	{"mlock", libc_mlock_trampoline_addr},
+	{"mlockall", libc_mlockall_trampoline_addr},
+	{"mmap", libc_mmap_trampoline_addr},
+	{"mprotect", libc_mprotect_trampoline_addr},
+	{"msync", libc_msync_trampoline_addr},
+	{"munlock", libc_munlock_trampoline_addr},
+	{"munlockall", libc_munlockall_trampoline_addr},
+	{"munmap", libc_munmap_trampoline_addr},
+	{"open", libc_open_trampoline_addr},
+	{"openat", libc_openat_trampoline_addr},
+	{"pathconf", libc_pathconf_trampoline_addr},
+	{"pipe", libc_pipe_trampoline_addr},
+	{"poll", libc_poll_trampoline_addr},
+	{"pread", libc_pread_trampoline_addr},
+	{"ptrace", libc_ptrace_trampoline_addr},
+	{"pwrite", libc_pwrite_trampoline_addr},
+	{"read", libc_read_trampoline_addr},
+	{"readdir_r", libc_readdir_r_trampoline_addr},
+	{"readlink", libc_readlink_trampoline_addr},
+	{"readlinkat", libc_readlinkat_trampoline_addr},
+	{"recvfrom", libc_recvfrom_trampoline_addr},
+	{"recvmsg", libc_recvmsg_trampoline_addr},
+	{"removexattr", libc_removexattr_trampoline_addr},
+	{"rename", libc_rename_trampoline_addr},
+	{"renameat", libc_renameat_trampoline_addr},
+	{"revoke", libc_revoke_trampoline_addr},
+	{"rmdir", libc_rmdir_trampoline_addr},
+	{"select", libc_select_trampoline_addr},
+	{"sendfile", libc_sendfile_trampoline_addr},
+	{"sendmsg", libc_sendmsg_trampoline_addr},
+	{"sendto", libc_sendto_trampoline_addr},
+	{"setattrlist", libc_setattrlist_trampoline_addr},
+	{"setegid", libc_setegid_trampoline_addr},
+	{"seteuid", libc_seteuid_trampoline_addr},
+	{"setgid", libc_setgid_trampoline_addr},
+	{"setgroups", libc_setgroups_trampoline_addr},
+	{"setlogin", libc_setlogin_trampoline_addr},
+	{"setpgid", libc_setpgid_trampoline_addr},
+	{"setpriority", libc_setpriority_trampoline_addr},
+	{"setprivexec", libc_setprivexec_trampoline_addr},
+	{"setregid", libc_setregid_trampoline_addr},
+	{"setreuid", libc_setreuid_trampoline_addr},
+	{"setrlimit", libc_setrlimit_trampoline_addr},
+	{"setsid", libc_setsid_trampoline_addr},
+	{"setsockopt", libc_setsockopt_trampoline_addr},
+	{"settimeofday", libc_settimeofday_trampoline_addr},
+	{"setuid", libc_setuid_trampoline_addr},
+	{"setxattr", libc_setxattr_trampoline_addr},
+	{"shmat", libc_shmat_trampoline_addr},
+	{"shmctl", libc_shmctl_trampoline_addr},
+	{"shmdt", libc_shmdt_trampoline_addr},
+	{"shmget", libc_shmget_trampoline_addr},
+	{"shutdown", libc_shutdown_trampoline_addr},
+	{"socket", libc_socket_trampoline_addr},
+	{"socketpair", libc_socketpair_trampoline_addr},
+	{"stat", libc_stat_trampoline_addr},
+	{"statfs", libc_statfs_trampoline_addr},
+	{"symlink", libc_symlink_trampoline_addr},
+	{"symlinkat", libc_symlinkat_trampoline_addr},
+	{"sync", libc_sync_trampoline_addr},
+	{"sysctl", libc_sysctl_trampoline_addr},
+	{"truncate", libc_truncate_trampoline_addr},
+	{"umask", libc_umask_trampoline_addr},
+	{"undelete", libc_undelete_trampoline_addr},
+	{"unlink", libc_unlink_trampoline_addr},
+	{"unlinkat", libc_unlinkat_trampoline_addr},
+	{"unmount", libc_unmount_trampoline_addr},
+	{"utimes", libc_utimes_trampoline_addr},
+	{"wait4", libc_wait4_trampoline_addr},
+	{"write", libc_write_trampoline_addr},
+}
diff --git a/unix/darwin_test.go b/unix/darwin_test.go
index 7cb9045..ef8af08 100644
--- a/unix/darwin_test.go
+++ b/unix/darwin_test.go
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build darwin && go1.12 && amd64
-// +build darwin,go1.12,amd64
+//go:build darwin && go1.12
+// +build darwin,go1.12
 
 package unix
 
@@ -69,152 +69,3 @@
 		panic("success")
 	}
 }
-
-// All the _trampoline functions in zsyscall_darwin_$ARCH.s
-// If you adding syscalls, should be sorted.
-var darwinTests = [...]darwinTest{
-	{"adjtime", libc_adjtime_trampoline_addr},
-	{"bind", libc_bind_trampoline_addr},
-	{"chdir", libc_chdir_trampoline_addr},
-	{"chflags", libc_chflags_trampoline_addr},
-	{"chmod", libc_chmod_trampoline_addr},
-	{"chown", libc_chown_trampoline_addr},
-	{"chroot", libc_chroot_trampoline_addr},
-	{"clock_gettime", libc_clock_gettime_trampoline_addr},
-	{"clonefile", libc_clonefile_trampoline_addr},
-	{"clonefileat", libc_clonefileat_trampoline_addr},
-	{"close", libc_close_trampoline_addr},
-	{"connect", libc_connect_trampoline_addr},
-	{"dup", libc_dup_trampoline_addr},
-	{"dup2", libc_dup2_trampoline_addr},
-	{"exchangedata", libc_exchangedata_trampoline_addr},
-	{"exit", libc_exit_trampoline_addr},
-	{"faccessat", libc_faccessat_trampoline_addr},
-	{"fchdir", libc_fchdir_trampoline_addr},
-	{"fchflags", libc_fchflags_trampoline_addr},
-	{"fchmod", libc_fchmod_trampoline_addr},
-	{"fchmodat", libc_fchmodat_trampoline_addr},
-	{"fchown", libc_fchown_trampoline_addr},
-	{"fchownat", libc_fchownat_trampoline_addr},
-	{"fclonefileat", libc_fclonefileat_trampoline_addr},
-	{"fcntl", libc_fcntl_trampoline_addr},
-	{"fgetxattr", libc_fgetxattr_trampoline_addr},
-	{"flistxattr", libc_flistxattr_trampoline_addr},
-	{"flock", libc_flock_trampoline_addr},
-	{"fpathconf", libc_fpathconf_trampoline_addr},
-	{"fremovexattr", libc_fremovexattr_trampoline_addr},
-	{"fsetxattr", libc_fsetxattr_trampoline_addr},
-	{"fstat64", libc_fstat64_trampoline_addr},
-	{"fstatat64", libc_fstatat64_trampoline_addr},
-	{"fstatfs64", libc_fstatfs64_trampoline_addr},
-	{"fsync", libc_fsync_trampoline_addr},
-	{"ftruncate", libc_ftruncate_trampoline_addr},
-	{"futimes", libc_futimes_trampoline_addr},
-	{"getcwd", libc_getcwd_trampoline_addr},
-	{"getdtablesize", libc_getdtablesize_trampoline_addr},
-	{"getegid", libc_getegid_trampoline_addr},
-	{"geteuid", libc_geteuid_trampoline_addr},
-	{"getfsstat64", libc_getfsstat64_trampoline_addr},
-	{"getgid", libc_getgid_trampoline_addr},
-	{"getgroups", libc_getgroups_trampoline_addr},
-	{"getpeername", libc_getpeername_trampoline_addr},
-	{"getpgid", libc_getpgid_trampoline_addr},
-	{"getpgrp", libc_getpgrp_trampoline_addr},
-	{"getpid", libc_getpid_trampoline_addr},
-	{"getppid", libc_getppid_trampoline_addr},
-	{"getpriority", libc_getpriority_trampoline_addr},
-	{"getrlimit", libc_getrlimit_trampoline_addr},
-	{"getrusage", libc_getrusage_trampoline_addr},
-	{"getsid", libc_getsid_trampoline_addr},
-	{"getsockname", libc_getsockname_trampoline_addr},
-	{"getsockopt", libc_getsockopt_trampoline_addr},
-	{"gettimeofday", libc_gettimeofday_trampoline_addr},
-	{"getuid", libc_getuid_trampoline_addr},
-	{"getxattr", libc_getxattr_trampoline_addr},
-	{"ioctl", libc_ioctl_trampoline_addr},
-	{"issetugid", libc_issetugid_trampoline_addr},
-	{"kevent", libc_kevent_trampoline_addr},
-	{"kill", libc_kill_trampoline_addr},
-	{"kqueue", libc_kqueue_trampoline_addr},
-	{"lchown", libc_lchown_trampoline_addr},
-	{"link", libc_link_trampoline_addr},
-	{"linkat", libc_linkat_trampoline_addr},
-	{"listen", libc_listen_trampoline_addr},
-	{"listxattr", libc_listxattr_trampoline_addr},
-	{"lseek", libc_lseek_trampoline_addr},
-	{"lstat64", libc_lstat64_trampoline_addr},
-	{"madvise", libc_madvise_trampoline_addr},
-	{"mkdir", libc_mkdir_trampoline_addr},
-	{"mkdirat", libc_mkdirat_trampoline_addr},
-	{"mkfifo", libc_mkfifo_trampoline_addr},
-	{"mknod", libc_mknod_trampoline_addr},
-	{"mlock", libc_mlock_trampoline_addr},
-	{"mlockall", libc_mlockall_trampoline_addr},
-	{"mmap", libc_mmap_trampoline_addr},
-	{"mprotect", libc_mprotect_trampoline_addr},
-	{"msync", libc_msync_trampoline_addr},
-	{"munlock", libc_munlock_trampoline_addr},
-	{"munlockall", libc_munlockall_trampoline_addr},
-	{"munmap", libc_munmap_trampoline_addr},
-	{"open", libc_open_trampoline_addr},
-	{"openat", libc_openat_trampoline_addr},
-	{"pathconf", libc_pathconf_trampoline_addr},
-	{"pipe", libc_pipe_trampoline_addr},
-	{"poll", libc_poll_trampoline_addr},
-	{"pread", libc_pread_trampoline_addr},
-	{"ptrace", libc_ptrace_trampoline_addr},
-	{"pwrite", libc_pwrite_trampoline_addr},
-	{"read", libc_read_trampoline_addr},
-	{"readlink", libc_readlink_trampoline_addr},
-	{"readlinkat", libc_readlinkat_trampoline_addr},
-	{"recvfrom", libc_recvfrom_trampoline_addr},
-	{"recvmsg", libc_recvmsg_trampoline_addr},
-	{"removexattr", libc_removexattr_trampoline_addr},
-	{"rename", libc_rename_trampoline_addr},
-	{"renameat", libc_renameat_trampoline_addr},
-	{"revoke", libc_revoke_trampoline_addr},
-	{"rmdir", libc_rmdir_trampoline_addr},
-	{"select", libc_select_trampoline_addr},
-	{"sendfile", libc_sendfile_trampoline_addr},
-	{"sendmsg", libc_sendmsg_trampoline_addr},
-	{"sendto", libc_sendto_trampoline_addr},
-	{"setattrlist", libc_setattrlist_trampoline_addr},
-	{"setegid", libc_setegid_trampoline_addr},
-	{"seteuid", libc_seteuid_trampoline_addr},
-	{"setgid", libc_setgid_trampoline_addr},
-	{"setgroups", libc_setgroups_trampoline_addr},
-	{"setlogin", libc_setlogin_trampoline_addr},
-	{"setpgid", libc_setpgid_trampoline_addr},
-	{"setpriority", libc_setpriority_trampoline_addr},
-	{"setprivexec", libc_setprivexec_trampoline_addr},
-	{"setregid", libc_setregid_trampoline_addr},
-	{"setreuid", libc_setreuid_trampoline_addr},
-	{"setrlimit", libc_setrlimit_trampoline_addr},
-	{"setsid", libc_setsid_trampoline_addr},
-	{"setsockopt", libc_setsockopt_trampoline_addr},
-	{"settimeofday", libc_settimeofday_trampoline_addr},
-	{"setuid", libc_setuid_trampoline_addr},
-	{"setxattr", libc_setxattr_trampoline_addr},
-	{"shmat", libc_shmat_trampoline_addr},
-	{"shmctl", libc_shmctl_trampoline_addr},
-	{"shmdt", libc_shmdt_trampoline_addr},
-	{"shmget", libc_shmget_trampoline_addr},
-	{"shutdown", libc_shutdown_trampoline_addr},
-	{"socket", libc_socket_trampoline_addr},
-	{"socketpair", libc_socketpair_trampoline_addr},
-	{"stat64", libc_stat64_trampoline_addr},
-	{"statfs64", libc_statfs64_trampoline_addr},
-	{"symlink", libc_symlink_trampoline_addr},
-	{"symlinkat", libc_symlinkat_trampoline_addr},
-	{"sync", libc_sync_trampoline_addr},
-	{"sysctl", libc_sysctl_trampoline_addr},
-	{"truncate", libc_truncate_trampoline_addr},
-	{"umask", libc_umask_trampoline_addr},
-	{"undelete", libc_undelete_trampoline_addr},
-	{"unlink", libc_unlink_trampoline_addr},
-	{"unlinkat", libc_unlinkat_trampoline_addr},
-	{"unmount", libc_unmount_trampoline_addr},
-	{"utimes", libc_utimes_trampoline_addr},
-	{"wait4", libc_wait4_trampoline_addr},
-	{"write", libc_write_trampoline_addr},
-}
diff --git a/unix/mkasm_darwin.go b/unix/mkasm_darwin.go
index feb0ba1..49b1c94 100644
--- a/unix/mkasm_darwin.go
+++ b/unix/mkasm_darwin.go
@@ -15,12 +15,13 @@
 	"io/ioutil"
 	"log"
 	"os"
+	"sort"
 	"strings"
 )
 
 const ptrsize = 8 // Pointer size. All supported platforms are 64-bit.
 
-func writeASMFile(in string, fileName string, buildTags string) {
+func writeASMFile(in string, fileName string, buildTags string) map[string]bool {
 	trampolines := map[string]bool{}
 
 	var out bytes.Buffer
@@ -51,6 +52,48 @@
 	if err != nil {
 		log.Fatalf("can't write %s: %s", fileName, err)
 	}
+
+	return trampolines
+}
+
+const darwinTestTemplate = `// go run mkasm_darwin.go %s
+// Code generated by the command above; DO NOT EDIT.
+
+//go:build darwin && go1.12
+// +build darwin,go1.12
+
+package unix
+
+// All the _trampoline functions in zsyscall_darwin_%s.s.
+var darwinTests = [...]darwinTest{
+%s}
+`
+
+func writeDarwinTest(trampolines map[string]bool, fileName, arch string) {
+	// sort trampolines
+	sorted := make([]string, len(trampolines))
+	i := 0
+	for trampoline := range trampolines {
+		sorted[i] = trampoline
+		i++
+	}
+	sort.Slice(sorted, func(i, j int) bool { return sorted[i] < sorted[j] })
+
+	var out bytes.Buffer
+
+	const prefix = "libc_"
+	for _, trampoline := range sorted {
+		fmt.Fprintf(&out, fmt.Sprintf("\t{%q, %s_trampoline_addr},\n", strings.TrimPrefix(trampoline, prefix), trampoline))
+	}
+	lines := out.String()
+
+	out.Reset()
+	fmt.Fprintf(&out, darwinTestTemplate, strings.Join(os.Args[1:], " "), arch, lines)
+
+	err := ioutil.WriteFile(fileName, out.Bytes(), 0644)
+	if err != nil {
+		log.Fatalf("can't write %s: %s", fileName, err)
+	}
 }
 
 func main() {
@@ -69,7 +112,7 @@
 	}
 	in := string(in1) + string(in2) + string(in3)
 
-	writeASMFile(in, fmt.Sprintf("zsyscall_darwin_%s.s", arch), "go1.12")
+	trampolines := writeASMFile(in, fmt.Sprintf("zsyscall_darwin_%s.s", arch), "go1.12")
 
 	in1, err = ioutil.ReadFile("syscall_darwin.1_13.go")
 	if err != nil {
@@ -82,5 +125,12 @@
 
 	in = string(in1) + string(in2)
 
-	writeASMFile(in, fmt.Sprintf("zsyscall_darwin_%s.1_13.s", arch), "go1.13")
+	trampolines2 := writeASMFile(in, fmt.Sprintf("zsyscall_darwin_%s.1_13.s", arch), "go1.13")
+
+	// merge trampolines
+	for trampoline := range trampolines2 {
+		trampolines[trampoline] = true
+	}
+
+	writeDarwinTest(trampolines, fmt.Sprintf("darwin_%s_test.go", arch), arch)
 }