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