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