11da177e4SLinus Torvalds/* 21da177e4SLinus Torvalds * This file is subject to the terms and conditions of the GNU General Public 31da177e4SLinus Torvalds * License. See the file "COPYING" in the main directory of this archive 41da177e4SLinus Torvalds * for more details. 51da177e4SLinus Torvalds * 6192ef366SRalf Baechle * Copyright (C) 1995-99, 2000- 02, 06 Ralf Baechle <ralf@linux-mips.org> 71da177e4SLinus Torvalds * Copyright (C) 2001 MIPS Technologies, Inc. 81da177e4SLinus Torvalds * Copyright (C) 2004 Thiemo Seufer 91da177e4SLinus Torvalds */ 101da177e4SLinus Torvalds#include <linux/errno.h> 111da177e4SLinus Torvalds#include <asm/asm.h> 121da177e4SLinus Torvalds#include <asm/asmmacro.h> 13192ef366SRalf Baechle#include <asm/irqflags.h> 141da177e4SLinus Torvalds#include <asm/mipsregs.h> 151da177e4SLinus Torvalds#include <asm/regdef.h> 161da177e4SLinus Torvalds#include <asm/stackframe.h> 171da177e4SLinus Torvalds#include <asm/isadep.h> 181da177e4SLinus Torvalds#include <asm/sysmips.h> 191da177e4SLinus Torvalds#include <asm/thread_info.h> 201da177e4SLinus Torvalds#include <asm/unistd.h> 211da177e4SLinus Torvalds#include <asm/war.h> 22048eb582SSam Ravnborg#include <asm/asm-offsets.h> 231da177e4SLinus Torvalds 241da177e4SLinus Torvalds/* Highest syscall used of any syscall flavour */ 251da177e4SLinus Torvalds#define MAX_SYSCALL_NO __NR_O32_Linux + __NR_O32_Linux_syscalls 261da177e4SLinus Torvalds 271da177e4SLinus Torvalds .align 5 281da177e4SLinus TorvaldsNESTED(handle_sys, PT_SIZE, sp) 291da177e4SLinus Torvalds .set noat 301da177e4SLinus Torvalds SAVE_SOME 31eae6c0daSAtsushi Nemoto TRACE_IRQS_ON_RELOAD 321da177e4SLinus Torvalds STI 331da177e4SLinus Torvalds .set at 341da177e4SLinus Torvalds 351da177e4SLinus Torvalds lw t1, PT_EPC(sp) # skip syscall on return 361da177e4SLinus Torvalds 371da177e4SLinus Torvalds subu v0, v0, __NR_O32_Linux # check syscall number 381da177e4SLinus Torvalds sltiu t0, v0, __NR_O32_Linux_syscalls + 1 391da177e4SLinus Torvalds addiu t1, 4 # skip to next instruction 401da177e4SLinus Torvalds sw t1, PT_EPC(sp) 411da177e4SLinus Torvalds beqz t0, illegal_syscall 421da177e4SLinus Torvalds 431da177e4SLinus Torvalds sll t0, v0, 3 441da177e4SLinus Torvalds la t1, sys_call_table 451da177e4SLinus Torvalds addu t1, t0 461da177e4SLinus Torvalds lw t2, (t1) # syscall routine 471da177e4SLinus Torvalds lw t3, 4(t1) # >= 0 if we need stack arguments 481da177e4SLinus Torvalds beqz t2, illegal_syscall 491da177e4SLinus Torvalds 501da177e4SLinus Torvalds sw a3, PT_R26(sp) # save a3 for syscall restarting 511da177e4SLinus Torvalds bgez t3, stackargs 521da177e4SLinus Torvalds 531da177e4SLinus Torvaldsstack_done: 541da177e4SLinus Torvalds lw t0, TI_FLAGS($28) # syscall tracing enabled? 551da177e4SLinus Torvalds li t1, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT 561da177e4SLinus Torvalds and t0, t1 571da177e4SLinus Torvalds bnez t0, syscall_trace_entry # -> yes 581da177e4SLinus Torvalds 591da177e4SLinus Torvalds jalr t2 # Do The Real Thing (TM) 601da177e4SLinus Torvalds 611da177e4SLinus Torvalds li t0, -EMAXERRNO - 1 # error? 621da177e4SLinus Torvalds sltu t0, t0, v0 631da177e4SLinus Torvalds sw t0, PT_R7(sp) # set error flag 641da177e4SLinus Torvalds beqz t0, 1f 651da177e4SLinus Torvalds 668f5a00ebSAl Viro lw t1, PT_R2(sp) # syscall number 671da177e4SLinus Torvalds negu v0 # error 688f5a00ebSAl Viro sw t1, PT_R0(sp) # save it for syscall restarting 691da177e4SLinus Torvalds1: sw v0, PT_R2(sp) # result 701da177e4SLinus Torvalds 711da177e4SLinus Torvaldso32_syscall_exit: 721da177e4SLinus Torvalds local_irq_disable # make sure need_resched and 731da177e4SLinus Torvalds # signals dont change between 741da177e4SLinus Torvalds # sampling and return 751da177e4SLinus Torvalds lw a2, TI_FLAGS($28) # current->work 761da177e4SLinus Torvalds li t0, _TIF_ALLWORK_MASK 771da177e4SLinus Torvalds and t0, a2 781da177e4SLinus Torvalds bnez t0, o32_syscall_exit_work 791da177e4SLinus Torvalds 801da177e4SLinus Torvalds j restore_partial 811da177e4SLinus Torvalds 821da177e4SLinus Torvaldso32_syscall_exit_work: 831da177e4SLinus Torvalds j syscall_exit_work_partial 841da177e4SLinus Torvalds 851da177e4SLinus Torvalds/* ------------------------------------------------------------------------ */ 861da177e4SLinus Torvalds 871da177e4SLinus Torvaldssyscall_trace_entry: 881da177e4SLinus Torvalds SAVE_STATIC 891da177e4SLinus Torvalds move s0, t2 901da177e4SLinus Torvalds move a0, sp 911da177e4SLinus Torvalds li a1, 0 921da177e4SLinus Torvalds jal do_syscall_trace 931da177e4SLinus Torvalds 9404a7052cSRalf Baechle move t0, s0 9504a7052cSRalf Baechle RESTORE_STATIC 961da177e4SLinus Torvalds lw a0, PT_R4(sp) # Restore argument registers 971da177e4SLinus Torvalds lw a1, PT_R5(sp) 981da177e4SLinus Torvalds lw a2, PT_R6(sp) 991da177e4SLinus Torvalds lw a3, PT_R7(sp) 10004a7052cSRalf Baechle jalr t0 1011da177e4SLinus Torvalds 1021da177e4SLinus Torvalds li t0, -EMAXERRNO - 1 # error? 1031da177e4SLinus Torvalds sltu t0, t0, v0 1041da177e4SLinus Torvalds sw t0, PT_R7(sp) # set error flag 1051da177e4SLinus Torvalds beqz t0, 1f 1061da177e4SLinus Torvalds 1078f5a00ebSAl Viro lw t1, PT_R2(sp) # syscall number 1081da177e4SLinus Torvalds negu v0 # error 1098f5a00ebSAl Viro sw t1, PT_R0(sp) # save it for syscall restarting 1101da177e4SLinus Torvalds1: sw v0, PT_R2(sp) # result 1111da177e4SLinus Torvalds 1121da177e4SLinus Torvalds j syscall_exit 1131da177e4SLinus Torvalds 1141da177e4SLinus Torvalds/* ------------------------------------------------------------------------ */ 1151da177e4SLinus Torvalds 1161da177e4SLinus Torvalds /* 1171da177e4SLinus Torvalds * More than four arguments. Try to deal with it by copying the 1181da177e4SLinus Torvalds * stack arguments from the user stack to the kernel stack. 1191da177e4SLinus Torvalds * This Sucks (TM). 1201da177e4SLinus Torvalds */ 1211da177e4SLinus Torvaldsstackargs: 1221da177e4SLinus Torvalds lw t0, PT_R29(sp) # get old user stack pointer 1231da177e4SLinus Torvalds 1241da177e4SLinus Torvalds /* 1251da177e4SLinus Torvalds * We intentionally keep the kernel stack a little below the top of 1261da177e4SLinus Torvalds * userspace so we don't have to do a slower byte accurate check here. 1271da177e4SLinus Torvalds */ 1281da177e4SLinus Torvalds lw t5, TI_ADDR_LIMIT($28) 1291da177e4SLinus Torvalds addu t4, t0, 32 1301da177e4SLinus Torvalds and t5, t4 1311da177e4SLinus Torvalds bltz t5, bad_stack # -> sp is bad 1321da177e4SLinus Torvalds 1331da177e4SLinus Torvalds /* Ok, copy the args from the luser stack to the kernel stack. 1341da177e4SLinus Torvalds * t3 is the precomputed number of instruction bytes needed to 1351da177e4SLinus Torvalds * load or store arguments 6-8. 1361da177e4SLinus Torvalds */ 1371da177e4SLinus Torvalds 1381da177e4SLinus Torvalds la t1, 5f # load up to 3 arguments 1391da177e4SLinus Torvalds subu t1, t3 1401da177e4SLinus Torvalds1: lw t5, 16(t0) # argument #5 from usp 1411da177e4SLinus Torvalds .set push 1421da177e4SLinus Torvalds .set noreorder 1431da177e4SLinus Torvalds .set nomacro 1441da177e4SLinus Torvalds jr t1 1451da177e4SLinus Torvalds addiu t1, 6f - 5f 1461da177e4SLinus Torvalds 1471da177e4SLinus Torvalds2: lw t8, 28(t0) # argument #8 from usp 1481da177e4SLinus Torvalds3: lw t7, 24(t0) # argument #7 from usp 1491da177e4SLinus Torvalds4: lw t6, 20(t0) # argument #6 from usp 1501da177e4SLinus Torvalds5: jr t1 1511da177e4SLinus Torvalds sw t5, 16(sp) # argument #5 to ksp 1521da177e4SLinus Torvalds 1531da177e4SLinus Torvalds sw t8, 28(sp) # argument #8 to ksp 1541da177e4SLinus Torvalds sw t7, 24(sp) # argument #7 to ksp 1551da177e4SLinus Torvalds sw t6, 20(sp) # argument #6 to ksp 1561da177e4SLinus Torvalds6: j stack_done # go back 1571da177e4SLinus Torvalds nop 1581da177e4SLinus Torvalds .set pop 1591da177e4SLinus Torvalds 1601da177e4SLinus Torvalds .section __ex_table,"a" 1611da177e4SLinus Torvalds PTR 1b,bad_stack 1621da177e4SLinus Torvalds PTR 2b,bad_stack 1631da177e4SLinus Torvalds PTR 3b,bad_stack 1641da177e4SLinus Torvalds PTR 4b,bad_stack 1651da177e4SLinus Torvalds .previous 1661da177e4SLinus Torvalds 1671da177e4SLinus Torvalds /* 1681da177e4SLinus Torvalds * The stackpointer for a call with more than 4 arguments is bad. 1691da177e4SLinus Torvalds * We probably should handle this case a bit more drastic. 1701da177e4SLinus Torvalds */ 1711da177e4SLinus Torvaldsbad_stack: 172*5b89c004SAl Viro li v0, EFAULT 1731da177e4SLinus Torvalds sw v0, PT_R2(sp) 1741da177e4SLinus Torvalds li t0, 1 # set error flag 1751da177e4SLinus Torvalds sw t0, PT_R7(sp) 1761da177e4SLinus Torvalds j o32_syscall_exit 1771da177e4SLinus Torvalds 1781da177e4SLinus Torvalds /* 1791da177e4SLinus Torvalds * The system call does not exist in this kernel 1801da177e4SLinus Torvalds */ 1811da177e4SLinus Torvaldsillegal_syscall: 182bda8229bSAtsushi Nemoto li v0, ENOSYS # error 1831da177e4SLinus Torvalds sw v0, PT_R2(sp) 1841da177e4SLinus Torvalds li t0, 1 # set error flag 1851da177e4SLinus Torvalds sw t0, PT_R7(sp) 1861da177e4SLinus Torvalds j o32_syscall_exit 1871da177e4SLinus Torvalds END(handle_sys) 1881da177e4SLinus Torvalds 1891da177e4SLinus Torvalds LEAF(sys_syscall) 1901da177e4SLinus Torvalds subu t0, a0, __NR_O32_Linux # check syscall number 1911da177e4SLinus Torvalds sltiu v0, t0, __NR_O32_Linux_syscalls + 1 192e807f957SVlad Malov beqz t0, einval # do not recurse 1931da177e4SLinus Torvalds sll t1, t0, 3 1941da177e4SLinus Torvalds beqz v0, einval 1951da177e4SLinus Torvalds lw t2, sys_call_table(t1) # syscall routine 1961da177e4SLinus Torvalds 1971da177e4SLinus Torvalds /* Some syscalls like execve get their arguments from struct pt_regs 1981da177e4SLinus Torvalds and claim zero arguments in the syscall table. Thus we have to 1991da177e4SLinus Torvalds assume the worst case and shuffle around all potential arguments. 2001da177e4SLinus Torvalds If you want performance, don't use indirect syscalls. */ 2011da177e4SLinus Torvalds 2021da177e4SLinus Torvalds move a0, a1 # shift argument registers 2031da177e4SLinus Torvalds move a1, a2 2041da177e4SLinus Torvalds move a2, a3 2051da177e4SLinus Torvalds lw a3, 16(sp) 2061da177e4SLinus Torvalds lw t4, 20(sp) 2071da177e4SLinus Torvalds lw t5, 24(sp) 2081da177e4SLinus Torvalds lw t6, 28(sp) 2091da177e4SLinus Torvalds sw t4, 16(sp) 2101da177e4SLinus Torvalds sw t5, 20(sp) 2111da177e4SLinus Torvalds sw t6, 24(sp) 2121da177e4SLinus Torvalds sw a0, PT_R4(sp) # .. and push back a0 - a3, some 2131da177e4SLinus Torvalds sw a1, PT_R5(sp) # syscalls expect them there 2141da177e4SLinus Torvalds sw a2, PT_R6(sp) 2151da177e4SLinus Torvalds sw a3, PT_R7(sp) 2161da177e4SLinus Torvalds sw a3, PT_R26(sp) # update a3 for syscall restarting 2171da177e4SLinus Torvalds jr t2 2181da177e4SLinus Torvalds /* Unreached */ 2191da177e4SLinus Torvalds 220fb498e25SAtsushi Nemotoeinval: li v0, -ENOSYS 2211da177e4SLinus Torvalds jr ra 2221da177e4SLinus Torvalds END(sys_syscall) 2231da177e4SLinus Torvalds 2241da177e4SLinus Torvalds .macro fifty ptr, nargs, from=1, to=50 2251da177e4SLinus Torvalds sys \ptr \nargs 2261da177e4SLinus Torvalds .if \to-\from 2271da177e4SLinus Torvalds fifty \ptr,\nargs,"(\from+1)",\to 2281da177e4SLinus Torvalds .endif 2291da177e4SLinus Torvalds .endm 2301da177e4SLinus Torvalds 2311da177e4SLinus Torvalds .macro mille ptr, nargs, from=1, to=20 2321da177e4SLinus Torvalds fifty \ptr,\nargs 2331da177e4SLinus Torvalds .if \to-\from 2341da177e4SLinus Torvalds mille \ptr,\nargs,"(\from+1)",\to 2351da177e4SLinus Torvalds .endif 2361da177e4SLinus Torvalds .endm 2371da177e4SLinus Torvalds 2381da177e4SLinus Torvalds .macro syscalltable 2391da177e4SLinus Torvalds sys sys_syscall 8 /* 4000 */ 2401da177e4SLinus Torvalds sys sys_exit 1 2411da177e4SLinus Torvalds sys sys_fork 0 2421da177e4SLinus Torvalds sys sys_read 3 2431da177e4SLinus Torvalds sys sys_write 3 2441da177e4SLinus Torvalds sys sys_open 3 /* 4005 */ 2451da177e4SLinus Torvalds sys sys_close 1 2461da177e4SLinus Torvalds sys sys_waitpid 3 2471da177e4SLinus Torvalds sys sys_creat 2 2481da177e4SLinus Torvalds sys sys_link 2 2491da177e4SLinus Torvalds sys sys_unlink 1 /* 4010 */ 2501da177e4SLinus Torvalds sys sys_execve 0 2511da177e4SLinus Torvalds sys sys_chdir 1 2521da177e4SLinus Torvalds sys sys_time 1 2531da177e4SLinus Torvalds sys sys_mknod 3 2541da177e4SLinus Torvalds sys sys_chmod 2 /* 4015 */ 2551da177e4SLinus Torvalds sys sys_lchown 3 2561da177e4SLinus Torvalds sys sys_ni_syscall 0 2571da177e4SLinus Torvalds sys sys_ni_syscall 0 /* was sys_stat */ 2581da177e4SLinus Torvalds sys sys_lseek 3 2591da177e4SLinus Torvalds sys sys_getpid 0 /* 4020 */ 2601da177e4SLinus Torvalds sys sys_mount 5 2611da177e4SLinus Torvalds sys sys_oldumount 1 2621da177e4SLinus Torvalds sys sys_setuid 1 2631da177e4SLinus Torvalds sys sys_getuid 0 2641da177e4SLinus Torvalds sys sys_stime 1 /* 4025 */ 2651da177e4SLinus Torvalds sys sys_ptrace 4 2661da177e4SLinus Torvalds sys sys_alarm 1 2671da177e4SLinus Torvalds sys sys_ni_syscall 0 /* was sys_fstat */ 2681da177e4SLinus Torvalds sys sys_pause 0 2691da177e4SLinus Torvalds sys sys_utime 2 /* 4030 */ 2701da177e4SLinus Torvalds sys sys_ni_syscall 0 2711da177e4SLinus Torvalds sys sys_ni_syscall 0 2721da177e4SLinus Torvalds sys sys_access 2 2731da177e4SLinus Torvalds sys sys_nice 1 2741da177e4SLinus Torvalds sys sys_ni_syscall 0 /* 4035 */ 2751da177e4SLinus Torvalds sys sys_sync 0 2761da177e4SLinus Torvalds sys sys_kill 2 2771da177e4SLinus Torvalds sys sys_rename 2 2781da177e4SLinus Torvalds sys sys_mkdir 2 2791da177e4SLinus Torvalds sys sys_rmdir 1 /* 4040 */ 2801da177e4SLinus Torvalds sys sys_dup 1 2818213bbf9SRalf Baechle sys sysm_pipe 0 2821da177e4SLinus Torvalds sys sys_times 1 2831da177e4SLinus Torvalds sys sys_ni_syscall 0 2841da177e4SLinus Torvalds sys sys_brk 1 /* 4045 */ 2851da177e4SLinus Torvalds sys sys_setgid 1 2861da177e4SLinus Torvalds sys sys_getgid 0 2871da177e4SLinus Torvalds sys sys_ni_syscall 0 /* was signal(2) */ 2881da177e4SLinus Torvalds sys sys_geteuid 0 2891da177e4SLinus Torvalds sys sys_getegid 0 /* 4050 */ 2901da177e4SLinus Torvalds sys sys_acct 1 2911da177e4SLinus Torvalds sys sys_umount 2 2921da177e4SLinus Torvalds sys sys_ni_syscall 0 2931da177e4SLinus Torvalds sys sys_ioctl 3 2941da177e4SLinus Torvalds sys sys_fcntl 3 /* 4055 */ 2951da177e4SLinus Torvalds sys sys_ni_syscall 2 2961da177e4SLinus Torvalds sys sys_setpgid 2 2971da177e4SLinus Torvalds sys sys_ni_syscall 0 2981da177e4SLinus Torvalds sys sys_olduname 1 2991da177e4SLinus Torvalds sys sys_umask 1 /* 4060 */ 3001da177e4SLinus Torvalds sys sys_chroot 1 3011da177e4SLinus Torvalds sys sys_ustat 2 3021da177e4SLinus Torvalds sys sys_dup2 2 3031da177e4SLinus Torvalds sys sys_getppid 0 3041da177e4SLinus Torvalds sys sys_getpgrp 0 /* 4065 */ 3051da177e4SLinus Torvalds sys sys_setsid 0 3061da177e4SLinus Torvalds sys sys_sigaction 3 3071da177e4SLinus Torvalds sys sys_sgetmask 0 3081da177e4SLinus Torvalds sys sys_ssetmask 1 3091da177e4SLinus Torvalds sys sys_setreuid 2 /* 4070 */ 3101da177e4SLinus Torvalds sys sys_setregid 2 3111da177e4SLinus Torvalds sys sys_sigsuspend 0 3121da177e4SLinus Torvalds sys sys_sigpending 1 3131da177e4SLinus Torvalds sys sys_sethostname 2 3141da177e4SLinus Torvalds sys sys_setrlimit 2 /* 4075 */ 3151da177e4SLinus Torvalds sys sys_getrlimit 2 3161da177e4SLinus Torvalds sys sys_getrusage 2 3171da177e4SLinus Torvalds sys sys_gettimeofday 2 3181da177e4SLinus Torvalds sys sys_settimeofday 2 3191da177e4SLinus Torvalds sys sys_getgroups 2 /* 4080 */ 3201da177e4SLinus Torvalds sys sys_setgroups 2 3211da177e4SLinus Torvalds sys sys_ni_syscall 0 /* old_select */ 3221da177e4SLinus Torvalds sys sys_symlink 2 3231da177e4SLinus Torvalds sys sys_ni_syscall 0 /* was sys_lstat */ 3241da177e4SLinus Torvalds sys sys_readlink 3 /* 4085 */ 3251da177e4SLinus Torvalds sys sys_uselib 1 3261da177e4SLinus Torvalds sys sys_swapon 2 3271da177e4SLinus Torvalds sys sys_reboot 3 328e55380edSHeiko Carstens sys sys_old_readdir 3 329dbda6ac0SRalf Baechle sys sys_mips_mmap 6 /* 4090 */ 3301da177e4SLinus Torvalds sys sys_munmap 2 3311da177e4SLinus Torvalds sys sys_truncate 2 3321da177e4SLinus Torvalds sys sys_ftruncate 2 3331da177e4SLinus Torvalds sys sys_fchmod 2 3341da177e4SLinus Torvalds sys sys_fchown 3 /* 4095 */ 3351da177e4SLinus Torvalds sys sys_getpriority 2 3361da177e4SLinus Torvalds sys sys_setpriority 3 3371da177e4SLinus Torvalds sys sys_ni_syscall 0 3381da177e4SLinus Torvalds sys sys_statfs 2 3391da177e4SLinus Torvalds sys sys_fstatfs 2 /* 4100 */ 3401da177e4SLinus Torvalds sys sys_ni_syscall 0 /* was ioperm(2) */ 3411da177e4SLinus Torvalds sys sys_socketcall 2 3421da177e4SLinus Torvalds sys sys_syslog 3 3431da177e4SLinus Torvalds sys sys_setitimer 3 3441da177e4SLinus Torvalds sys sys_getitimer 2 /* 4105 */ 3451da177e4SLinus Torvalds sys sys_newstat 2 3461da177e4SLinus Torvalds sys sys_newlstat 2 3471da177e4SLinus Torvalds sys sys_newfstat 2 3481da177e4SLinus Torvalds sys sys_uname 1 3491da177e4SLinus Torvalds sys sys_ni_syscall 0 /* 4110 was iopl(2) */ 3501da177e4SLinus Torvalds sys sys_vhangup 0 3511da177e4SLinus Torvalds sys sys_ni_syscall 0 /* was sys_idle() */ 3521da177e4SLinus Torvalds sys sys_ni_syscall 0 /* was sys_vm86 */ 3531da177e4SLinus Torvalds sys sys_wait4 4 3541da177e4SLinus Torvalds sys sys_swapoff 1 /* 4115 */ 3551da177e4SLinus Torvalds sys sys_sysinfo 1 3561da177e4SLinus Torvalds sys sys_ipc 6 3571da177e4SLinus Torvalds sys sys_fsync 1 3581da177e4SLinus Torvalds sys sys_sigreturn 0 3591da177e4SLinus Torvalds sys sys_clone 0 /* 4120 */ 3601da177e4SLinus Torvalds sys sys_setdomainname 2 3611da177e4SLinus Torvalds sys sys_newuname 1 3621da177e4SLinus Torvalds sys sys_ni_syscall 0 /* sys_modify_ldt */ 3631da177e4SLinus Torvalds sys sys_adjtimex 1 3641da177e4SLinus Torvalds sys sys_mprotect 3 /* 4125 */ 3651da177e4SLinus Torvalds sys sys_sigprocmask 3 3661da177e4SLinus Torvalds sys sys_ni_syscall 0 /* was create_module */ 3671da177e4SLinus Torvalds sys sys_init_module 5 3681da177e4SLinus Torvalds sys sys_delete_module 1 3691da177e4SLinus Torvalds sys sys_ni_syscall 0 /* 4130 was get_kernel_syms */ 3701da177e4SLinus Torvalds sys sys_quotactl 4 3711da177e4SLinus Torvalds sys sys_getpgid 1 3721da177e4SLinus Torvalds sys sys_fchdir 1 3731da177e4SLinus Torvalds sys sys_bdflush 2 3741da177e4SLinus Torvalds sys sys_sysfs 3 /* 4135 */ 3751da177e4SLinus Torvalds sys sys_personality 1 3761da177e4SLinus Torvalds sys sys_ni_syscall 0 /* for afs_syscall */ 3771da177e4SLinus Torvalds sys sys_setfsuid 1 3781da177e4SLinus Torvalds sys sys_setfsgid 1 3791da177e4SLinus Torvalds sys sys_llseek 5 /* 4140 */ 3801da177e4SLinus Torvalds sys sys_getdents 3 3811da177e4SLinus Torvalds sys sys_select 5 3821da177e4SLinus Torvalds sys sys_flock 2 3831da177e4SLinus Torvalds sys sys_msync 3 3841da177e4SLinus Torvalds sys sys_readv 3 /* 4145 */ 3851da177e4SLinus Torvalds sys sys_writev 3 3861da177e4SLinus Torvalds sys sys_cacheflush 3 3871da177e4SLinus Torvalds sys sys_cachectl 3 3881da177e4SLinus Torvalds sys sys_sysmips 4 3891da177e4SLinus Torvalds sys sys_ni_syscall 0 /* 4150 */ 3901da177e4SLinus Torvalds sys sys_getsid 1 3911da177e4SLinus Torvalds sys sys_fdatasync 1 3921da177e4SLinus Torvalds sys sys_sysctl 1 3931da177e4SLinus Torvalds sys sys_mlock 2 3941da177e4SLinus Torvalds sys sys_munlock 2 /* 4155 */ 3951da177e4SLinus Torvalds sys sys_mlockall 1 3961da177e4SLinus Torvalds sys sys_munlockall 0 3971da177e4SLinus Torvalds sys sys_sched_setparam 2 3981da177e4SLinus Torvalds sys sys_sched_getparam 2 3991da177e4SLinus Torvalds sys sys_sched_setscheduler 3 /* 4160 */ 4001da177e4SLinus Torvalds sys sys_sched_getscheduler 1 4011da177e4SLinus Torvalds sys sys_sched_yield 0 4021da177e4SLinus Torvalds sys sys_sched_get_priority_max 1 4031da177e4SLinus Torvalds sys sys_sched_get_priority_min 1 4041da177e4SLinus Torvalds sys sys_sched_rr_get_interval 2 /* 4165 */ 4051da177e4SLinus Torvalds sys sys_nanosleep, 2 4067dbdf43cSYoichi Yuasa sys sys_mremap, 5 4071da177e4SLinus Torvalds sys sys_accept 3 4081da177e4SLinus Torvalds sys sys_bind 3 4091da177e4SLinus Torvalds sys sys_connect 3 /* 4170 */ 4101da177e4SLinus Torvalds sys sys_getpeername 3 4111da177e4SLinus Torvalds sys sys_getsockname 3 4121da177e4SLinus Torvalds sys sys_getsockopt 5 4131da177e4SLinus Torvalds sys sys_listen 2 4141da177e4SLinus Torvalds sys sys_recv 4 /* 4175 */ 4151da177e4SLinus Torvalds sys sys_recvfrom 6 4161da177e4SLinus Torvalds sys sys_recvmsg 3 4171da177e4SLinus Torvalds sys sys_send 4 4181da177e4SLinus Torvalds sys sys_sendmsg 3 4191da177e4SLinus Torvalds sys sys_sendto 6 /* 4180 */ 4201da177e4SLinus Torvalds sys sys_setsockopt 5 4211da177e4SLinus Torvalds sys sys_shutdown 2 4221da177e4SLinus Torvalds sys sys_socket 3 4231da177e4SLinus Torvalds sys sys_socketpair 4 4241da177e4SLinus Torvalds sys sys_setresuid 3 /* 4185 */ 4251da177e4SLinus Torvalds sys sys_getresuid 3 4261da177e4SLinus Torvalds sys sys_ni_syscall 0 /* was sys_query_module */ 4271da177e4SLinus Torvalds sys sys_poll 3 4281da177e4SLinus Torvalds sys sys_nfsservctl 3 4291da177e4SLinus Torvalds sys sys_setresgid 3 /* 4190 */ 4301da177e4SLinus Torvalds sys sys_getresgid 3 4311da177e4SLinus Torvalds sys sys_prctl 5 4321da177e4SLinus Torvalds sys sys_rt_sigreturn 0 4331da177e4SLinus Torvalds sys sys_rt_sigaction 4 4341da177e4SLinus Torvalds sys sys_rt_sigprocmask 4 /* 4195 */ 4351da177e4SLinus Torvalds sys sys_rt_sigpending 2 4361da177e4SLinus Torvalds sys sys_rt_sigtimedwait 4 4371da177e4SLinus Torvalds sys sys_rt_sigqueueinfo 3 4381da177e4SLinus Torvalds sys sys_rt_sigsuspend 0 4391da177e4SLinus Torvalds sys sys_pread64 6 /* 4200 */ 4401da177e4SLinus Torvalds sys sys_pwrite64 6 4411da177e4SLinus Torvalds sys sys_chown 3 4421da177e4SLinus Torvalds sys sys_getcwd 2 4431da177e4SLinus Torvalds sys sys_capget 2 4441da177e4SLinus Torvalds sys sys_capset 2 /* 4205 */ 4451da177e4SLinus Torvalds sys sys_sigaltstack 0 4461da177e4SLinus Torvalds sys sys_sendfile 4 4471da177e4SLinus Torvalds sys sys_ni_syscall 0 4481da177e4SLinus Torvalds sys sys_ni_syscall 0 449dbda6ac0SRalf Baechle sys sys_mips_mmap2 6 /* 4210 */ 4501da177e4SLinus Torvalds sys sys_truncate64 4 4511da177e4SLinus Torvalds sys sys_ftruncate64 4 4521da177e4SLinus Torvalds sys sys_stat64 2 4531da177e4SLinus Torvalds sys sys_lstat64 2 4541da177e4SLinus Torvalds sys sys_fstat64 2 /* 4215 */ 4551da177e4SLinus Torvalds sys sys_pivot_root 2 4561da177e4SLinus Torvalds sys sys_mincore 3 4571da177e4SLinus Torvalds sys sys_madvise 3 4581da177e4SLinus Torvalds sys sys_getdents64 3 4591da177e4SLinus Torvalds sys sys_fcntl64 3 /* 4220 */ 4601da177e4SLinus Torvalds sys sys_ni_syscall 0 4611da177e4SLinus Torvalds sys sys_gettid 0 4621da177e4SLinus Torvalds sys sys_readahead 5 4631da177e4SLinus Torvalds sys sys_setxattr 5 4641da177e4SLinus Torvalds sys sys_lsetxattr 5 /* 4225 */ 4651da177e4SLinus Torvalds sys sys_fsetxattr 5 4661da177e4SLinus Torvalds sys sys_getxattr 4 4671da177e4SLinus Torvalds sys sys_lgetxattr 4 4681da177e4SLinus Torvalds sys sys_fgetxattr 4 4691da177e4SLinus Torvalds sys sys_listxattr 3 /* 4230 */ 4701da177e4SLinus Torvalds sys sys_llistxattr 3 4711da177e4SLinus Torvalds sys sys_flistxattr 3 4721da177e4SLinus Torvalds sys sys_removexattr 2 4731da177e4SLinus Torvalds sys sys_lremovexattr 2 4741da177e4SLinus Torvalds sys sys_fremovexattr 2 /* 4235 */ 4751da177e4SLinus Torvalds sys sys_tkill 2 4761da177e4SLinus Torvalds sys sys_sendfile64 5 47790a67b59SThiemo Seufer sys sys_futex 6 478f088fc84SRalf Baechle#ifdef CONFIG_MIPS_MT_FPAFF 479f088fc84SRalf Baechle /* 480f088fc84SRalf Baechle * For FPU affinity scheduling on MIPS MT processors, we need to 481f088fc84SRalf Baechle * intercept sys_sched_xxxaffinity() calls until we get a proper hook 482f088fc84SRalf Baechle * in kernel/sched.c. Considered only temporary we only support these 483f088fc84SRalf Baechle * hooks for the 32-bit kernel - there is no MIPS64 MT processor atm. 484f088fc84SRalf Baechle */ 485f088fc84SRalf Baechle sys mipsmt_sys_sched_setaffinity 3 486f088fc84SRalf Baechle sys mipsmt_sys_sched_getaffinity 3 487f088fc84SRalf Baechle#else 4881da177e4SLinus Torvalds sys sys_sched_setaffinity 3 4891da177e4SLinus Torvalds sys sys_sched_getaffinity 3 /* 4240 */ 490f088fc84SRalf Baechle#endif /* CONFIG_MIPS_MT_FPAFF */ 4911da177e4SLinus Torvalds sys sys_io_setup 2 4921da177e4SLinus Torvalds sys sys_io_destroy 1 4931da177e4SLinus Torvalds sys sys_io_getevents 5 4941da177e4SLinus Torvalds sys sys_io_submit 3 4951da177e4SLinus Torvalds sys sys_io_cancel 3 /* 4245 */ 4961da177e4SLinus Torvalds sys sys_exit_group 1 4970d507d61SRalf Baechle sys sys_lookup_dcookie 4 4981da177e4SLinus Torvalds sys sys_epoll_create 1 4991da177e4SLinus Torvalds sys sys_epoll_ctl 4 5001da177e4SLinus Torvalds sys sys_epoll_wait 3 /* 4250 */ 5011da177e4SLinus Torvalds sys sys_remap_file_pages 5 5021da177e4SLinus Torvalds sys sys_set_tid_address 1 5031da177e4SLinus Torvalds sys sys_restart_syscall 0 5041da177e4SLinus Torvalds sys sys_fadvise64_64 7 5051da177e4SLinus Torvalds sys sys_statfs64 3 /* 4255 */ 5061da177e4SLinus Torvalds sys sys_fstatfs64 2 5071da177e4SLinus Torvalds sys sys_timer_create 3 5081da177e4SLinus Torvalds sys sys_timer_settime 4 5091da177e4SLinus Torvalds sys sys_timer_gettime 2 5101da177e4SLinus Torvalds sys sys_timer_getoverrun 1 /* 4260 */ 5111da177e4SLinus Torvalds sys sys_timer_delete 1 5121da177e4SLinus Torvalds sys sys_clock_settime 2 5131da177e4SLinus Torvalds sys sys_clock_gettime 2 5141da177e4SLinus Torvalds sys sys_clock_getres 2 5151da177e4SLinus Torvalds sys sys_clock_nanosleep 4 /* 4265 */ 5161da177e4SLinus Torvalds sys sys_tgkill 3 5171da177e4SLinus Torvalds sys sys_utimes 2 5181da177e4SLinus Torvalds sys sys_mbind 4 5191da177e4SLinus Torvalds sys sys_ni_syscall 0 /* sys_get_mempolicy */ 5201da177e4SLinus Torvalds sys sys_ni_syscall 0 /* 4270 sys_set_mempolicy */ 5211da177e4SLinus Torvalds sys sys_mq_open 4 5221da177e4SLinus Torvalds sys sys_mq_unlink 1 5231da177e4SLinus Torvalds sys sys_mq_timedsend 5 5241da177e4SLinus Torvalds sys sys_mq_timedreceive 5 5251da177e4SLinus Torvalds sys sys_mq_notify 2 /* 4275 */ 5261da177e4SLinus Torvalds sys sys_mq_getsetattr 3 5271da177e4SLinus Torvalds sys sys_ni_syscall 0 /* sys_vserver */ 528a19050f3SRalf Baechle sys sys_waitid 5 5291da177e4SLinus Torvalds sys sys_ni_syscall 0 /* available, was setaltroot */ 530e50c0a8fSRalf Baechle sys sys_add_key 5 /* 4280 */ 5311da177e4SLinus Torvalds sys sys_request_key 4 5321da177e4SLinus Torvalds sys sys_keyctl 5 5333c37026dSRalf Baechle sys sys_set_thread_area 1 5347db36c85SRalf Baechle sys sys_inotify_init 0 5357db36c85SRalf Baechle sys sys_inotify_add_watch 3 /* 4285 */ 5367db36c85SRalf Baechle sys sys_inotify_rm_watch 2 53772bf8914SRalf Baechle sys sys_migrate_pages 4 53872bf8914SRalf Baechle sys sys_openat 4 53972bf8914SRalf Baechle sys sys_mkdirat 3 54072bf8914SRalf Baechle sys sys_mknodat 4 /* 4290 */ 54172bf8914SRalf Baechle sys sys_fchownat 5 54272bf8914SRalf Baechle sys sys_futimesat 3 543326a6257SYoichi Yuasa sys sys_fstatat64 4 54472bf8914SRalf Baechle sys sys_unlinkat 3 54572bf8914SRalf Baechle sys sys_renameat 4 /* 4295 */ 546c04030e1SUlrich Drepper sys sys_linkat 5 54772bf8914SRalf Baechle sys sys_symlinkat 3 54872bf8914SRalf Baechle sys sys_readlinkat 4 54972bf8914SRalf Baechle sys sys_fchmodat 3 55072bf8914SRalf Baechle sys sys_faccessat 3 /* 4300 */ 55172bf8914SRalf Baechle sys sys_pselect6 6 55272bf8914SRalf Baechle sys sys_ppoll 5 55372bf8914SRalf Baechle sys sys_unshare 1 55408d30879SRalf Baechle sys sys_splice 6 555a8d587a7SRalf Baechle sys sys_sync_file_range 7 /* 4305 */ 556136d47d3SRalf Baechle sys sys_tee 4 557722cfd90SRalf Baechle sys sys_vmsplice 4 558722cfd90SRalf Baechle sys sys_move_pages 6 5597fdeb048SAtsushi Nemoto sys sys_set_robust_list 2 560d2bcf87dSRalf Baechle sys sys_get_robust_list 3 /* 4310 */ 561583bb86fSNicolas Schichan sys sys_kexec_load 4 562991ea26dSRalf Baechle sys sys_getcpu 3 563991ea26dSRalf Baechle sys sys_epoll_pwait 6 56408253b39SRalf Baechle sys sys_ioprio_set 3 5657a6d4f38SAtsushi Nemoto sys sys_ioprio_get 2 /* 4315 */ 5667a6d4f38SAtsushi Nemoto sys sys_utimensat 4 5677a6d4f38SAtsushi Nemoto sys sys_signalfd 3 5684d672e7aSDavide Libenzi sys sys_ni_syscall 0 5697a6d4f38SAtsushi Nemoto sys sys_eventfd 1 5704dc46775SRalf Baechle sys sys_fallocate 6 /* 4320 */ 5716783fe62SDmitri Vorobiev sys sys_timerfd_create 2 5726783fe62SDmitri Vorobiev sys sys_timerfd_gettime 2 5736783fe62SDmitri Vorobiev sys sys_timerfd_settime 4 5743885b71bSRalf Baechle sys sys_signalfd4 4 5753885b71bSRalf Baechle sys sys_eventfd2 2 /* 4325 */ 5763885b71bSRalf Baechle sys sys_epoll_create1 1 5773885b71bSRalf Baechle sys sys_dup3 3 5783885b71bSRalf Baechle sys sys_pipe2 2 5793885b71bSRalf Baechle sys sys_inotify_init1 1 580ddd9e91bSRalf Baechle sys sys_preadv 6 /* 4330 */ 581ddd9e91bSRalf Baechle sys sys_pwritev 6 58269f16c9aSDavid Daney sys sys_rt_tgsigqueueinfo 4 583cdd6c482SIngo Molnar sys sys_perf_event_open 5 58454822de7SRalf Baechle sys sys_accept4 4 585a2e27255SArnaldo Carvalho de Melo sys sys_recvmmsg 5 5861da177e4SLinus Torvalds .endm 5871da177e4SLinus Torvalds 5881da177e4SLinus Torvalds /* We pre-compute the number of _instruction_ bytes needed to 5891da177e4SLinus Torvalds load or store the arguments 6-8. Negative values are ignored. */ 5901da177e4SLinus Torvalds 5911da177e4SLinus Torvalds .macro sys function, nargs 5921da177e4SLinus Torvalds PTR \function 5931da177e4SLinus Torvalds LONG (\nargs << 2) - (5 << 2) 5941da177e4SLinus Torvalds .endm 5951da177e4SLinus Torvalds 5961da177e4SLinus Torvalds .align 3 5971da177e4SLinus Torvalds .type sys_call_table,@object 5981da177e4SLinus TorvaldsEXPORT(sys_call_table) 5991da177e4SLinus Torvalds syscalltable 6001da177e4SLinus Torvalds .size sys_call_table, . - sys_call_table 601