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