blob: ed5bafb5d637535fce344f7983a12b22587e0e7f [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
Ralf Baechle70342282013-01-22 12:59:30 +010027 .align 5
Linus Torvalds1da177e2005-04-16 15:20:36 -070028NESTED(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
Linus Torvalds1da177e2005-04-16 15:20:36 -070037 subu v0, v0, __NR_O32_Linux # check syscall number
38 sltiu t0, v0, __NR_O32_Linux_syscalls + 1
Linus Torvalds1da177e2005-04-16 15:20:36 -070039 addiu t1, 4 # skip to next instruction
40 sw t1, PT_EPC(sp)
41 beqz t0, illegal_syscall
42
43 sll t0, v0, 3
44 la t1, sys_call_table
45 addu t1, t0
46 lw t2, (t1) # syscall routine
47 lw t3, 4(t1) # >= 0 if we need stack arguments
48 beqz t2, illegal_syscall
49
50 sw a3, PT_R26(sp) # save a3 for syscall restarting
51 bgez t3, stackargs
52
53stack_done:
54 lw t0, TI_FLAGS($28) # syscall tracing enabled?
Ralf Baechlee7f3b482013-05-29 01:02:18 +020055 li t1, _TIF_WORK_SYSCALL_ENTRY
Linus Torvalds1da177e2005-04-16 15:20:36 -070056 and t0, t1
Ralf Baechle70342282013-01-22 12:59:30 +010057 bnez t0, syscall_trace_entry # -> yes
Linus Torvalds1da177e2005-04-16 15:20:36 -070058
59 jalr t2 # Do The Real Thing (TM)
60
61 li t0, -EMAXERRNO - 1 # error?
62 sltu t0, t0, v0
63 sw t0, PT_R7(sp) # set error flag
64 beqz t0, 1f
65
Al Viro8f5a00eb2010-09-28 18:50:37 +010066 lw t1, PT_R2(sp) # syscall number
Linus Torvalds1da177e2005-04-16 15:20:36 -070067 negu v0 # error
Al Viro8f5a00eb2010-09-28 18:50:37 +010068 sw t1, PT_R0(sp) # save it for syscall restarting
Linus Torvalds1da177e2005-04-16 15:20:36 -0700691: sw v0, PT_R2(sp) # result
70
71o32_syscall_exit:
Al Viro02f884e2012-05-05 16:11:35 -040072 j syscall_exit_partial
Linus Torvalds1da177e2005-04-16 15:20:36 -070073
74/* ------------------------------------------------------------------------ */
75
76syscall_trace_entry:
77 SAVE_STATIC
78 move s0, t2
79 move a0, sp
Ralf Baechle8b659a32011-05-19 09:21:29 +010080 jal syscall_trace_enter
Linus Torvalds1da177e2005-04-16 15:20:36 -070081
Ralf Baechle04a70522005-11-30 16:24:57 +000082 move t0, s0
83 RESTORE_STATIC
Linus Torvalds1da177e2005-04-16 15:20:36 -070084 lw a0, PT_R4(sp) # Restore argument registers
85 lw a1, PT_R5(sp)
86 lw a2, PT_R6(sp)
87 lw a3, PT_R7(sp)
Ralf Baechle04a70522005-11-30 16:24:57 +000088 jalr t0
Linus Torvalds1da177e2005-04-16 15:20:36 -070089
90 li t0, -EMAXERRNO - 1 # error?
91 sltu t0, t0, v0
92 sw t0, PT_R7(sp) # set error flag
93 beqz t0, 1f
94
Al Viro8f5a00eb2010-09-28 18:50:37 +010095 lw t1, PT_R2(sp) # syscall number
Linus Torvalds1da177e2005-04-16 15:20:36 -070096 negu v0 # error
Al Viro8f5a00eb2010-09-28 18:50:37 +010097 sw t1, PT_R0(sp) # save it for syscall restarting
Linus Torvalds1da177e2005-04-16 15:20:36 -0700981: sw v0, PT_R2(sp) # result
99
100 j syscall_exit
101
102/* ------------------------------------------------------------------------ */
103
104 /*
105 * More than four arguments. Try to deal with it by copying the
106 * stack arguments from the user stack to the kernel stack.
107 * This Sucks (TM).
108 */
109stackargs:
110 lw t0, PT_R29(sp) # get old user stack pointer
111
112 /*
113 * We intentionally keep the kernel stack a little below the top of
114 * userspace so we don't have to do a slower byte accurate check here.
115 */
116 lw t5, TI_ADDR_LIMIT($28)
117 addu t4, t0, 32
118 and t5, t4
119 bltz t5, bad_stack # -> sp is bad
120
121 /* Ok, copy the args from the luser stack to the kernel stack.
122 * t3 is the precomputed number of instruction bytes needed to
123 * load or store arguments 6-8.
124 */
125
126 la t1, 5f # load up to 3 arguments
127 subu t1, t3
1281: lw t5, 16(t0) # argument #5 from usp
Ralf Baechle70342282013-01-22 12:59:30 +0100129 .set push
130 .set noreorder
Linus Torvalds1da177e2005-04-16 15:20:36 -0700131 .set nomacro
132 jr t1
133 addiu t1, 6f - 5f
134
1352: lw t8, 28(t0) # argument #8 from usp
1363: lw t7, 24(t0) # argument #7 from usp
1374: lw t6, 20(t0) # argument #6 from usp
1385: jr t1
139 sw t5, 16(sp) # argument #5 to ksp
140
Steven J. Hill2a0b24f2013-03-25 12:15:55 -0500141#ifdef CONFIG_CPU_MICROMIPS
142 sw t8, 28(sp) # argument #8 to ksp
143 nop
144 sw t7, 24(sp) # argument #7 to ksp
145 nop
146 sw t6, 20(sp) # argument #6 to ksp
147 nop
148#else
Linus Torvalds1da177e2005-04-16 15:20:36 -0700149 sw t8, 28(sp) # argument #8 to ksp
150 sw t7, 24(sp) # argument #7 to ksp
151 sw t6, 20(sp) # argument #6 to ksp
Steven J. Hill2a0b24f2013-03-25 12:15:55 -0500152#endif
Linus Torvalds1da177e2005-04-16 15:20:36 -07001536: j stack_done # go back
154 nop
155 .set pop
156
157 .section __ex_table,"a"
158 PTR 1b,bad_stack
159 PTR 2b,bad_stack
160 PTR 3b,bad_stack
161 PTR 4b,bad_stack
162 .previous
163
164 /*
165 * The stackpointer for a call with more than 4 arguments is bad.
166 * We probably should handle this case a bit more drastic.
167 */
168bad_stack:
Al Viro5b89c002010-09-28 18:50:47 +0100169 li v0, EFAULT
Linus Torvalds1da177e2005-04-16 15:20:36 -0700170 sw v0, PT_R2(sp)
171 li t0, 1 # set error flag
172 sw t0, PT_R7(sp)
173 j o32_syscall_exit
174
175 /*
176 * The system call does not exist in this kernel
177 */
178illegal_syscall:
Atsushi Nemotobda82292008-10-25 01:17:22 +0900179 li v0, ENOSYS # error
Linus Torvalds1da177e2005-04-16 15:20:36 -0700180 sw v0, PT_R2(sp)
181 li t0, 1 # set error flag
182 sw t0, PT_R7(sp)
183 j o32_syscall_exit
184 END(handle_sys)
185
Linus Torvalds1da177e2005-04-16 15:20:36 -0700186 LEAF(sys_syscall)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700187 subu t0, a0, __NR_O32_Linux # check syscall number
188 sltiu v0, t0, __NR_O32_Linux_syscalls + 1
Vlad Malove807f952008-11-18 15:05:46 -0800189 beqz t0, einval # do not recurse
Linus Torvalds1da177e2005-04-16 15:20:36 -0700190 sll t1, t0, 3
191 beqz v0, einval
Linus Torvalds1da177e2005-04-16 15:20:36 -0700192 lw t2, sys_call_table(t1) # syscall routine
193
Linus Torvalds1da177e2005-04-16 15:20:36 -0700194 /* Some syscalls like execve get their arguments from struct pt_regs
195 and claim zero arguments in the syscall table. Thus we have to
196 assume the worst case and shuffle around all potential arguments.
197 If you want performance, don't use indirect syscalls. */
198
199 move a0, a1 # shift argument registers
200 move a1, a2
201 move a2, a3
202 lw a3, 16(sp)
203 lw t4, 20(sp)
204 lw t5, 24(sp)
205 lw t6, 28(sp)
206 sw t4, 16(sp)
207 sw t5, 20(sp)
208 sw t6, 24(sp)
209 sw a0, PT_R4(sp) # .. and push back a0 - a3, some
210 sw a1, PT_R5(sp) # syscalls expect them there
211 sw a2, PT_R6(sp)
212 sw a3, PT_R7(sp)
213 sw a3, PT_R26(sp) # update a3 for syscall restarting
214 jr t2
215 /* Unreached */
216
Ralf Baechle70342282013-01-22 12:59:30 +0100217einval: li v0, -ENOSYS
Linus Torvalds1da177e2005-04-16 15:20:36 -0700218 jr ra
219 END(sys_syscall)
220
221 .macro fifty ptr, nargs, from=1, to=50
222 sys \ptr \nargs
223 .if \to-\from
224 fifty \ptr,\nargs,"(\from+1)",\to
225 .endif
226 .endm
227
228 .macro mille ptr, nargs, from=1, to=20
229 fifty \ptr,\nargs
230 .if \to-\from
231 mille \ptr,\nargs,"(\from+1)",\to
232 .endif
233 .endm
234
235 .macro syscalltable
Linus Torvalds1da177e2005-04-16 15:20:36 -0700236 sys sys_syscall 8 /* 4000 */
237 sys sys_exit 1
Al Viro50150d22012-12-27 12:11:46 -0500238 sys __sys_fork 0
Linus Torvalds1da177e2005-04-16 15:20:36 -0700239 sys sys_read 3
240 sys sys_write 3
241 sys sys_open 3 /* 4005 */
242 sys sys_close 1
243 sys sys_waitpid 3
244 sys sys_creat 2
245 sys sys_link 2
246 sys sys_unlink 1 /* 4010 */
247 sys sys_execve 0
248 sys sys_chdir 1
249 sys sys_time 1
250 sys sys_mknod 3
251 sys sys_chmod 2 /* 4015 */
252 sys sys_lchown 3
253 sys sys_ni_syscall 0
254 sys sys_ni_syscall 0 /* was sys_stat */
255 sys sys_lseek 3
256 sys sys_getpid 0 /* 4020 */
257 sys sys_mount 5
258 sys sys_oldumount 1
259 sys sys_setuid 1
260 sys sys_getuid 0
261 sys sys_stime 1 /* 4025 */
262 sys sys_ptrace 4
263 sys sys_alarm 1
264 sys sys_ni_syscall 0 /* was sys_fstat */
265 sys sys_pause 0
266 sys sys_utime 2 /* 4030 */
267 sys sys_ni_syscall 0
268 sys sys_ni_syscall 0
269 sys sys_access 2
270 sys sys_nice 1
271 sys sys_ni_syscall 0 /* 4035 */
272 sys sys_sync 0
273 sys sys_kill 2
274 sys sys_rename 2
275 sys sys_mkdir 2
276 sys sys_rmdir 1 /* 4040 */
277 sys sys_dup 1
Ralf Baechle8213bbf2008-07-20 13:16:46 +0100278 sys sysm_pipe 0
Linus Torvalds1da177e2005-04-16 15:20:36 -0700279 sys sys_times 1
280 sys sys_ni_syscall 0
281 sys sys_brk 1 /* 4045 */
282 sys sys_setgid 1
283 sys sys_getgid 0
284 sys sys_ni_syscall 0 /* was signal(2) */
285 sys sys_geteuid 0
286 sys sys_getegid 0 /* 4050 */
287 sys sys_acct 1
288 sys sys_umount 2
289 sys sys_ni_syscall 0
290 sys sys_ioctl 3
291 sys sys_fcntl 3 /* 4055 */
292 sys sys_ni_syscall 2
293 sys sys_setpgid 2
294 sys sys_ni_syscall 0
295 sys sys_olduname 1
296 sys sys_umask 1 /* 4060 */
297 sys sys_chroot 1
298 sys sys_ustat 2
299 sys sys_dup2 2
300 sys sys_getppid 0
301 sys sys_getpgrp 0 /* 4065 */
302 sys sys_setsid 0
303 sys sys_sigaction 3
304 sys sys_sgetmask 0
305 sys sys_ssetmask 1
306 sys sys_setreuid 2 /* 4070 */
307 sys sys_setregid 2
308 sys sys_sigsuspend 0
309 sys sys_sigpending 1
310 sys sys_sethostname 2
311 sys sys_setrlimit 2 /* 4075 */
312 sys sys_getrlimit 2
313 sys sys_getrusage 2
314 sys sys_gettimeofday 2
315 sys sys_settimeofday 2
316 sys sys_getgroups 2 /* 4080 */
317 sys sys_setgroups 2
318 sys sys_ni_syscall 0 /* old_select */
319 sys sys_symlink 2
320 sys sys_ni_syscall 0 /* was sys_lstat */
321 sys sys_readlink 3 /* 4085 */
322 sys sys_uselib 1
323 sys sys_swapon 2
324 sys sys_reboot 3
Heiko Carstense55380e2009-01-14 14:13:55 +0100325 sys sys_old_readdir 3
Ralf Baechledbda6ac2009-02-08 16:00:26 +0000326 sys sys_mips_mmap 6 /* 4090 */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700327 sys sys_munmap 2
328 sys sys_truncate 2
329 sys sys_ftruncate 2
330 sys sys_fchmod 2
331 sys sys_fchown 3 /* 4095 */
332 sys sys_getpriority 2
333 sys sys_setpriority 3
334 sys sys_ni_syscall 0
335 sys sys_statfs 2
336 sys sys_fstatfs 2 /* 4100 */
337 sys sys_ni_syscall 0 /* was ioperm(2) */
338 sys sys_socketcall 2
339 sys sys_syslog 3
340 sys sys_setitimer 3
341 sys sys_getitimer 2 /* 4105 */
342 sys sys_newstat 2
343 sys sys_newlstat 2
344 sys sys_newfstat 2
345 sys sys_uname 1
346 sys sys_ni_syscall 0 /* 4110 was iopl(2) */
347 sys sys_vhangup 0
348 sys sys_ni_syscall 0 /* was sys_idle() */
349 sys sys_ni_syscall 0 /* was sys_vm86 */
350 sys sys_wait4 4
351 sys sys_swapoff 1 /* 4115 */
352 sys sys_sysinfo 1
353 sys sys_ipc 6
354 sys sys_fsync 1
355 sys sys_sigreturn 0
Al Viro50150d22012-12-27 12:11:46 -0500356 sys __sys_clone 6 /* 4120 */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700357 sys sys_setdomainname 2
358 sys sys_newuname 1
359 sys sys_ni_syscall 0 /* sys_modify_ldt */
360 sys sys_adjtimex 1
361 sys sys_mprotect 3 /* 4125 */
362 sys sys_sigprocmask 3
363 sys sys_ni_syscall 0 /* was create_module */
364 sys sys_init_module 5
365 sys sys_delete_module 1
Ralf Baechle70342282013-01-22 12:59:30 +0100366 sys sys_ni_syscall 0 /* 4130 was get_kernel_syms */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700367 sys sys_quotactl 4
368 sys sys_getpgid 1
369 sys sys_fchdir 1
370 sys sys_bdflush 2
371 sys sys_sysfs 3 /* 4135 */
372 sys sys_personality 1
373 sys sys_ni_syscall 0 /* for afs_syscall */
374 sys sys_setfsuid 1
375 sys sys_setfsgid 1
376 sys sys_llseek 5 /* 4140 */
377 sys sys_getdents 3
378 sys sys_select 5
379 sys sys_flock 2
380 sys sys_msync 3
381 sys sys_readv 3 /* 4145 */
382 sys sys_writev 3
383 sys sys_cacheflush 3
384 sys sys_cachectl 3
385 sys sys_sysmips 4
386 sys sys_ni_syscall 0 /* 4150 */
387 sys sys_getsid 1
388 sys sys_fdatasync 1
389 sys sys_sysctl 1
390 sys sys_mlock 2
391 sys sys_munlock 2 /* 4155 */
392 sys sys_mlockall 1
393 sys sys_munlockall 0
394 sys sys_sched_setparam 2
395 sys sys_sched_getparam 2
396 sys sys_sched_setscheduler 3 /* 4160 */
397 sys sys_sched_getscheduler 1
398 sys sys_sched_yield 0
399 sys sys_sched_get_priority_max 1
400 sys sys_sched_get_priority_min 1
401 sys sys_sched_rr_get_interval 2 /* 4165 */
402 sys sys_nanosleep, 2
Yoichi Yuasa7dbdf432006-06-23 02:04:14 -0700403 sys sys_mremap, 5
Linus Torvalds1da177e2005-04-16 15:20:36 -0700404 sys sys_accept 3
405 sys sys_bind 3
406 sys sys_connect 3 /* 4170 */
407 sys sys_getpeername 3
408 sys sys_getsockname 3
409 sys sys_getsockopt 5
410 sys sys_listen 2
411 sys sys_recv 4 /* 4175 */
412 sys sys_recvfrom 6
413 sys sys_recvmsg 3
414 sys sys_send 4
415 sys sys_sendmsg 3
416 sys sys_sendto 6 /* 4180 */
417 sys sys_setsockopt 5
418 sys sys_shutdown 2
419 sys sys_socket 3
420 sys sys_socketpair 4
421 sys sys_setresuid 3 /* 4185 */
422 sys sys_getresuid 3
423 sys sys_ni_syscall 0 /* was sys_query_module */
424 sys sys_poll 3
NeilBrownf5b94092011-08-26 18:03:11 -0400425 sys sys_ni_syscall 0 /* was nfsservctl */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700426 sys sys_setresgid 3 /* 4190 */
427 sys sys_getresgid 3
428 sys sys_prctl 5
429 sys sys_rt_sigreturn 0
430 sys sys_rt_sigaction 4
431 sys sys_rt_sigprocmask 4 /* 4195 */
432 sys sys_rt_sigpending 2
433 sys sys_rt_sigtimedwait 4
434 sys sys_rt_sigqueueinfo 3
435 sys sys_rt_sigsuspend 0
436 sys sys_pread64 6 /* 4200 */
437 sys sys_pwrite64 6
438 sys sys_chown 3
439 sys sys_getcwd 2
440 sys sys_capget 2
441 sys sys_capset 2 /* 4205 */
442 sys sys_sigaltstack 0
443 sys sys_sendfile 4
444 sys sys_ni_syscall 0
445 sys sys_ni_syscall 0
Ralf Baechledbda6ac2009-02-08 16:00:26 +0000446 sys sys_mips_mmap2 6 /* 4210 */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700447 sys sys_truncate64 4
448 sys sys_ftruncate64 4
449 sys sys_stat64 2
450 sys sys_lstat64 2
451 sys sys_fstat64 2 /* 4215 */
452 sys sys_pivot_root 2
453 sys sys_mincore 3
454 sys sys_madvise 3
455 sys sys_getdents64 3
456 sys sys_fcntl64 3 /* 4220 */
457 sys sys_ni_syscall 0
458 sys sys_gettid 0
459 sys sys_readahead 5
460 sys sys_setxattr 5
461 sys sys_lsetxattr 5 /* 4225 */
462 sys sys_fsetxattr 5
463 sys sys_getxattr 4
464 sys sys_lgetxattr 4
465 sys sys_fgetxattr 4
466 sys sys_listxattr 3 /* 4230 */
467 sys sys_llistxattr 3
468 sys sys_flistxattr 3
469 sys sys_removexattr 2
470 sys sys_lremovexattr 2
471 sys sys_fremovexattr 2 /* 4235 */
472 sys sys_tkill 2
473 sys sys_sendfile64 5
Thiemo Seufer90a67b52005-03-13 00:07:00 +0000474 sys sys_futex 6
Ralf Baechlef088fc82006-04-05 09:45:47 +0100475#ifdef CONFIG_MIPS_MT_FPAFF
476 /*
477 * For FPU affinity scheduling on MIPS MT processors, we need to
478 * intercept sys_sched_xxxaffinity() calls until we get a proper hook
479 * in kernel/sched.c. Considered only temporary we only support these
480 * hooks for the 32-bit kernel - there is no MIPS64 MT processor atm.
481 */
482 sys mipsmt_sys_sched_setaffinity 3
483 sys mipsmt_sys_sched_getaffinity 3
484#else
Linus Torvalds1da177e2005-04-16 15:20:36 -0700485 sys sys_sched_setaffinity 3
486 sys sys_sched_getaffinity 3 /* 4240 */
Ralf Baechlef088fc82006-04-05 09:45:47 +0100487#endif /* CONFIG_MIPS_MT_FPAFF */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700488 sys sys_io_setup 2
489 sys sys_io_destroy 1
490 sys sys_io_getevents 5
491 sys sys_io_submit 3
492 sys sys_io_cancel 3 /* 4245 */
493 sys sys_exit_group 1
Ralf Baechle0d507d62005-10-18 12:48:31 +0100494 sys sys_lookup_dcookie 4
Linus Torvalds1da177e2005-04-16 15:20:36 -0700495 sys sys_epoll_create 1
496 sys sys_epoll_ctl 4
Ralf Baechle5db6acd2011-06-16 10:32:15 +0100497 sys sys_epoll_wait 4 /* 4250 */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700498 sys sys_remap_file_pages 5
499 sys sys_set_tid_address 1
500 sys sys_restart_syscall 0
501 sys sys_fadvise64_64 7
502 sys sys_statfs64 3 /* 4255 */
503 sys sys_fstatfs64 2
504 sys sys_timer_create 3
505 sys sys_timer_settime 4
506 sys sys_timer_gettime 2
507 sys sys_timer_getoverrun 1 /* 4260 */
508 sys sys_timer_delete 1
509 sys sys_clock_settime 2
510 sys sys_clock_gettime 2
511 sys sys_clock_getres 2
512 sys sys_clock_nanosleep 4 /* 4265 */
513 sys sys_tgkill 3
514 sys sys_utimes 2
515 sys sys_mbind 4
516 sys sys_ni_syscall 0 /* sys_get_mempolicy */
517 sys sys_ni_syscall 0 /* 4270 sys_set_mempolicy */
518 sys sys_mq_open 4
519 sys sys_mq_unlink 1
520 sys sys_mq_timedsend 5
521 sys sys_mq_timedreceive 5
522 sys sys_mq_notify 2 /* 4275 */
523 sys sys_mq_getsetattr 3
524 sys sys_ni_syscall 0 /* sys_vserver */
Ralf Baechlea19050f2005-02-16 21:19:59 +0000525 sys sys_waitid 5
Linus Torvalds1da177e2005-04-16 15:20:36 -0700526 sys sys_ni_syscall 0 /* available, was setaltroot */
Ralf Baechlee50c0a82005-05-31 11:49:19 +0000527 sys sys_add_key 5 /* 4280 */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700528 sys sys_request_key 4
529 sys sys_keyctl 5
Ralf Baechle3c370262005-04-13 17:43:59 +0000530 sys sys_set_thread_area 1
Ralf Baechle7db36c82005-07-13 11:48:45 +0000531 sys sys_inotify_init 0
532 sys sys_inotify_add_watch 3 /* 4285 */
533 sys sys_inotify_rm_watch 2
Ralf Baechle72bf8912006-02-08 13:38:50 +0000534 sys sys_migrate_pages 4
535 sys sys_openat 4
536 sys sys_mkdirat 3
537 sys sys_mknodat 4 /* 4290 */
538 sys sys_fchownat 5
539 sys sys_futimesat 3
Yoichi Yuasa326a6252006-02-13 18:07:30 +0900540 sys sys_fstatat64 4
Ralf Baechle72bf8912006-02-08 13:38:50 +0000541 sys sys_unlinkat 3
542 sys sys_renameat 4 /* 4295 */
Ulrich Drepperc04030e2006-02-24 13:04:21 -0800543 sys sys_linkat 5
Ralf Baechle72bf8912006-02-08 13:38:50 +0000544 sys sys_symlinkat 3
545 sys sys_readlinkat 4
546 sys sys_fchmodat 3
547 sys sys_faccessat 3 /* 4300 */
548 sys sys_pselect6 6
549 sys sys_ppoll 5
550 sys sys_unshare 1
Ralf Baechle08d30872008-12-03 16:33:17 +0000551 sys sys_splice 6
Ralf Baechlea8d587a2006-04-01 07:49:21 +0100552 sys sys_sync_file_range 7 /* 4305 */
Ralf Baechle136d47d2006-04-15 11:16:19 +0200553 sys sys_tee 4
Ralf Baechle722cfd92006-07-02 16:31:14 +0100554 sys sys_vmsplice 4
555 sys sys_move_pages 6
Atsushi Nemoto7fdeb042006-09-06 22:42:02 +0900556 sys sys_set_robust_list 2
Ralf Baechled2bcf872006-10-18 23:52:17 +0100557 sys sys_get_robust_list 3 /* 4310 */
Nicolas Schichan583bb862006-10-18 15:14:55 +0200558 sys sys_kexec_load 4
Ralf Baechle991ea262006-10-29 21:07:40 +0000559 sys sys_getcpu 3
560 sys sys_epoll_pwait 6
Ralf Baechle08253b32007-03-06 17:04:49 +0000561 sys sys_ioprio_set 3
Atsushi Nemoto7a6d4f32007-05-29 23:29:40 +0900562 sys sys_ioprio_get 2 /* 4315 */
563 sys sys_utimensat 4
564 sys sys_signalfd 3
Ralf Baechle8bdd5142011-04-13 20:50:46 +0200565 sys sys_ni_syscall 0 /* was timerfd */
Atsushi Nemoto7a6d4f32007-05-29 23:29:40 +0900566 sys sys_eventfd 1
Ralf Baechle4dc46772007-07-26 03:38:24 +0100567 sys sys_fallocate 6 /* 4320 */
Dmitri Vorobiev6783fe62008-02-19 00:02:37 +0300568 sys sys_timerfd_create 2
569 sys sys_timerfd_gettime 2
570 sys sys_timerfd_settime 4
Ralf Baechle3885b712008-07-31 11:16:43 +0100571 sys sys_signalfd4 4
572 sys sys_eventfd2 2 /* 4325 */
573 sys sys_epoll_create1 1
574 sys sys_dup3 3
575 sys sys_pipe2 2
576 sys sys_inotify_init1 1
Ralf Baechleddd9e912009-04-02 16:59:24 -0700577 sys sys_preadv 6 /* 4330 */
578 sys sys_pwritev 6
David Daney69f16c92009-06-26 09:53:57 -0700579 sys sys_rt_tgsigqueueinfo 4
Ingo Molnarcdd6c482009-09-21 12:02:48 +0200580 sys sys_perf_event_open 5
Ralf Baechle54822de2009-08-03 17:27:19 +0100581 sys sys_accept4 4
David Daney5e844b32010-08-23 14:10:37 -0700582 sys sys_recvmmsg 5 /* 4335 */
583 sys sys_fanotify_init 2
584 sys sys_fanotify_mark 6
585 sys sys_prlimit64 4
David Daney84ed9432011-03-18 10:37:23 -0700586 sys sys_name_to_handle_at 5
587 sys sys_open_by_handle_at 3 /* 4340 */
588 sys sys_clock_adjtime 2
Ralf Baechle1bbf2872011-03-25 18:45:20 +0100589 sys sys_syncfs 1
Ralf Baechleb12acf12011-05-28 13:22:58 +0100590 sys sys_sendmmsg 4
Eric W. Biederman7b21fdd2011-05-27 19:28:27 -0700591 sys sys_setns 2
David Daney8ff85842011-11-08 14:54:55 -0800592 sys sys_process_vm_readv 6 /* 4345 */
593 sys sys_process_vm_writev 6
Ralf Baechlece71d242012-09-14 22:47:15 +0200594 sys sys_kcmp 5
Ralf Baechle62951502012-12-28 17:02:56 +0100595 sys sys_finit_module 3
Linus Torvalds1da177e2005-04-16 15:20:36 -0700596 .endm
597
598 /* We pre-compute the number of _instruction_ bytes needed to
599 load or store the arguments 6-8. Negative values are ignored. */
600
Ralf Baechle70342282013-01-22 12:59:30 +0100601 .macro sys function, nargs
Linus Torvalds1da177e2005-04-16 15:20:36 -0700602 PTR \function
603 LONG (\nargs << 2) - (5 << 2)
604 .endm
605
606 .align 3
607 .type sys_call_table,@object
608EXPORT(sys_call_table)
609 syscalltable
610 .size sys_call_table, . - sys_call_table