go-seccomp: add support for arm64.

BUG=None
TEST=Ran 'go test -cpu=10 -test_install -test_endian' on host.
TEST=Cross compiled test with 'x86_64-cros-linux-gnu-go' and ran on a chell device.
TEST=Cross compiled test with 'armv7a-cros-linux-gnueabi-go' and ran on a daisy device.
TEST=Cross compiled test with 'aarch64-cros-linux-gnu-go' and ran on an elm device.

Change-Id: I577a42a83515fc40cb06e90d8d3746f55816a110
Reviewed-on: https://chromium-review.googlesource.com/740011
Commit-Ready: Rahul Chaudhry <rahulchaudhry@chromium.org>
Tested-by: Rahul Chaudhry <rahulchaudhry@chromium.org>
Reviewed-by: Manoj Gupta <manojgupta@chromium.org>
Reviewed-by: Rahul Chaudhry <rahulchaudhry@chromium.org>
diff --git a/src/chromiumos/seccomp/audit_arm64.go b/src/chromiumos/seccomp/audit_arm64.go
new file mode 100644
index 0000000..ad06179
--- /dev/null
+++ b/src/chromiumos/seccomp/audit_arm64.go
@@ -0,0 +1,13 @@
+// Copyright 2015 The Chromium OS 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 seccomp
+
+// #include <linux/audit.h>
+import "C"
+
+const (
+	auditArch = C.AUDIT_ARCH_AARCH64
+	nbits     = 64
+)
diff --git a/src/chromiumos/seccomp/syscalls_amd64.go b/src/chromiumos/seccomp/syscalls_amd64.go
index 77c90da..409fefb 100644
--- a/src/chromiumos/seccomp/syscalls_amd64.go
+++ b/src/chromiumos/seccomp/syscalls_amd64.go
@@ -2,7 +2,7 @@
 
 package seccomp
 
-// #include <asm/unistd.h>
+// #include "unistd.h"
 import "C"
 
 // syscallNum maps system call names to numbers.
diff --git a/src/chromiumos/seccomp/syscalls_arm.go b/src/chromiumos/seccomp/syscalls_arm.go
index ae7156a..bec0f51 100644
--- a/src/chromiumos/seccomp/syscalls_arm.go
+++ b/src/chromiumos/seccomp/syscalls_arm.go
@@ -2,7 +2,7 @@
 
 package seccomp
 
-// #include <asm/unistd.h>
+// #include "unistd.h"
 import "C"
 
 // syscallNum maps system call names to numbers.
diff --git a/src/chromiumos/seccomp/syscalls_arm64.go b/src/chromiumos/seccomp/syscalls_arm64.go
new file mode 100644
index 0000000..af71acb
--- /dev/null
+++ b/src/chromiumos/seccomp/syscalls_arm64.go
@@ -0,0 +1,323 @@
+// DO NOT EDIT. Autogenerated by syscalls_gen.go
+
+package seccomp
+
+// #include "unistd.h"
+import "C"
+
+// syscallNum maps system call names to numbers.
+var syscallNum = map[string]int{
+	"io_setup":               C.__NR_io_setup,
+	"io_destroy":             C.__NR_io_destroy,
+	"io_submit":              C.__NR_io_submit,
+	"io_cancel":              C.__NR_io_cancel,
+	"io_getevents":           C.__NR_io_getevents,
+	"setxattr":               C.__NR_setxattr,
+	"lsetxattr":              C.__NR_lsetxattr,
+	"fsetxattr":              C.__NR_fsetxattr,
+	"getxattr":               C.__NR_getxattr,
+	"lgetxattr":              C.__NR_lgetxattr,
+	"fgetxattr":              C.__NR_fgetxattr,
+	"listxattr":              C.__NR_listxattr,
+	"llistxattr":             C.__NR_llistxattr,
+	"flistxattr":             C.__NR_flistxattr,
+	"removexattr":            C.__NR_removexattr,
+	"lremovexattr":           C.__NR_lremovexattr,
+	"fremovexattr":           C.__NR_fremovexattr,
+	"getcwd":                 C.__NR_getcwd,
+	"lookup_dcookie":         C.__NR_lookup_dcookie,
+	"eventfd2":               C.__NR_eventfd2,
+	"epoll_create1":          C.__NR_epoll_create1,
+	"epoll_ctl":              C.__NR_epoll_ctl,
+	"epoll_pwait":            C.__NR_epoll_pwait,
+	"dup":                    C.__NR_dup,
+	"dup3":                   C.__NR_dup3,
+	"inotify_init1":          C.__NR_inotify_init1,
+	"inotify_add_watch":      C.__NR_inotify_add_watch,
+	"inotify_rm_watch":       C.__NR_inotify_rm_watch,
+	"ioctl":                  C.__NR_ioctl,
+	"ioprio_set":             C.__NR_ioprio_set,
+	"ioprio_get":             C.__NR_ioprio_get,
+	"flock":                  C.__NR_flock,
+	"mknodat":                C.__NR_mknodat,
+	"mkdirat":                C.__NR_mkdirat,
+	"unlinkat":               C.__NR_unlinkat,
+	"symlinkat":              C.__NR_symlinkat,
+	"linkat":                 C.__NR_linkat,
+	"renameat":               C.__NR_renameat,
+	"umount2":                C.__NR_umount2,
+	"mount":                  C.__NR_mount,
+	"pivot_root":             C.__NR_pivot_root,
+	"nfsservctl":             C.__NR_nfsservctl,
+	"fallocate":              C.__NR_fallocate,
+	"faccessat":              C.__NR_faccessat,
+	"chdir":                  C.__NR_chdir,
+	"fchdir":                 C.__NR_fchdir,
+	"chroot":                 C.__NR_chroot,
+	"fchmod":                 C.__NR_fchmod,
+	"fchmodat":               C.__NR_fchmodat,
+	"fchownat":               C.__NR_fchownat,
+	"fchown":                 C.__NR_fchown,
+	"openat":                 C.__NR_openat,
+	"close":                  C.__NR_close,
+	"vhangup":                C.__NR_vhangup,
+	"pipe2":                  C.__NR_pipe2,
+	"quotactl":               C.__NR_quotactl,
+	"getdents64":             C.__NR_getdents64,
+	"read":                   C.__NR_read,
+	"write":                  C.__NR_write,
+	"readv":                  C.__NR_readv,
+	"writev":                 C.__NR_writev,
+	"pread64":                C.__NR_pread64,
+	"pwrite64":               C.__NR_pwrite64,
+	"preadv":                 C.__NR_preadv,
+	"pwritev":                C.__NR_pwritev,
+	"pselect6":               C.__NR_pselect6,
+	"ppoll":                  C.__NR_ppoll,
+	"signalfd4":              C.__NR_signalfd4,
+	"vmsplice":               C.__NR_vmsplice,
+	"splice":                 C.__NR_splice,
+	"tee":                    C.__NR_tee,
+	"readlinkat":             C.__NR_readlinkat,
+	"sync":                   C.__NR_sync,
+	"fsync":                  C.__NR_fsync,
+	"fdatasync":              C.__NR_fdatasync,
+	"sync_file_range":        C.__NR_sync_file_range,
+	"timerfd_create":         C.__NR_timerfd_create,
+	"timerfd_settime":        C.__NR_timerfd_settime,
+	"timerfd_gettime":        C.__NR_timerfd_gettime,
+	"utimensat":              C.__NR_utimensat,
+	"acct":                   C.__NR_acct,
+	"capget":                 C.__NR_capget,
+	"capset":                 C.__NR_capset,
+	"personality":            C.__NR_personality,
+	"exit":                   C.__NR_exit,
+	"exit_group":             C.__NR_exit_group,
+	"waitid":                 C.__NR_waitid,
+	"set_tid_address":        C.__NR_set_tid_address,
+	"unshare":                C.__NR_unshare,
+	"futex":                  C.__NR_futex,
+	"set_robust_list":        C.__NR_set_robust_list,
+	"get_robust_list":        C.__NR_get_robust_list,
+	"nanosleep":              C.__NR_nanosleep,
+	"getitimer":              C.__NR_getitimer,
+	"setitimer":              C.__NR_setitimer,
+	"kexec_load":             C.__NR_kexec_load,
+	"init_module":            C.__NR_init_module,
+	"delete_module":          C.__NR_delete_module,
+	"timer_create":           C.__NR_timer_create,
+	"timer_gettime":          C.__NR_timer_gettime,
+	"timer_getoverrun":       C.__NR_timer_getoverrun,
+	"timer_settime":          C.__NR_timer_settime,
+	"timer_delete":           C.__NR_timer_delete,
+	"clock_settime":          C.__NR_clock_settime,
+	"clock_gettime":          C.__NR_clock_gettime,
+	"clock_getres":           C.__NR_clock_getres,
+	"clock_nanosleep":        C.__NR_clock_nanosleep,
+	"syslog":                 C.__NR_syslog,
+	"ptrace":                 C.__NR_ptrace,
+	"sched_setparam":         C.__NR_sched_setparam,
+	"sched_setscheduler":     C.__NR_sched_setscheduler,
+	"sched_getscheduler":     C.__NR_sched_getscheduler,
+	"sched_getparam":         C.__NR_sched_getparam,
+	"sched_setaffinity":      C.__NR_sched_setaffinity,
+	"sched_getaffinity":      C.__NR_sched_getaffinity,
+	"sched_yield":            C.__NR_sched_yield,
+	"sched_get_priority_max": C.__NR_sched_get_priority_max,
+	"sched_get_priority_min": C.__NR_sched_get_priority_min,
+	"sched_rr_get_interval":  C.__NR_sched_rr_get_interval,
+	"restart_syscall":        C.__NR_restart_syscall,
+	"kill":                   C.__NR_kill,
+	"tkill":                  C.__NR_tkill,
+	"tgkill":                 C.__NR_tgkill,
+	"sigaltstack":            C.__NR_sigaltstack,
+	"rt_sigsuspend":          C.__NR_rt_sigsuspend,
+	"rt_sigaction":           C.__NR_rt_sigaction,
+	"rt_sigprocmask":         C.__NR_rt_sigprocmask,
+	"rt_sigpending":          C.__NR_rt_sigpending,
+	"rt_sigtimedwait":        C.__NR_rt_sigtimedwait,
+	"rt_sigqueueinfo":        C.__NR_rt_sigqueueinfo,
+	"rt_sigreturn":           C.__NR_rt_sigreturn,
+	"setpriority":            C.__NR_setpriority,
+	"getpriority":            C.__NR_getpriority,
+	"reboot":                 C.__NR_reboot,
+	"setregid":               C.__NR_setregid,
+	"setgid":                 C.__NR_setgid,
+	"setreuid":               C.__NR_setreuid,
+	"setuid":                 C.__NR_setuid,
+	"setresuid":              C.__NR_setresuid,
+	"getresuid":              C.__NR_getresuid,
+	"setresgid":              C.__NR_setresgid,
+	"getresgid":              C.__NR_getresgid,
+	"setfsuid":               C.__NR_setfsuid,
+	"setfsgid":               C.__NR_setfsgid,
+	"times":                  C.__NR_times,
+	"setpgid":                C.__NR_setpgid,
+	"getpgid":                C.__NR_getpgid,
+	"getsid":                 C.__NR_getsid,
+	"setsid":                 C.__NR_setsid,
+	"getgroups":              C.__NR_getgroups,
+	"setgroups":              C.__NR_setgroups,
+	"uname":                  C.__NR_uname,
+	"sethostname":            C.__NR_sethostname,
+	"setdomainname":          C.__NR_setdomainname,
+	"getrlimit":              C.__NR_getrlimit,
+	"setrlimit":              C.__NR_setrlimit,
+	"getrusage":              C.__NR_getrusage,
+	"umask":                  C.__NR_umask,
+	"prctl":                  C.__NR_prctl,
+	"getcpu":                 C.__NR_getcpu,
+	"gettimeofday":           C.__NR_gettimeofday,
+	"settimeofday":           C.__NR_settimeofday,
+	"adjtimex":               C.__NR_adjtimex,
+	"getpid":                 C.__NR_getpid,
+	"getppid":                C.__NR_getppid,
+	"getuid":                 C.__NR_getuid,
+	"geteuid":                C.__NR_geteuid,
+	"getgid":                 C.__NR_getgid,
+	"getegid":                C.__NR_getegid,
+	"gettid":                 C.__NR_gettid,
+	"sysinfo":                C.__NR_sysinfo,
+	"mq_open":                C.__NR_mq_open,
+	"mq_unlink":              C.__NR_mq_unlink,
+	"mq_timedsend":           C.__NR_mq_timedsend,
+	"mq_timedreceive":        C.__NR_mq_timedreceive,
+	"mq_notify":              C.__NR_mq_notify,
+	"mq_getsetattr":          C.__NR_mq_getsetattr,
+	"msgget":                 C.__NR_msgget,
+	"msgctl":                 C.__NR_msgctl,
+	"msgrcv":                 C.__NR_msgrcv,
+	"msgsnd":                 C.__NR_msgsnd,
+	"semget":                 C.__NR_semget,
+	"semctl":                 C.__NR_semctl,
+	"semtimedop":             C.__NR_semtimedop,
+	"semop":                  C.__NR_semop,
+	"shmget":                 C.__NR_shmget,
+	"shmctl":                 C.__NR_shmctl,
+	"shmat":                  C.__NR_shmat,
+	"shmdt":                  C.__NR_shmdt,
+	"socket":                 C.__NR_socket,
+	"socketpair":             C.__NR_socketpair,
+	"bind":                   C.__NR_bind,
+	"listen":                 C.__NR_listen,
+	"accept":                 C.__NR_accept,
+	"connect":                C.__NR_connect,
+	"getsockname":            C.__NR_getsockname,
+	"getpeername":            C.__NR_getpeername,
+	"sendto":                 C.__NR_sendto,
+	"recvfrom":               C.__NR_recvfrom,
+	"setsockopt":             C.__NR_setsockopt,
+	"getsockopt":             C.__NR_getsockopt,
+	"shutdown":               C.__NR_shutdown,
+	"sendmsg":                C.__NR_sendmsg,
+	"recvmsg":                C.__NR_recvmsg,
+	"readahead":              C.__NR_readahead,
+	"brk":                    C.__NR_brk,
+	"munmap":                 C.__NR_munmap,
+	"mremap":                 C.__NR_mremap,
+	"add_key":                C.__NR_add_key,
+	"request_key":            C.__NR_request_key,
+	"keyctl":                 C.__NR_keyctl,
+	"clone":                  C.__NR_clone,
+	"execve":                 C.__NR_execve,
+	"swapon":                 C.__NR_swapon,
+	"swapoff":                C.__NR_swapoff,
+	"mprotect":               C.__NR_mprotect,
+	"msync":                  C.__NR_msync,
+	"mlock":                  C.__NR_mlock,
+	"munlock":                C.__NR_munlock,
+	"mlockall":               C.__NR_mlockall,
+	"munlockall":             C.__NR_munlockall,
+	"mincore":                C.__NR_mincore,
+	"madvise":                C.__NR_madvise,
+	"remap_file_pages":       C.__NR_remap_file_pages,
+	"mbind":                  C.__NR_mbind,
+	"get_mempolicy":          C.__NR_get_mempolicy,
+	"set_mempolicy":          C.__NR_set_mempolicy,
+	"migrate_pages":          C.__NR_migrate_pages,
+	"move_pages":             C.__NR_move_pages,
+	"rt_tgsigqueueinfo":      C.__NR_rt_tgsigqueueinfo,
+	"perf_event_open":        C.__NR_perf_event_open,
+	"accept4":                C.__NR_accept4,
+	"recvmmsg":               C.__NR_recvmmsg,
+	"arch_specific_syscall":  C.__NR_arch_specific_syscall,
+	"wait4":                  C.__NR_wait4,
+	"prlimit64":              C.__NR_prlimit64,
+	"fanotify_init":          C.__NR_fanotify_init,
+	"fanotify_mark":          C.__NR_fanotify_mark,
+	"name_to_handle_at":      C.__NR_name_to_handle_at,
+	"open_by_handle_at":      C.__NR_open_by_handle_at,
+	"clock_adjtime":          C.__NR_clock_adjtime,
+	"syncfs":                 C.__NR_syncfs,
+	"setns":                  C.__NR_setns,
+	"sendmmsg":               C.__NR_sendmmsg,
+	"process_vm_readv":       C.__NR_process_vm_readv,
+	"process_vm_writev":      C.__NR_process_vm_writev,
+	"kcmp":                   C.__NR_kcmp,
+	"finit_module":           C.__NR_finit_module,
+	"sched_setattr":          C.__NR_sched_setattr,
+	"sched_getattr":          C.__NR_sched_getattr,
+	"renameat2":              C.__NR_renameat2,
+	"seccomp":                C.__NR_seccomp,
+	"getrandom":              C.__NR_getrandom,
+	"memfd_create":           C.__NR_memfd_create,
+	"bpf":                    C.__NR_bpf,
+	"execveat":               C.__NR_execveat,
+	"userfaultfd":            C.__NR_userfaultfd,
+	"membarrier":             C.__NR_membarrier,
+	"mlock2":                 C.__NR_mlock2,
+	"open":                   C.__NR_open,
+	"link":                   C.__NR_link,
+	"unlink":                 C.__NR_unlink,
+	"mknod":                  C.__NR_mknod,
+	"chmod":                  C.__NR_chmod,
+	"chown":                  C.__NR_chown,
+	"mkdir":                  C.__NR_mkdir,
+	"rmdir":                  C.__NR_rmdir,
+	"lchown":                 C.__NR_lchown,
+	"access":                 C.__NR_access,
+	"rename":                 C.__NR_rename,
+	"readlink":               C.__NR_readlink,
+	"symlink":                C.__NR_symlink,
+	"utimes":                 C.__NR_utimes,
+	"pipe":                   C.__NR_pipe,
+	"dup2":                   C.__NR_dup2,
+	"epoll_create":           C.__NR_epoll_create,
+	"inotify_init":           C.__NR_inotify_init,
+	"eventfd":                C.__NR_eventfd,
+	"signalfd":               C.__NR_signalfd,
+	"alarm":                  C.__NR_alarm,
+	"getpgrp":                C.__NR_getpgrp,
+	"pause":                  C.__NR_pause,
+	"time":                   C.__NR_time,
+	"utime":                  C.__NR_utime,
+	"creat":                  C.__NR_creat,
+	"getdents":               C.__NR_getdents,
+	"futimesat":              C.__NR_futimesat,
+	"select":                 C.__NR_select,
+	"poll":                   C.__NR_poll,
+	"epoll_wait":             C.__NR_epoll_wait,
+	"ustat":                  C.__NR_ustat,
+	"vfork":                  C.__NR_vfork,
+	"oldwait4":               C.__NR_oldwait4,
+	"recv":                   C.__NR_recv,
+	"send":                   C.__NR_send,
+	"bdflush":                C.__NR_bdflush,
+	"umount":                 C.__NR_umount,
+	"uselib":                 C.__NR_uselib,
+	"_sysctl":                C.__NR__sysctl,
+	"fork":                   C.__NR_fork,
+	"fcntl":                  C.__NR_fcntl,
+	"statfs":                 C.__NR_statfs,
+	"fstatfs":                C.__NR_fstatfs,
+	"truncate":               C.__NR_truncate,
+	"ftruncate":              C.__NR_ftruncate,
+	"lseek":                  C.__NR_lseek,
+	"sendfile":               C.__NR_sendfile,
+	"newfstatat":             C.__NR_newfstatat,
+	"fstat":                  C.__NR_fstat,
+	"mmap":                   C.__NR_mmap,
+	"fadvise64":              C.__NR_fadvise64,
+	"stat":                   C.__NR_stat,
+	"lstat":                  C.__NR_lstat,
+}
diff --git a/src/chromiumos/seccomp/syscalls_gen.go b/src/chromiumos/seccomp/syscalls_gen.go
index 079b3e9..47be10c 100644
--- a/src/chromiumos/seccomp/syscalls_gen.go
+++ b/src/chromiumos/seccomp/syscalls_gen.go
@@ -6,8 +6,9 @@
 
 // syscalls_gen processes system headers and generates a mapping from system call names to numbers.
 // Usage:
-//   $ echo "#include <asm/unistd.h>" | x86_64-cros-linux-gnu-gcc     -E -dD - | go run syscalls_gen.go | gofmt > syscalls_amd64.go
-//   $ echo "#include <asm/unistd.h>" | armv7a-cros-linux-gnueabi-gcc -E -dD - | go run syscalls_gen.go | gofmt > syscalls_arm.go
+//   $ echo "#include \"unistd.h\"" | x86_64-cros-linux-gnu-gcc     -E -dD - | go run syscalls_gen.go | gofmt > syscalls_amd64.go
+//   $ echo "#include \"unistd.h\"" | armv7a-cros-linux-gnueabi-gcc -E -dD - | go run syscalls_gen.go | gofmt > syscalls_arm.go
+//   $ echo "#include \"unistd.h\"" | aarch64-cros-linux-gnu-gcc    -E -dD - | go run syscalls_gen.go | gofmt > syscalls_arm64.go
 package main
 
 import (
@@ -47,7 +48,7 @@
 	fmt.Println("// DO NOT EDIT. Autogenerated by syscalls_gen.go")
 	fmt.Println()
 	fmt.Println("package seccomp")
-	fmt.Println("// #include <asm/unistd.h>")
+	fmt.Println("// #include \"unistd.h\"")
 	fmt.Println("import \"C\"")
 	fmt.Println("// syscallNum maps system call names to numbers.")
 	fmt.Println("var syscallNum = map[string]int{")
diff --git a/src/chromiumos/seccomp/unistd.h b/src/chromiumos/seccomp/unistd.h
new file mode 100644
index 0000000..739f7d8
--- /dev/null
+++ b/src/chromiumos/seccomp/unistd.h
@@ -0,0 +1,4 @@
+#define __ARCH_WANT_SYSCALL_NO_AT
+#define __ARCH_WANT_SYSCALL_NO_FLAGS
+#define __ARCH_WANT_SYSCALL_DEPRECATED
+#include <asm/unistd.h>