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