Merge branch 'master' of /home/sam/kernel/linux-2.6/
[pandora-kernel.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, 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
27 NESTED(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
55 stack_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
71 1:      sw      v0, PT_R2(sp)           # result
72
73 o32_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
84 o32_syscall_exit_work:
85         j       syscall_exit_work_partial
86
87 /* ------------------------------------------------------------------------ */
88
89 syscall_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
112 1:      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          */
123 stackargs:
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
142 1:      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
149 2:      lw      t8, 28(t0)              # argument #8 from usp
150 3:      lw      t7, 24(t0)              # argument #7 from usp
151 4:      lw      t6, 20(t0)              # argument #6 from usp
152 5:      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
158 6:      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          */
173 bad_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          */
184 illegal_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 :-)  */
204 1:      ll      v0, (a1)
205         move    a0, a2
206 2:      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          */
233 1:      lw      v0, (a1)
234 2:      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
247 no_mem: li      v0, -ENOMEM
248         jr      ra
249
250 bad_address:
251         li      v0, -EFAULT
252         jr      ra
253
254 bad_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
306 einval: 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
662 EXPORT(sys_call_table)
663         syscalltable
664         .size   sys_call_table, . - sys_call_table