xref: /openbmc/linux/arch/mips/kernel/scall32-o32.S (revision 22246614)
1/*
2 * This file is subject to the terms and conditions of the GNU General Public
3 * License.  See the file "COPYING" in the main directory of this archive
4 * for more details.
5 *
6 * Copyright (C) 1995-99, 2000- 02, 06 Ralf Baechle <ralf@linux-mips.org>
7 * Copyright (C) 2001 MIPS Technologies, Inc.
8 * Copyright (C) 2004 Thiemo Seufer
9 */
10#include <linux/errno.h>
11#include <asm/asm.h>
12#include <asm/asmmacro.h>
13#include <asm/irqflags.h>
14#include <asm/mipsregs.h>
15#include <asm/regdef.h>
16#include <asm/stackframe.h>
17#include <asm/isadep.h>
18#include <asm/sysmips.h>
19#include <asm/thread_info.h>
20#include <asm/unistd.h>
21#include <asm/war.h>
22#include <asm/asm-offsets.h>
23
24/* Highest syscall used of any syscall flavour */
25#define MAX_SYSCALL_NO	__NR_O32_Linux + __NR_O32_Linux_syscalls
26
27	.align  5
28NESTED(handle_sys, PT_SIZE, sp)
29	.set	noat
30	SAVE_SOME
31	TRACE_IRQS_ON_RELOAD
32	STI
33	.set	at
34
35	lw	t1, PT_EPC(sp)		# skip syscall on return
36
37#if defined(CONFIG_BINFMT_IRIX)
38	sltiu	t0, v0, MAX_SYSCALL_NO + 1 # check syscall number
39#else
40	subu	v0, v0, __NR_O32_Linux	# check syscall number
41	sltiu	t0, v0, __NR_O32_Linux_syscalls + 1
42#endif
43	addiu	t1, 4			# skip to next instruction
44	sw	t1, PT_EPC(sp)
45	beqz	t0, illegal_syscall
46
47	sll	t0, v0, 3
48	la	t1, sys_call_table
49	addu	t1, t0
50	lw	t2, (t1)		# syscall routine
51	lw	t3, 4(t1)		# >= 0 if we need stack arguments
52	beqz	t2, illegal_syscall
53
54	sw	a3, PT_R26(sp)		# save a3 for syscall restarting
55	bgez	t3, stackargs
56
57stack_done:
58	lw	t0, TI_FLAGS($28)	# syscall tracing enabled?
59	li	t1, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT
60	and	t0, t1
61	bnez	t0, syscall_trace_entry	# -> yes
62
63	jalr	t2			# Do The Real Thing (TM)
64
65	li	t0, -EMAXERRNO - 1	# error?
66	sltu	t0, t0, v0
67	sw	t0, PT_R7(sp)		# set error flag
68	beqz	t0, 1f
69
70	negu	v0			# error
71	sw	v0, PT_R0(sp)		# set flag for syscall
72					# restarting
731:	sw	v0, PT_R2(sp)		# result
74
75o32_syscall_exit:
76	local_irq_disable		# make sure need_resched and
77					# signals dont change between
78					# sampling and return
79	lw	a2, TI_FLAGS($28)	# current->work
80	li	t0, _TIF_ALLWORK_MASK
81	and	t0, a2
82	bnez	t0, o32_syscall_exit_work
83
84	j	restore_partial
85
86o32_syscall_exit_work:
87	j	syscall_exit_work_partial
88
89/* ------------------------------------------------------------------------ */
90
91syscall_trace_entry:
92	SAVE_STATIC
93	move	s0, t2
94	move	a0, sp
95	li	a1, 0
96	jal	do_syscall_trace
97
98	move	t0, s0
99	RESTORE_STATIC
100	lw	a0, PT_R4(sp)		# Restore argument registers
101	lw	a1, PT_R5(sp)
102	lw	a2, PT_R6(sp)
103	lw	a3, PT_R7(sp)
104	jalr	t0
105
106	li	t0, -EMAXERRNO - 1	# error?
107	sltu	t0, t0, v0
108	sw	t0, PT_R7(sp)		# set error flag
109	beqz	t0, 1f
110
111	negu	v0			# error
112	sw	v0, PT_R0(sp)		# set flag for syscall
113					# restarting
1141:	sw	v0, PT_R2(sp)		# result
115
116	j	syscall_exit
117
118/* ------------------------------------------------------------------------ */
119
120	/*
121	 * More than four arguments.  Try to deal with it by copying the
122	 * stack arguments from the user stack to the kernel stack.
123	 * This Sucks (TM).
124	 */
125stackargs:
126	lw	t0, PT_R29(sp)		# get old user stack pointer
127
128	/*
129	 * We intentionally keep the kernel stack a little below the top of
130	 * userspace so we don't have to do a slower byte accurate check here.
131	 */
132	lw	t5, TI_ADDR_LIMIT($28)
133	addu	t4, t0, 32
134	and	t5, t4
135	bltz	t5, bad_stack		# -> sp is bad
136
137	/* Ok, copy the args from the luser stack to the kernel stack.
138	 * t3 is the precomputed number of instruction bytes needed to
139	 * load or store arguments 6-8.
140	 */
141
142	la	t1, 5f			# load up to 3 arguments
143	subu	t1, t3
1441:	lw	t5, 16(t0)		# argument #5 from usp
145	.set    push
146	.set    noreorder
147	.set	nomacro
148	jr	t1
149	 addiu	t1, 6f - 5f
150
1512:	lw	t8, 28(t0)		# argument #8 from usp
1523:	lw	t7, 24(t0)		# argument #7 from usp
1534:	lw	t6, 20(t0)		# argument #6 from usp
1545:	jr	t1
155	 sw	t5, 16(sp)		# argument #5 to ksp
156
157	sw	t8, 28(sp)		# argument #8 to ksp
158	sw	t7, 24(sp)		# argument #7 to ksp
159	sw	t6, 20(sp)		# argument #6 to ksp
1606:	j	stack_done		# go back
161	 nop
162	.set	pop
163
164	.section __ex_table,"a"
165	PTR	1b,bad_stack
166	PTR	2b,bad_stack
167	PTR	3b,bad_stack
168	PTR	4b,bad_stack
169	.previous
170
171	/*
172	 * The stackpointer for a call with more than 4 arguments is bad.
173	 * We probably should handle this case a bit more drastic.
174	 */
175bad_stack:
176	negu	v0				# error
177	sw	v0, PT_R0(sp)
178	sw	v0, PT_R2(sp)
179	li	t0, 1				# set error flag
180	sw	t0, PT_R7(sp)
181	j	o32_syscall_exit
182
183	/*
184	 * The system call does not exist in this kernel
185	 */
186illegal_syscall:
187	li	v0, -ENOSYS			# error
188	sw	v0, PT_R2(sp)
189	li	t0, 1				# set error flag
190	sw	t0, PT_R7(sp)
191	j	o32_syscall_exit
192	END(handle_sys)
193
194	LEAF(mips_atomic_set)
195	andi	v0, a1, 3			# must be word aligned
196	bnez	v0, bad_alignment
197
198	lw	v1, TI_ADDR_LIMIT($28)		# in legal address range?
199	addiu	a0, a1, 4
200	or	a0, a0, a1
201	and	a0, a0, v1
202	bltz	a0, bad_address
203
204#ifdef CONFIG_CPU_HAS_LLSC
205	/* Ok, this is the ll/sc case.  World is sane :-)  */
2061:	ll	v0, (a1)
207	move	a0, a2
2082:	sc	a0, (a1)
209#if R10000_LLSC_WAR
210	beqzl	a0, 1b
211#else
212	beqz	a0, 1b
213#endif
214
215	.section __ex_table,"a"
216	PTR	1b, bad_stack
217	PTR	2b, bad_stack
218	.previous
219#else
220	sw	a1, 16(sp)
221	sw	a2, 20(sp)
222
223	move	a0, sp
224	move	a2, a1
225	li	a1, 1
226	jal	do_page_fault
227
228	lw	a1, 16(sp)
229	lw	a2, 20(sp)
230
231	/*
232	 * At this point the page should be readable and writable unless
233	 * there was no more memory available.
234	 */
2351:	lw	v0, (a1)
2362:	sw	a2, (a1)
237
238	.section __ex_table,"a"
239	PTR	1b, no_mem
240	PTR	2b, no_mem
241	.previous
242#endif
243
244	sw	zero, PT_R7(sp)		# success
245	sw	v0, PT_R2(sp)		# result
246
247	j	o32_syscall_exit	# continue like a normal syscall
248
249no_mem:	li	v0, -ENOMEM
250	jr	ra
251
252bad_address:
253	li	v0, -EFAULT
254	jr	ra
255
256bad_alignment:
257	li	v0, -EINVAL
258	jr	ra
259	END(mips_atomic_set)
260
261	LEAF(sys_sysmips)
262	beq	a0, MIPS_ATOMIC_SET, mips_atomic_set
263	j	_sys_sysmips
264	END(sys_sysmips)
265
266	LEAF(sys_syscall)
267#if defined(CONFIG_BINFMT_IRIX)
268	sltiu	v0, a0, MAX_SYSCALL_NO + 1 # check syscall number
269#else
270	subu	t0, a0, __NR_O32_Linux	# check syscall number
271	sltiu	v0, t0, __NR_O32_Linux_syscalls + 1
272#endif
273	sll	t1, t0, 3
274	beqz	v0, einval
275
276	lw	t2, sys_call_table(t1)		# syscall routine
277
278#if defined(CONFIG_BINFMT_IRIX)
279	li	v1, 4000			# nr of sys_syscall
280#else
281	li	v1, 4000 - __NR_O32_Linux	# index of sys_syscall
282#endif
283	beq	t0, v1, einval			# do not recurse
284
285	/* Some syscalls like execve get their arguments from struct pt_regs
286	   and claim zero arguments in the syscall table. Thus we have to
287	   assume the worst case and shuffle around all potential arguments.
288	   If you want performance, don't use indirect syscalls. */
289
290	move	a0, a1				# shift argument registers
291	move	a1, a2
292	move	a2, a3
293	lw	a3, 16(sp)
294	lw	t4, 20(sp)
295	lw	t5, 24(sp)
296	lw	t6, 28(sp)
297	sw	t4, 16(sp)
298	sw	t5, 20(sp)
299	sw	t6, 24(sp)
300	sw	a0, PT_R4(sp)			# .. and push back a0 - a3, some
301	sw	a1, PT_R5(sp)			# syscalls expect them there
302	sw	a2, PT_R6(sp)
303	sw	a3, PT_R7(sp)
304	sw	a3, PT_R26(sp)			# update a3 for syscall restarting
305	jr	t2
306	/* Unreached */
307
308einval:	li	v0, -EINVAL
309	jr	ra
310	END(sys_syscall)
311
312	.macro	fifty ptr, nargs, from=1, to=50
313	sys	\ptr		\nargs
314	.if	\to-\from
315	fifty	\ptr,\nargs,"(\from+1)",\to
316	.endif
317	.endm
318
319	.macro	mille ptr, nargs, from=1, to=20
320	fifty	\ptr,\nargs
321	.if	\to-\from
322	mille	\ptr,\nargs,"(\from+1)",\to
323	.endif
324	.endm
325
326	.macro	syscalltable
327#if defined(CONFIG_BINFMT_IRIX)
328	mille	sys_ni_syscall		0	/*    0 -  999 SVR4 flavour */
329	mille	sys_ni_syscall		0	/* 1000 - 1999 32-bit IRIX */
330	mille	sys_ni_syscall		0	/* 2000 - 2999 BSD43 flavour */
331	mille	sys_ni_syscall		0	/* 3000 - 3999 POSIX flavour */
332#endif
333
334	sys	sys_syscall		8	/* 4000 */
335	sys	sys_exit		1
336	sys	sys_fork		0
337	sys	sys_read		3
338	sys	sys_write		3
339	sys	sys_open		3	/* 4005 */
340	sys	sys_close		1
341	sys	sys_waitpid		3
342	sys	sys_creat		2
343	sys	sys_link		2
344	sys	sys_unlink		1	/* 4010 */
345	sys	sys_execve		0
346	sys	sys_chdir		1
347	sys	sys_time		1
348	sys	sys_mknod		3
349	sys	sys_chmod		2	/* 4015 */
350	sys	sys_lchown		3
351	sys	sys_ni_syscall		0
352	sys	sys_ni_syscall		0	/* was sys_stat */
353	sys	sys_lseek		3
354	sys	sys_getpid		0	/* 4020 */
355	sys	sys_mount		5
356	sys	sys_oldumount		1
357	sys	sys_setuid		1
358	sys	sys_getuid		0
359	sys	sys_stime		1	/* 4025 */
360	sys	sys_ptrace		4
361	sys	sys_alarm		1
362	sys	sys_ni_syscall		0	/* was sys_fstat */
363	sys	sys_pause		0
364	sys	sys_utime		2	/* 4030 */
365	sys	sys_ni_syscall		0
366	sys	sys_ni_syscall		0
367	sys	sys_access		2
368	sys	sys_nice		1
369	sys	sys_ni_syscall		0	/* 4035 */
370	sys	sys_sync		0
371	sys	sys_kill		2
372	sys	sys_rename		2
373	sys	sys_mkdir		2
374	sys	sys_rmdir		1	/* 4040 */
375	sys	sys_dup			1
376	sys	sys_pipe		0
377	sys	sys_times		1
378	sys	sys_ni_syscall		0
379	sys	sys_brk			1	/* 4045 */
380	sys	sys_setgid		1
381	sys	sys_getgid		0
382	sys	sys_ni_syscall		0	/* was signal(2) */
383	sys	sys_geteuid		0
384	sys	sys_getegid		0	/* 4050 */
385	sys	sys_acct		1
386	sys	sys_umount		2
387	sys	sys_ni_syscall		0
388	sys	sys_ioctl		3
389	sys	sys_fcntl		3	/* 4055 */
390	sys	sys_ni_syscall		2
391	sys	sys_setpgid		2
392	sys	sys_ni_syscall		0
393	sys	sys_olduname		1
394	sys	sys_umask		1	/* 4060 */
395	sys	sys_chroot		1
396	sys	sys_ustat		2
397	sys	sys_dup2		2
398	sys	sys_getppid		0
399	sys	sys_getpgrp		0	/* 4065 */
400	sys	sys_setsid		0
401	sys	sys_sigaction		3
402	sys	sys_sgetmask		0
403	sys	sys_ssetmask		1
404	sys	sys_setreuid		2	/* 4070 */
405	sys	sys_setregid		2
406	sys	sys_sigsuspend		0
407	sys	sys_sigpending		1
408	sys	sys_sethostname		2
409	sys	sys_setrlimit		2	/* 4075 */
410	sys	sys_getrlimit		2
411	sys	sys_getrusage		2
412	sys	sys_gettimeofday	2
413	sys	sys_settimeofday	2
414	sys	sys_getgroups		2	/* 4080 */
415	sys	sys_setgroups		2
416	sys	sys_ni_syscall		0	/* old_select */
417	sys	sys_symlink		2
418	sys	sys_ni_syscall		0	/* was sys_lstat */
419	sys	sys_readlink		3	/* 4085 */
420	sys	sys_uselib		1
421	sys	sys_swapon		2
422	sys	sys_reboot		3
423	sys	old_readdir		3
424	sys	old_mmap		6	/* 4090 */
425	sys	sys_munmap		2
426	sys	sys_truncate		2
427	sys	sys_ftruncate		2
428	sys	sys_fchmod		2
429	sys	sys_fchown		3	/* 4095 */
430	sys	sys_getpriority		2
431	sys	sys_setpriority		3
432	sys	sys_ni_syscall		0
433	sys	sys_statfs		2
434	sys	sys_fstatfs		2	/* 4100 */
435	sys	sys_ni_syscall		0	/* was ioperm(2) */
436	sys	sys_socketcall		2
437	sys	sys_syslog		3
438	sys	sys_setitimer		3
439	sys	sys_getitimer		2	/* 4105 */
440	sys	sys_newstat		2
441	sys	sys_newlstat		2
442	sys	sys_newfstat		2
443	sys	sys_uname		1
444	sys	sys_ni_syscall		0	/* 4110 was iopl(2) */
445	sys	sys_vhangup		0
446	sys	sys_ni_syscall		0	/* was sys_idle() */
447	sys	sys_ni_syscall		0	/* was sys_vm86 */
448	sys	sys_wait4		4
449	sys	sys_swapoff		1	/* 4115 */
450	sys	sys_sysinfo		1
451	sys	sys_ipc			6
452	sys	sys_fsync		1
453	sys	sys_sigreturn		0
454	sys	sys_clone		0	/* 4120 */
455	sys	sys_setdomainname	2
456	sys	sys_newuname		1
457	sys	sys_ni_syscall		0	/* sys_modify_ldt */
458	sys	sys_adjtimex		1
459	sys	sys_mprotect		3	/* 4125 */
460	sys	sys_sigprocmask		3
461	sys	sys_ni_syscall		0	/* was create_module */
462	sys	sys_init_module		5
463	sys	sys_delete_module	1
464	sys	sys_ni_syscall		0	/* 4130	was get_kernel_syms */
465	sys	sys_quotactl		4
466	sys	sys_getpgid		1
467	sys	sys_fchdir		1
468	sys	sys_bdflush		2
469	sys	sys_sysfs		3	/* 4135 */
470	sys	sys_personality		1
471	sys	sys_ni_syscall		0	/* for afs_syscall */
472	sys	sys_setfsuid		1
473	sys	sys_setfsgid		1
474	sys	sys_llseek		5	/* 4140 */
475	sys	sys_getdents		3
476	sys	sys_select		5
477	sys	sys_flock		2
478	sys	sys_msync		3
479	sys	sys_readv		3	/* 4145 */
480	sys	sys_writev		3
481	sys	sys_cacheflush		3
482	sys	sys_cachectl		3
483	sys	sys_sysmips		4
484	sys	sys_ni_syscall		0	/* 4150 */
485	sys	sys_getsid		1
486	sys	sys_fdatasync		1
487	sys	sys_sysctl		1
488	sys	sys_mlock		2
489	sys	sys_munlock		2	/* 4155 */
490	sys	sys_mlockall		1
491	sys	sys_munlockall		0
492	sys	sys_sched_setparam	2
493	sys	sys_sched_getparam	2
494	sys	sys_sched_setscheduler	3	/* 4160 */
495	sys	sys_sched_getscheduler	1
496	sys	sys_sched_yield		0
497	sys	sys_sched_get_priority_max 1
498	sys	sys_sched_get_priority_min 1
499	sys	sys_sched_rr_get_interval 2	/* 4165 */
500	sys	sys_nanosleep,		2
501	sys	sys_mremap,		5
502	sys	sys_accept		3
503	sys	sys_bind		3
504	sys	sys_connect		3	/* 4170 */
505	sys	sys_getpeername		3
506	sys	sys_getsockname		3
507	sys	sys_getsockopt		5
508	sys	sys_listen		2
509	sys	sys_recv		4	/* 4175 */
510	sys	sys_recvfrom		6
511	sys	sys_recvmsg		3
512	sys	sys_send		4
513	sys	sys_sendmsg		3
514	sys	sys_sendto		6	/* 4180 */
515	sys	sys_setsockopt		5
516	sys	sys_shutdown		2
517	sys	sys_socket		3
518	sys	sys_socketpair		4
519	sys	sys_setresuid		3	/* 4185 */
520	sys	sys_getresuid		3
521	sys	sys_ni_syscall		0	/* was sys_query_module */
522	sys	sys_poll		3
523	sys	sys_nfsservctl		3
524	sys	sys_setresgid		3	/* 4190 */
525	sys	sys_getresgid		3
526	sys	sys_prctl		5
527	sys	sys_rt_sigreturn	0
528	sys	sys_rt_sigaction	4
529	sys	sys_rt_sigprocmask	4	/* 4195 */
530	sys	sys_rt_sigpending	2
531	sys	sys_rt_sigtimedwait	4
532	sys	sys_rt_sigqueueinfo	3
533	sys	sys_rt_sigsuspend	0
534	sys	sys_pread64		6	/* 4200 */
535	sys	sys_pwrite64		6
536	sys	sys_chown		3
537	sys	sys_getcwd		2
538	sys	sys_capget		2
539	sys	sys_capset		2	/* 4205 */
540	sys	sys_sigaltstack		0
541	sys	sys_sendfile		4
542	sys	sys_ni_syscall		0
543	sys	sys_ni_syscall		0
544	sys	sys_mmap2		6	/* 4210 */
545	sys	sys_truncate64		4
546	sys	sys_ftruncate64		4
547	sys	sys_stat64		2
548	sys	sys_lstat64		2
549	sys	sys_fstat64		2	/* 4215 */
550	sys	sys_pivot_root		2
551	sys	sys_mincore		3
552	sys	sys_madvise		3
553	sys	sys_getdents64		3
554	sys	sys_fcntl64		3	/* 4220 */
555	sys	sys_ni_syscall		0
556	sys	sys_gettid		0
557	sys	sys_readahead		5
558	sys	sys_setxattr		5
559	sys	sys_lsetxattr		5	/* 4225 */
560	sys	sys_fsetxattr		5
561	sys	sys_getxattr		4
562	sys	sys_lgetxattr		4
563	sys	sys_fgetxattr		4
564	sys	sys_listxattr		3	/* 4230 */
565	sys	sys_llistxattr		3
566	sys	sys_flistxattr		3
567	sys	sys_removexattr		2
568	sys	sys_lremovexattr	2
569	sys	sys_fremovexattr	2	/* 4235 */
570	sys	sys_tkill		2
571	sys	sys_sendfile64		5
572	sys	sys_futex		6
573#ifdef CONFIG_MIPS_MT_FPAFF
574	/*
575	 * For FPU affinity scheduling on MIPS MT processors, we need to
576	 * intercept sys_sched_xxxaffinity() calls until we get a proper hook
577	 * in kernel/sched.c.  Considered only temporary we only support these
578	 * hooks for the 32-bit kernel - there is no MIPS64 MT processor atm.
579	 */
580	sys	mipsmt_sys_sched_setaffinity	3
581	sys	mipsmt_sys_sched_getaffinity	3
582#else
583	sys	sys_sched_setaffinity	3
584	sys	sys_sched_getaffinity	3	/* 4240 */
585#endif /* CONFIG_MIPS_MT_FPAFF */
586	sys	sys_io_setup		2
587	sys	sys_io_destroy		1
588	sys	sys_io_getevents	5
589	sys	sys_io_submit		3
590	sys	sys_io_cancel		3	/* 4245 */
591	sys	sys_exit_group		1
592	sys	sys_lookup_dcookie	4
593	sys	sys_epoll_create	1
594	sys	sys_epoll_ctl		4
595	sys	sys_epoll_wait		3	/* 4250 */
596	sys	sys_remap_file_pages	5
597	sys	sys_set_tid_address	1
598	sys	sys_restart_syscall	0
599	sys	sys_fadvise64_64	7
600	sys	sys_statfs64		3	/* 4255 */
601	sys	sys_fstatfs64		2
602	sys	sys_timer_create	3
603	sys	sys_timer_settime	4
604	sys	sys_timer_gettime	2
605	sys	sys_timer_getoverrun	1	/* 4260 */
606	sys	sys_timer_delete	1
607	sys	sys_clock_settime	2
608	sys	sys_clock_gettime	2
609	sys	sys_clock_getres	2
610	sys	sys_clock_nanosleep	4	/* 4265 */
611	sys	sys_tgkill		3
612	sys	sys_utimes		2
613	sys	sys_mbind		4
614	sys	sys_ni_syscall		0	/* sys_get_mempolicy */
615	sys	sys_ni_syscall		0	/* 4270 sys_set_mempolicy */
616	sys	sys_mq_open		4
617	sys	sys_mq_unlink		1
618	sys	sys_mq_timedsend	5
619	sys	sys_mq_timedreceive	5
620	sys	sys_mq_notify		2	/* 4275 */
621	sys	sys_mq_getsetattr	3
622	sys	sys_ni_syscall		0	/* sys_vserver */
623	sys	sys_waitid		5
624	sys	sys_ni_syscall		0	/* available, was setaltroot */
625	sys	sys_add_key		5	/* 4280 */
626	sys	sys_request_key		4
627	sys	sys_keyctl		5
628	sys	sys_set_thread_area	1
629	sys	sys_inotify_init	0
630	sys	sys_inotify_add_watch	3	/* 4285 */
631	sys	sys_inotify_rm_watch	2
632	sys	sys_migrate_pages	4
633	sys	sys_openat		4
634	sys	sys_mkdirat		3
635	sys	sys_mknodat		4	/* 4290 */
636	sys	sys_fchownat		5
637	sys	sys_futimesat		3
638	sys	sys_fstatat64		4
639	sys	sys_unlinkat		3
640	sys	sys_renameat		4	/* 4295 */
641	sys	sys_linkat		5
642	sys	sys_symlinkat		3
643	sys	sys_readlinkat		4
644	sys	sys_fchmodat		3
645	sys	sys_faccessat		3	/* 4300 */
646	sys	sys_pselect6		6
647	sys	sys_ppoll		5
648	sys	sys_unshare		1
649	sys	sys_splice		4
650	sys	sys_sync_file_range	7	/* 4305 */
651	sys	sys_tee			4
652	sys	sys_vmsplice		4
653	sys	sys_move_pages		6
654	sys	sys_set_robust_list	2
655	sys	sys_get_robust_list	3	/* 4310 */
656	sys	sys_kexec_load		4
657	sys	sys_getcpu		3
658	sys	sys_epoll_pwait		6
659	sys	sys_ioprio_set		3
660	sys	sys_ioprio_get		2	/* 4315 */
661	sys	sys_utimensat		4
662	sys	sys_signalfd		3
663	sys	sys_ni_syscall		0
664	sys	sys_eventfd		1
665	sys	sys_fallocate		6	/* 4320 */
666	sys	sys_timerfd_create	2
667	sys	sys_timerfd_gettime	2
668	sys	sys_timerfd_settime	4
669	.endm
670
671	/* We pre-compute the number of _instruction_ bytes needed to
672	   load or store the arguments 6-8. Negative values are ignored. */
673
674	.macro  sys function, nargs
675	PTR	\function
676	LONG	(\nargs << 2) - (5 << 2)
677	.endm
678
679	.align	3
680	.type	sys_call_table,@object
681EXPORT(sys_call_table)
682	syscalltable
683	.size	sys_call_table, . - sys_call_table
684