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