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