]> bbs.cooldavid.org Git - net-next-2.6.git/blame - arch/mips/kernel/scall32-o32.S
[MIPS] Fix errors detected by "make headers_check"
[net-next-2.6.git] / arch / mips / kernel / scall32-o32.S
CommitLineData
1da177e4
LT
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 *
192ef366 6 * Copyright (C) 1995-99, 2000- 02, 06 Ralf Baechle <ralf@linux-mips.org>
1da177e4
LT
7 * Copyright (C) 2001 MIPS Technologies, Inc.
8 * Copyright (C) 2004 Thiemo Seufer
9 */
1da177e4
LT
10#include <linux/errno.h>
11#include <asm/asm.h>
12#include <asm/asmmacro.h>
192ef366 13#include <asm/irqflags.h>
1da177e4
LT
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>
048eb582 22#include <asm/asm-offsets.h>
1da177e4
LT
23
24/* Highest syscall used of any syscall flavour */
25#define MAX_SYSCALL_NO __NR_O32_Linux + __NR_O32_Linux_syscalls
26
27 .align 5
28NESTED(handle_sys, PT_SIZE, sp)
29 .set noat
30 SAVE_SOME
192ef366
RB
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
1da177e4
LT
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
68stack_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
841: sw v0, PT_R2(sp) # result
85
86o32_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
97o32_syscall_exit_work:
98 j syscall_exit_work_partial
99
100/* ------------------------------------------------------------------------ */
101
102syscall_trace_entry:
103 SAVE_STATIC
104 move s0, t2
105 move a0, sp
106 li a1, 0
107 jal do_syscall_trace
108
04a7052c
RB
109 move t0, s0
110 RESTORE_STATIC
1da177e4
LT
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)
04a7052c 115 jalr t0
1da177e4
LT
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
1251: 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 */
136stackargs:
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
1551: 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
1622: lw t8, 28(t0) # argument #8 from usp
1633: lw t7, 24(t0) # argument #7 from usp
1644: lw t6, 20(t0) # argument #6 from usp
1655: 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
1716: 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 */
186bad_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 */
197illegal_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 :-) */
2171: ll v0, (a1)
218 move a0, a2
2192: 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 */
2461: lw v0, (a1)
2472: 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
edcb98d1 258 j o32_syscall_exit # continue like a normal syscall
1da177e4
LT
259
260no_mem: li v0, -ENOMEM
261 jr ra
262
263bad_address:
264 li v0, -EFAULT
265 jr ra
266
267bad_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
319einval: 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
7dbdf43c 512 sys sys_mremap, 5
1da177e4
LT
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
90a67b59 583 sys sys_futex 6
f088fc84
RB
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
1da177e4
LT
594 sys sys_sched_setaffinity 3
595 sys sys_sched_getaffinity 3 /* 4240 */
f088fc84 596#endif /* CONFIG_MIPS_MT_FPAFF */
1da177e4
LT
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
0d507d61 603 sys sys_lookup_dcookie 4
1da177e4
LT
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 */
a19050f3 634 sys sys_waitid 5
1da177e4 635 sys sys_ni_syscall 0 /* available, was setaltroot */
e50c0a8f 636 sys sys_add_key 5 /* 4280 */
1da177e4
LT
637 sys sys_request_key 4
638 sys sys_keyctl 5
3c37026d 639 sys sys_set_thread_area 1
7db36c85
RB
640 sys sys_inotify_init 0
641 sys sys_inotify_add_watch 3 /* 4285 */
642 sys sys_inotify_rm_watch 2
72bf8914
RB
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
326a6257 649 sys sys_fstatat64 4
72bf8914
RB
650 sys sys_unlinkat 3
651 sys sys_renameat 4 /* 4295 */
c04030e1 652 sys sys_linkat 5
72bf8914
RB
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
f115da9c 660 sys sys_splice 4
a8d587a7 661 sys sys_sync_file_range 7 /* 4305 */
136d47d3 662 sys sys_tee 4
722cfd90
RB
663 sys sys_vmsplice 4
664 sys sys_move_pages 6
1da177e4
LT
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
677EXPORT(sys_call_table)
678 syscalltable
679 .size sys_call_table, . - sys_call_table