[CRIU] [PATCH 4/7] arm: fixed AArch64 syscall numbers

Alexander Kartashov alekskartashov at parallels.com
Wed Oct 9 10:23:02 PDT 2013


It turned out that AArch64 uses the UAPI syscall numbering scheme
that is incompatible with x86. Unfortunately this kills the idea
of the unified syscall table and syscall generator.

Note that the following syscalls:

* open,
* mkdir,
* rmdir,
* unlink,

are declared obsolete in the UAPI. Moreover the syscall arch_prctl
doesn't exist in the UAPI.

Signed-off-by: Alexander Kartashov <alekskartashov at parallels.com>
---
 arch/arm/gen-sys-exec-tbl.pl |    4 +-
 arch/arm/gen-syscalls.pl     |    4 +-
 arch/arm/syscall.def         |  169 +++++++++++++++++++++---------------------
 3 files changed, 90 insertions(+), 87 deletions(-)

diff --git a/arch/arm/gen-sys-exec-tbl.pl b/arch/arm/gen-sys-exec-tbl.pl
index 1746a0c..a3037b7 100755
--- a/arch/arm/gen-sys-exec-tbl.pl
+++ b/arch/arm/gen-sys-exec-tbl.pl
@@ -22,9 +22,9 @@ for (<IN>) {
 	my $sys_name;
 	my $sys_num;
 
-	if (/(?<name>\S+)\s+(?<alias>\S+)\s+(?<code64>\d+)\s+(?<code32>(?:\d+|\!))\s+\((?<args>.+)\)/) {
+	if (/(?<name>\S+)\s+(?<alias>\S+)\s+(?<code64>\d+|\!)\s+(?<code32>(?:\d+|\!))\s+\((?<args>.+)\)/) {
 		$sys_name = $+{alias};
-	} elsif (/(?<name>\S+)\s+(?<code64>\d+)\s+(?<code32>(?:\d+|\!))\s+\((?<args>.+)\)/) {
+	} elsif (/(?<name>\S+)\s+(?<code64>\d+|\!)\s+(?<code32>(?:\d+|\!))\s+\((?<args>.+)\)/) {
 		$sys_name = $+{name};
 	} else {
 		unlink $tblout;
diff --git a/arch/arm/gen-syscalls.pl b/arch/arm/gen-syscalls.pl
index 9176f01..6fb8f3b 100755
--- a/arch/arm/gen-syscalls.pl
+++ b/arch/arm/gen-syscalls.pl
@@ -61,10 +61,10 @@ for (<IN>) {
 	my $code_macro;
 	my $sys_name;
 
-	if (/(?<name>\S+)\s+(?<alias>\S+)\s+(?<code64>\d+)\s+(?<code32>(?:\d+|\!))\s+\((?<args>.+)\)/) {
+	if (/(?<name>\S+)\s+(?<alias>\S+)\s+(?<code64>\d+|\!)\s+(?<code32>(?:\d+|\!))\s+\((?<args>.+)\)/) {
 		$code_macro = "__NR_$+{name}";
 		$sys_name   = "sys_$+{alias}";
-	} elsif (/(?<name>\S+)\s+(?<code64>\d+)\s+(?<code32>(?:\d+|\!))\s+\((?<args>.+)\)/) {
+	} elsif (/(?<name>\S+)\s+(?<code64>\d+|\!)\s+(?<code32>(?:\d+|\!))\s+\((?<args>.+)\)/) {
 		$code_macro = "__NR_$+{name}";
 		$sys_name   = "sys_$+{name}";
 	} else {
diff --git a/arch/arm/syscall.def b/arch/arm/syscall.def
index 0ba78c3..f37f806 100644
--- a/arch/arm/syscall.def
+++ b/arch/arm/syscall.def
@@ -5,88 +5,91 @@
 # The template is (name and arguments are optinal if you need only __NR_x
 # defined, but no realy entry point in syscalls lib).
 #
-# name/alias			code	code32	arguments
+# name/alias			code64	code32	arguments
 # -----------------------------------------------------------------------
 #
-read				0	3	(int fd, void *buf, unsigned long count)
-write				1	4	(int fd, const void *buf, unsigned long count)
-open				2	5	(const char *filename, unsigned long flags, unsigned long mode)
-close				3	6	(int fd)
-lseek				8	19	(int fd, unsigned long offset, unsigned long origin)
-mmap				9	!	(void *addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, unsigned long offset)
-mprotect			10	125	(const void *addr, unsigned long len, unsigned long prot)
-munmap				11	91	(void *addr, unsigned long len)
-brk				12	45	(void *addr)
-rt_sigaction	sigaction	13	174	(int signum, const rt_sigaction_t *act, rt_sigaction_t *oldact, size_t sigsetsize)
-rt_sigprocmask	sigprocmask	14	175	(int how, k_rtsigset_t *set, k_rtsigset_t *old, size_t sigsetsize)
-rt_sigreturn			15	173	(void)
-ioctl				16	54	(unsigned int fd, unsigned int cmd, unsigned long arg)
-pread64				17	180	(unsigned int fd, char *buf, size_t count, loff_t pos)
-mremap				25	163	(unsigned long addr, unsigned long old_len, unsigned long new_len, unsigned long flag, unsigned long new_addr)
-mincore				27	219	(void *addr, unsigned long size, unsigned char *vec)
-madvise				28	220	(unsigned long start, size_t len, int behavior)
-shmat				30	305	(int shmid, void *shmaddr, int shmflag)
-pause				34	29	(void)
-nanosleep			35	162	(struct timespec *req, struct timespec *rem)
-getitimer			36	105	(int which, const struct itimerval *val)
-setitimer			38	104	(int which, const struct itimerval *val, struct itimerval *old)
-getpid				39	20	(void)
-socket				41	281	(int domain, int type, int protocol)
-connect				42	283	(int sockfd, struct sockaddr *addr, int addrlen)
-sendto				44	290	(int sockfd, void *buff, size_t len, unsigned int flags, struct sockaddr *addr, int addr_len)
-recvfrom			52	292	(int sockfd, void *ubuf, size_t size, unsigned int flags, struct sockaddr *addr, int *addr_len)
-sendmsg				46	296	(int sockfd, const struct msghdr *msg, int flags)
-recvmsg				47	297	(int sockfd, struct msghdr *msg, int flags)
-shutdown			48	293	(int sockfd, int how)
-bind				49	282	(int sockfd, const struct sockaddr *addr, int addrlen)
-setsockopt			54	294	(int sockfd, int level, int optname, const void *optval, socklen_t optlen)
-getsockopt			55	295	(int sockfd, int level, int optname, const void *optval, socklen_t *optlen)
-clone				56	120	(unsigned long flags, void *child_stack, void *parent_tid, void *child_tid)
-exit				60	1	(unsigned long error_code)
-wait4				61	114	(int pid, int *status, int options, struct rusage *ru)
-kill				62	37	(long pid, int sig)
-fcntl				72	55	(int fd, int type, long arg)
-flock				73	143	(int fd, unsigned long cmd)
-mkdir				83	39	(const char *name, int mode)
-rmdir				84	40	(const char *name)
-unlink				87	10	(char *pathname)
-readlink			89	85	(const char *path, char *buf, int bufsize)
-umask				95	60	(int mask)
-getgroups			115	205	(int gsize, unsigned int *groups)
-setresuid			117	164	(int uid, int euid, int suid)
-setresgid			119	170	(int gid, int egid, int sgid)
-getpgid				121	132	(pid_t pid)
-setfsuid			122	138	(int fsuid)
-setfsgid			123	139	(int fsgid)
-getsid				124	147	(void)
-capset				126	185	(struct cap_header *h, struct cap_data *d)
-rt_sigqueueinfo			129     178	(pid_t pid, int sig, siginfo_t *info)
-setpriority			141	97	(int which, int who, int nice)
-sched_setscheduler		144	156	(int pid, int policy, struct sched_param *p)
-sigaltstack			131	186	(const void *uss, void *uoss)
-personality			135	136	(unsigned int personality)
-prctl				157	172	(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5)
-arch_prctl			158	17	(int option, unsigned long addr)
-setrlimit			160	75	(int resource, struct krlimit *rlim)
-mount				165	21	(char *dev_nmae, char *dir_name, char *type, unsigned long flags, void *data)
-umount2				166	52	(char *name, int flags)
-gettid				186	224	(void)
-futex				202	240	(u32 *uaddr, int op, u32 val, struct timespec *utime, u32 *uaddr2, u32 val3)
-set_tid_address			218	256	(int *tid_addr)
-restart_syscall			219	0	(void)
-timer_create			222	257	(clockid_t which_clock, struct sigevent *timer_event_spec, timer_t *created_timer_id)
-timer_settime			223	258	(timer_t timer_id, int flags, const struct itimerspec *new_setting, struct itimerspec *old_setting)
-timer_gettime			224	259	(int timer_id, const struct itimerspec *setting)
-timer_getoverrun		225	260	(int timer_id)
-timer_delete			226	261	(timer_t timer_id)
-exit_group			231	248	(int error_code)
-set_robust_list			273	338	(struct robust_list_head *head, size_t len)
-get_robust_list			274	339	(int pid, struct robust_list_head **head_ptr, size_t *len_ptr)
-signalfd4			289	355	(int fd, k_rtsigset_t *mask, size_t sizemask, int flags)
-rt_tgsigqueueinfo		297	363	(pid_t tgid, pid_t pid, int sig, siginfo_t *info)
-vmsplice			278	343	(int fd, const struct iovec *iov, unsigned long nr_segs, unsigned int flags)
-fanotify_init			300	367	(unsigned int flags, unsigned int event_f_flags)
-fanotify_mark			301	368	(int fanotify_fd, unsigned int flags, u64 mask, int dfd, const char *pathname)
-open_by_handle_at		304	371	(int mountdirfd, struct file_handle *handle, int flags)
-setns				308	375	(int fd, int nstype)
-kcmp				312	378	(pid_t pid1, pid_t pid2, int type, unsigned long idx1, unsigned long idx2)
+read				63	3	(int fd, void *buf, unsigned long count)
+write				64	4	(int fd, const void *buf, unsigned long count)
+open				!	5	(const char *filename, unsigned long flags, unsigned long mode)
+close				57	6	(int fd)
+lseek				62	19	(int fd, unsigned long offset, unsigned long origin)
+mmap				222	!	(void *addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, unsigned long offset)
+mprotect			226	125	(const void *addr, unsigned long len, unsigned long prot)
+munmap				215	91	(void *addr, unsigned long len)
+brk				214	45	(void *addr)
+rt_sigaction	sigaction	134	174	(int signum, const rt_sigaction_t *act, rt_sigaction_t *oldact, size_t sigsetsize)
+rt_sigprocmask	sigprocmask	135	175	(int how, k_rtsigset_t *set, k_rtsigset_t *old, size_t sigsetsize)
+rt_sigreturn			139	173	(void)
+ioctl				29	54	(unsigned int fd, unsigned int cmd, unsigned long arg)
+pread64				67	180	(unsigned int fd, char *buf, size_t count, loff_t pos)
+mremap				216	163	(unsigned long addr, unsigned long old_len, unsigned long new_len, unsigned long flag, unsigned long new_addr)
+mincore				232	219	(void *addr, unsigned long size, unsigned char *vec)
+madvise				233	220	(unsigned long start, size_t len, int behavior)
+shmat				196	305	(int shmid, void *shmaddr, int shmflag)
+pause				1061	29	(void)
+nanosleep			101	162	(struct timespec *req, struct timespec *rem)
+getitimer			102	105	(int which, const struct itimerval *val)
+setitimer			103	104	(int which, const struct itimerval *val, struct itimerval *old)
+getpid				172	20	(void)
+socket				198	281	(int domain, int type, int protocol)
+connect				203	283	(int sockfd, struct sockaddr *addr, int addrlen)
+sendto				206	290	(int sockfd, void *buff, size_t len, unsigned int flags, struct sockaddr *addr, int addr_len)
+recvfrom			207	292	(int sockfd, void *ubuf, size_t size, unsigned int flags, struct sockaddr *addr, int *addr_len)
+sendmsg				211	296	(int sockfd, const struct msghdr *msg, int flags)
+recvmsg				212	297	(int sockfd, struct msghdr *msg, int flags)
+shutdown			210	293	(int sockfd, int how)
+bind				235	282	(int sockfd, const struct sockaddr *addr, int addrlen)
+setsockopt			208	294	(int sockfd, int level, int optname, const void *optval, socklen_t optlen)
+getsockopt			209	295	(int sockfd, int level, int optname, const void *optval, socklen_t *optlen)
+clone				220	120	(unsigned long flags, void *child_stack, void *parent_tid, void *child_tid)
+exit				93	1	(unsigned long error_code)
+wait4				260	114	(int pid, int *status, int options, struct rusage *ru)
+kill				129	37	(long pid, int sig)
+fcntl				25	55	(int fd, int type, long arg)
+flock				32	143	(int fd, unsigned long cmd)
+mkdir				!	39	(const char *name, int mode)
+rmdir				!	40	(const char *name)
+unlink				!	10	(char *pathname)
+readlink			78	85	(const char *path, char *buf, int bufsize)
+umask				166	60	(int mask)
+getgroups			158	205	(int gsize, unsigned int *groups)
+setresuid			147	164	(int uid, int euid, int suid)
+setresgid			149	170	(int gid, int egid, int sgid)
+getpgid				155	132	(pid_t pid)
+setfsuid			151	138	(int fsuid)
+setfsgid			152	139	(int fsgid)
+getsid				156	147	(void)
+capset				91	185	(struct cap_header *h, struct cap_data *d)
+rt_sigqueueinfo			138	178	(pid_t pid, int sig, siginfo_t *info)
+setpriority			140	97	(int which, int who, int nice)
+sched_setscheduler		119	156	(int pid, int policy, struct sched_param *p)
+sigaltstack			132	186	(const void *uss, void *uoss)
+personality			92	136	(unsigned int personality)
+prctl				167	172	(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5)
+arch_prctl			!	17	(int option, unsigned long addr)
+setrlimit			164	75	(int resource, struct krlimit *rlim)
+mount				40	21	(char *dev_nmae, char *dir_name, char *type, unsigned long flags, void *data)
+umount2				39	52	(char *name, int flags)
+gettid				178	224	(void)
+futex				98	240	(u32 *uaddr, int op, u32 val, struct timespec *utime, u32 *uaddr2, u32 val3)
+set_tid_address			96	256	(int *tid_addr)
+restart_syscall			128	0	(void)
+timer_create			107	257	(clockid_t which_clock, struct sigevent *timer_event_spec, timer_t *created_timer_id)
+timer_settime			110	258	(timer_t timer_id, int flags, const struct itimerspec *new_setting, struct itimerspec *old_setting)
+timer_gettime			108	259	(int timer_id, const struct itimerspec *setting)
+timer_getoverrun		109	260	(int timer_id)
+timer_delete			111	261	(timer_t timer_id)
+exit_group			94	248	(int error_code)
+set_robust_list			99	338	(struct robust_list_head *head, size_t len)
+get_robust_list			100	339	(int pid, struct robust_list_head **head_ptr, size_t *len_ptr)
+signalfd4			74	355	(int fd, k_rtsigset_t *mask, size_t sizemask, int flags)
+rt_tgsigqueueinfo		240	363	(pid_t tgid, pid_t pid, int sig, siginfo_t *info)
+vmsplice			75	343	(int fd, const struct iovec *iov, unsigned long nr_segs, unsigned int flags)
+fanotify_init			262	367	(unsigned int flags, unsigned int event_f_flags)
+fanotify_mark			263	368	(int fanotify_fd, unsigned int flags, u64 mask, int dfd, const char *pathname)
+open_by_handle_at		265	371	(int mountdirfd, struct file_handle *handle, int flags)
+setns				268	375	(int fd, int nstype)
+kcmp				272	378	(pid_t pid1, pid_t pid2, int type, unsigned long idx1, unsigned long idx2)
+openat				56	322	(int dirfd, const char *pathname, int flags, mode_t mode)
+mkdirat				34	323	(int dirfd, const char *pathname, mode_t mode)
+unlinkat			35	328	(int dirfd, const char *pathname, int flags)
-- 
1.7.9.5



More information about the CRIU mailing list