9ab70c3b5be6bac233e00568ac3ce9dd51f410e8
[linux-2.6.git] / arch / mips / kernel / scall32-o32.S
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
28 NESTED(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
53 stack_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
69 1:      sw      v0, PT_R2(sp)           # result
70
71 o32_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
82 o32_syscall_exit_work:
83         j       syscall_exit_work_partial
84
85 /* ------------------------------------------------------------------------ */
86
87 syscall_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
110 1:      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          */
121 stackargs:
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
140 1:      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
147 2:      lw      t8, 28(t0)              # argument #8 from usp
148 3:      lw      t7, 24(t0)              # argument #7 from usp
149 4:      lw      t6, 20(t0)              # argument #6 from usp
150 5:      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
156 6:      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          */
171 bad_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          */
182 illegal_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 :-)  */
202 1:      ll      v0, (a1)
203         move    a0, a2
204 2:      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          */
231 1:      lw      v0, (a1)
232 2:      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
245 no_mem: li      v0, -ENOMEM
246         jr      ra
247
248 bad_address:
249         li      v0, -EFAULT
250         jr      ra
251
252 bad_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         beqz    t0, einval              # do not recurse
266         sll     t1, t0, 3
267         beqz    v0, einval
268         lw      t2, sys_call_table(t1)          # syscall routine
269
270         /* Some syscalls like execve get their arguments from struct pt_regs
271            and claim zero arguments in the syscall table. Thus we have to
272            assume the worst case and shuffle around all potential arguments.
273            If you want performance, don't use indirect syscalls. */
274
275         move    a0, a1                          # shift argument registers
276         move    a1, a2
277         move    a2, a3
278         lw      a3, 16(sp)
279         lw      t4, 20(sp)
280         lw      t5, 24(sp)
281         lw      t6, 28(sp)
282         sw      t4, 16(sp)
283         sw      t5, 20(sp)
284         sw      t6, 24(sp)
285         sw      a0, PT_R4(sp)                   # .. and push back a0 - a3, some
286         sw      a1, PT_R5(sp)                   # syscalls expect them there
287         sw      a2, PT_R6(sp)
288         sw      a3, PT_R7(sp)
289         sw      a3, PT_R26(sp)                  # update a3 for syscall restarting
290         jr      t2
291         /* Unreached */
292
293 einval: li      v0, -ENOSYS
294         jr      ra
295         END(sys_syscall)
296
297         .macro  fifty ptr, nargs, from=1, to=50
298         sys     \ptr            \nargs
299         .if     \to-\from
300         fifty   \ptr,\nargs,"(\from+1)",\to
301         .endif
302         .endm
303
304         .macro  mille ptr, nargs, from=1, to=20
305         fifty   \ptr,\nargs
306         .if     \to-\from
307         mille   \ptr,\nargs,"(\from+1)",\to
308         .endif
309         .endm
310
311         .macro  syscalltable
312         sys     sys_syscall             8       /* 4000 */
313         sys     sys_exit                1
314         sys     sys_fork                0
315         sys     sys_read                3
316         sys     sys_write               3
317         sys     sys_open                3       /* 4005 */
318         sys     sys_close               1
319         sys     sys_waitpid             3
320         sys     sys_creat               2
321         sys     sys_link                2
322         sys     sys_unlink              1       /* 4010 */
323         sys     sys_execve              0
324         sys     sys_chdir               1
325         sys     sys_time                1
326         sys     sys_mknod               3
327         sys     sys_chmod               2       /* 4015 */
328         sys     sys_lchown              3
329         sys     sys_ni_syscall          0
330         sys     sys_ni_syscall          0       /* was sys_stat */
331         sys     sys_lseek               3
332         sys     sys_getpid              0       /* 4020 */
333         sys     sys_mount               5
334         sys     sys_oldumount           1
335         sys     sys_setuid              1
336         sys     sys_getuid              0
337         sys     sys_stime               1       /* 4025 */
338         sys     sys_ptrace              4
339         sys     sys_alarm               1
340         sys     sys_ni_syscall          0       /* was sys_fstat */
341         sys     sys_pause               0
342         sys     sys_utime               2       /* 4030 */
343         sys     sys_ni_syscall          0
344         sys     sys_ni_syscall          0
345         sys     sys_access              2
346         sys     sys_nice                1
347         sys     sys_ni_syscall          0       /* 4035 */
348         sys     sys_sync                0
349         sys     sys_kill                2
350         sys     sys_rename              2
351         sys     sys_mkdir               2
352         sys     sys_rmdir               1       /* 4040 */
353         sys     sys_dup                 1
354         sys     sysm_pipe               0
355         sys     sys_times               1
356         sys     sys_ni_syscall          0
357         sys     sys_brk                 1       /* 4045 */
358         sys     sys_setgid              1
359         sys     sys_getgid              0
360         sys     sys_ni_syscall          0       /* was signal(2) */
361         sys     sys_geteuid             0
362         sys     sys_getegid             0       /* 4050 */
363         sys     sys_acct                1
364         sys     sys_umount              2
365         sys     sys_ni_syscall          0
366         sys     sys_ioctl               3
367         sys     sys_fcntl               3       /* 4055 */
368         sys     sys_ni_syscall          2
369         sys     sys_setpgid             2
370         sys     sys_ni_syscall          0
371         sys     sys_olduname            1
372         sys     sys_umask               1       /* 4060 */
373         sys     sys_chroot              1
374         sys     sys_ustat               2
375         sys     sys_dup2                2
376         sys     sys_getppid             0
377         sys     sys_getpgrp             0       /* 4065 */
378         sys     sys_setsid              0
379         sys     sys_sigaction           3
380         sys     sys_sgetmask            0
381         sys     sys_ssetmask            1
382         sys     sys_setreuid            2       /* 4070 */
383         sys     sys_setregid            2
384         sys     sys_sigsuspend          0
385         sys     sys_sigpending          1
386         sys     sys_sethostname         2
387         sys     sys_setrlimit           2       /* 4075 */
388         sys     sys_getrlimit           2
389         sys     sys_getrusage           2
390         sys     sys_gettimeofday        2
391         sys     sys_settimeofday        2
392         sys     sys_getgroups           2       /* 4080 */
393         sys     sys_setgroups           2
394         sys     sys_ni_syscall          0       /* old_select */
395         sys     sys_symlink             2
396         sys     sys_ni_syscall          0       /* was sys_lstat */
397         sys     sys_readlink            3       /* 4085 */
398         sys     sys_uselib              1
399         sys     sys_swapon              2
400         sys     sys_reboot              3
401         sys     sys_old_readdir         3
402         sys     sys_mips_mmap           6       /* 4090 */
403         sys     sys_munmap              2
404         sys     sys_truncate            2
405         sys     sys_ftruncate           2
406         sys     sys_fchmod              2
407         sys     sys_fchown              3       /* 4095 */
408         sys     sys_getpriority         2
409         sys     sys_setpriority         3
410         sys     sys_ni_syscall          0
411         sys     sys_statfs              2
412         sys     sys_fstatfs             2       /* 4100 */
413         sys     sys_ni_syscall          0       /* was ioperm(2) */
414         sys     sys_socketcall          2
415         sys     sys_syslog              3
416         sys     sys_setitimer           3
417         sys     sys_getitimer           2       /* 4105 */
418         sys     sys_newstat             2
419         sys     sys_newlstat            2
420         sys     sys_newfstat            2
421         sys     sys_uname               1
422         sys     sys_ni_syscall          0       /* 4110 was iopl(2) */
423         sys     sys_vhangup             0
424         sys     sys_ni_syscall          0       /* was sys_idle() */
425         sys     sys_ni_syscall          0       /* was sys_vm86 */
426         sys     sys_wait4               4
427         sys     sys_swapoff             1       /* 4115 */
428         sys     sys_sysinfo             1
429         sys     sys_ipc                 6
430         sys     sys_fsync               1
431         sys     sys_sigreturn           0
432         sys     sys_clone               0       /* 4120 */
433         sys     sys_setdomainname       2
434         sys     sys_newuname            1
435         sys     sys_ni_syscall          0       /* sys_modify_ldt */
436         sys     sys_adjtimex            1
437         sys     sys_mprotect            3       /* 4125 */
438         sys     sys_sigprocmask         3
439         sys     sys_ni_syscall          0       /* was create_module */
440         sys     sys_init_module         5
441         sys     sys_delete_module       1
442         sys     sys_ni_syscall          0       /* 4130 was get_kernel_syms */
443         sys     sys_quotactl            4
444         sys     sys_getpgid             1
445         sys     sys_fchdir              1
446         sys     sys_bdflush             2
447         sys     sys_sysfs               3       /* 4135 */
448         sys     sys_personality         1
449         sys     sys_ni_syscall          0       /* for afs_syscall */
450         sys     sys_setfsuid            1
451         sys     sys_setfsgid            1
452         sys     sys_llseek              5       /* 4140 */
453         sys     sys_getdents            3
454         sys     sys_select              5
455         sys     sys_flock               2
456         sys     sys_msync               3
457         sys     sys_readv               3       /* 4145 */
458         sys     sys_writev              3
459         sys     sys_cacheflush          3
460         sys     sys_cachectl            3
461         sys     sys_sysmips             4
462         sys     sys_ni_syscall          0       /* 4150 */
463         sys     sys_getsid              1
464         sys     sys_fdatasync           1
465         sys     sys_sysctl              1
466         sys     sys_mlock               2
467         sys     sys_munlock             2       /* 4155 */
468         sys     sys_mlockall            1
469         sys     sys_munlockall          0
470         sys     sys_sched_setparam      2
471         sys     sys_sched_getparam      2
472         sys     sys_sched_setscheduler  3       /* 4160 */
473         sys     sys_sched_getscheduler  1
474         sys     sys_sched_yield         0
475         sys     sys_sched_get_priority_max 1
476         sys     sys_sched_get_priority_min 1
477         sys     sys_sched_rr_get_interval 2     /* 4165 */
478         sys     sys_nanosleep,          2
479         sys     sys_mremap,             5
480         sys     sys_accept              3
481         sys     sys_bind                3
482         sys     sys_connect             3       /* 4170 */
483         sys     sys_getpeername         3
484         sys     sys_getsockname         3
485         sys     sys_getsockopt          5
486         sys     sys_listen              2
487         sys     sys_recv                4       /* 4175 */
488         sys     sys_recvfrom            6
489         sys     sys_recvmsg             3
490         sys     sys_send                4
491         sys     sys_sendmsg             3
492         sys     sys_sendto              6       /* 4180 */
493         sys     sys_setsockopt          5
494         sys     sys_shutdown            2
495         sys     sys_socket              3
496         sys     sys_socketpair          4
497         sys     sys_setresuid           3       /* 4185 */
498         sys     sys_getresuid           3
499         sys     sys_ni_syscall          0       /* was sys_query_module */
500         sys     sys_poll                3
501         sys     sys_nfsservctl          3
502         sys     sys_setresgid           3       /* 4190 */
503         sys     sys_getresgid           3
504         sys     sys_prctl               5
505         sys     sys_rt_sigreturn        0
506         sys     sys_rt_sigaction        4
507         sys     sys_rt_sigprocmask      4       /* 4195 */
508         sys     sys_rt_sigpending       2
509         sys     sys_rt_sigtimedwait     4
510         sys     sys_rt_sigqueueinfo     3
511         sys     sys_rt_sigsuspend       0
512         sys     sys_pread64             6       /* 4200 */
513         sys     sys_pwrite64            6
514         sys     sys_chown               3
515         sys     sys_getcwd              2
516         sys     sys_capget              2
517         sys     sys_capset              2       /* 4205 */
518         sys     sys_sigaltstack         0
519         sys     sys_sendfile            4
520         sys     sys_ni_syscall          0
521         sys     sys_ni_syscall          0
522         sys     sys_mips_mmap2          6       /* 4210 */
523         sys     sys_truncate64          4
524         sys     sys_ftruncate64         4
525         sys     sys_stat64              2
526         sys     sys_lstat64             2
527         sys     sys_fstat64             2       /* 4215 */
528         sys     sys_pivot_root          2
529         sys     sys_mincore             3
530         sys     sys_madvise             3
531         sys     sys_getdents64          3
532         sys     sys_fcntl64             3       /* 4220 */
533         sys     sys_ni_syscall          0
534         sys     sys_gettid              0
535         sys     sys_readahead           5
536         sys     sys_setxattr            5
537         sys     sys_lsetxattr           5       /* 4225 */
538         sys     sys_fsetxattr           5
539         sys     sys_getxattr            4
540         sys     sys_lgetxattr           4
541         sys     sys_fgetxattr           4
542         sys     sys_listxattr           3       /* 4230 */
543         sys     sys_llistxattr          3
544         sys     sys_flistxattr          3
545         sys     sys_removexattr         2
546         sys     sys_lremovexattr        2
547         sys     sys_fremovexattr        2       /* 4235 */
548         sys     sys_tkill               2
549         sys     sys_sendfile64          5
550         sys     sys_futex               6
551 #ifdef CONFIG_MIPS_MT_FPAFF
552         /*
553          * For FPU affinity scheduling on MIPS MT processors, we need to
554          * intercept sys_sched_xxxaffinity() calls until we get a proper hook
555          * in kernel/sched.c.  Considered only temporary we only support these
556          * hooks for the 32-bit kernel - there is no MIPS64 MT processor atm.
557          */
558         sys     mipsmt_sys_sched_setaffinity    3
559         sys     mipsmt_sys_sched_getaffinity    3
560 #else
561         sys     sys_sched_setaffinity   3
562         sys     sys_sched_getaffinity   3       /* 4240 */
563 #endif /* CONFIG_MIPS_MT_FPAFF */
564         sys     sys_io_setup            2
565         sys     sys_io_destroy          1
566         sys     sys_io_getevents        5
567         sys     sys_io_submit           3
568         sys     sys_io_cancel           3       /* 4245 */
569         sys     sys_exit_group          1
570         sys     sys_lookup_dcookie      4
571         sys     sys_epoll_create        1
572         sys     sys_epoll_ctl           4
573         sys     sys_epoll_wait          3       /* 4250 */
574         sys     sys_remap_file_pages    5
575         sys     sys_set_tid_address     1
576         sys     sys_restart_syscall     0
577         sys     sys_fadvise64_64        7
578         sys     sys_statfs64            3       /* 4255 */
579         sys     sys_fstatfs64           2
580         sys     sys_timer_create        3
581         sys     sys_timer_settime       4
582         sys     sys_timer_gettime       2
583         sys     sys_timer_getoverrun    1       /* 4260 */
584         sys     sys_timer_delete        1
585         sys     sys_clock_settime       2
586         sys     sys_clock_gettime       2
587         sys     sys_clock_getres        2
588         sys     sys_clock_nanosleep     4       /* 4265 */
589         sys     sys_tgkill              3
590         sys     sys_utimes              2
591         sys     sys_mbind               4
592         sys     sys_ni_syscall          0       /* sys_get_mempolicy */
593         sys     sys_ni_syscall          0       /* 4270 sys_set_mempolicy */
594         sys     sys_mq_open             4
595         sys     sys_mq_unlink           1
596         sys     sys_mq_timedsend        5
597         sys     sys_mq_timedreceive     5
598         sys     sys_mq_notify           2       /* 4275 */
599         sys     sys_mq_getsetattr       3
600         sys     sys_ni_syscall          0       /* sys_vserver */
601         sys     sys_waitid              5
602         sys     sys_ni_syscall          0       /* available, was setaltroot */
603         sys     sys_add_key             5       /* 4280 */
604         sys     sys_request_key         4
605         sys     sys_keyctl              5
606         sys     sys_set_thread_area     1
607         sys     sys_inotify_init        0
608         sys     sys_inotify_add_watch   3       /* 4285 */
609         sys     sys_inotify_rm_watch    2
610         sys     sys_migrate_pages       4
611         sys     sys_openat              4
612         sys     sys_mkdirat             3
613         sys     sys_mknodat             4       /* 4290 */
614         sys     sys_fchownat            5
615         sys     sys_futimesat           3
616         sys     sys_fstatat64           4
617         sys     sys_unlinkat            3
618         sys     sys_renameat            4       /* 4295 */
619         sys     sys_linkat              5
620         sys     sys_symlinkat           3
621         sys     sys_readlinkat          4
622         sys     sys_fchmodat            3
623         sys     sys_faccessat           3       /* 4300 */
624         sys     sys_pselect6            6
625         sys     sys_ppoll               5
626         sys     sys_unshare             1
627         sys     sys_splice              6
628         sys     sys_sync_file_range     7       /* 4305 */
629         sys     sys_tee                 4
630         sys     sys_vmsplice            4
631         sys     sys_move_pages          6
632         sys     sys_set_robust_list     2
633         sys     sys_get_robust_list     3       /* 4310 */
634         sys     sys_kexec_load          4
635         sys     sys_getcpu              3
636         sys     sys_epoll_pwait         6
637         sys     sys_ioprio_set          3
638         sys     sys_ioprio_get          2       /* 4315 */
639         sys     sys_utimensat           4
640         sys     sys_signalfd            3
641         sys     sys_ni_syscall          0
642         sys     sys_eventfd             1
643         sys     sys_fallocate           6       /* 4320 */
644         sys     sys_timerfd_create      2
645         sys     sys_timerfd_gettime     2
646         sys     sys_timerfd_settime     4
647         sys     sys_signalfd4           4
648         sys     sys_eventfd2            2       /* 4325 */
649         sys     sys_epoll_create1       1
650         sys     sys_dup3                3
651         sys     sys_pipe2               2
652         sys     sys_inotify_init1       1
653         .endm
654
655         /* We pre-compute the number of _instruction_ bytes needed to
656            load or store the arguments 6-8. Negative values are ignored. */
657
658         .macro  sys function, nargs
659         PTR     \function
660         LONG    (\nargs << 2) - (5 << 2)
661         .endm
662
663         .align  3
664         .type   sys_call_table,@object
665 EXPORT(sys_call_table)
666         syscalltable
667         .size   sys_call_table, . - sys_call_table