xref: /openbmc/linux/arch/mips/kernel/scall32-o32.S (revision 4c21b8fd8f146a22e1eaf92833a32e51f560e82a)
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
4346e12c07SRalf Baechle	sll	t0, v0, 2
441da177e4SLinus Torvalds	la	t1, sys_call_table
451da177e4SLinus Torvalds	addu	t1, t0
461da177e4SLinus Torvalds	lw	t2, (t1)		# syscall routine
471da177e4SLinus Torvalds	beqz	t2, illegal_syscall
481da177e4SLinus Torvalds
491da177e4SLinus Torvalds	sw	a3, PT_R26(sp)		# save a3 for syscall restarting
501da177e4SLinus Torvalds
5146e12c07SRalf Baechle	/*
5246e12c07SRalf Baechle	 * More than four arguments.  Try to deal with it by copying the
5346e12c07SRalf Baechle	 * stack arguments from the user stack to the kernel stack.
5446e12c07SRalf Baechle	 * This Sucks (TM).
5546e12c07SRalf Baechle	 */
5646e12c07SRalf Baechle	lw	t0, PT_R29(sp)		# get old user stack pointer
5746e12c07SRalf Baechle
5846e12c07SRalf Baechle	/*
5946e12c07SRalf Baechle	 * We intentionally keep the kernel stack a little below the top of
6046e12c07SRalf Baechle	 * userspace so we don't have to do a slower byte accurate check here.
6146e12c07SRalf Baechle	 */
6246e12c07SRalf Baechle	lw	t5, TI_ADDR_LIMIT($28)
6346e12c07SRalf Baechle	addu	t4, t0, 32
6446e12c07SRalf Baechle	and	t5, t4
6546e12c07SRalf Baechle	bltz	t5, bad_stack		# -> sp is bad
6646e12c07SRalf Baechle
6746e12c07SRalf Baechle	/*
6846e12c07SRalf Baechle	 * Ok, copy the args from the luser stack to the kernel stack.
6946e12c07SRalf Baechle	 * t3 is the precomputed number of instruction bytes needed to
7046e12c07SRalf Baechle	 * load or store arguments 6-8.
7146e12c07SRalf Baechle	 */
7246e12c07SRalf Baechle
7346e12c07SRalf Baechle	.set    push
7446e12c07SRalf Baechle	.set    noreorder
7546e12c07SRalf Baechle	.set	nomacro
7646e12c07SRalf Baechle
7746e12c07SRalf Baechle1:	lw	t5, 16(t0)		# argument #5 from usp
7846e12c07SRalf Baechle4:	lw	t6, 20(t0)		# argument #6 from usp
7946e12c07SRalf Baechle3:	lw	t7, 24(t0)		# argument #7 from usp
8046e12c07SRalf Baechle2:	lw	t8, 28(t0)		# argument #8 from usp
8146e12c07SRalf Baechle
8246e12c07SRalf Baechle	sw	t5, 16(sp)		# argument #5 to ksp
8346e12c07SRalf Baechle	sw	t6, 20(sp)		# argument #6 to ksp
8446e12c07SRalf Baechle	sw	t7, 24(sp)		# argument #7 to ksp
8546e12c07SRalf Baechle	sw	t8, 28(sp)		# argument #8 to ksp
8646e12c07SRalf Baechle	.set	pop
8746e12c07SRalf Baechle
8846e12c07SRalf Baechle	.section __ex_table,"a"
8946e12c07SRalf Baechle	PTR	1b,bad_stack
9046e12c07SRalf Baechle	PTR	2b,bad_stack
9146e12c07SRalf Baechle	PTR	3b,bad_stack
9246e12c07SRalf Baechle	PTR	4b,bad_stack
9346e12c07SRalf Baechle	.previous
9446e12c07SRalf Baechle
951da177e4SLinus Torvalds	lw	t0, TI_FLAGS($28)	# syscall tracing enabled?
96e7f3b48aSRalf Baechle	li	t1, _TIF_WORK_SYSCALL_ENTRY
971da177e4SLinus Torvalds	and	t0, t1
981da177e4SLinus Torvalds	bnez	t0, syscall_trace_entry # -> yes
991da177e4SLinus Torvalds
1001da177e4SLinus Torvalds	jalr	t2			# Do The Real Thing (TM)
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 Torvaldso32_syscall_exit:
11302f884edSAl Viro	j	syscall_exit_partial
1141da177e4SLinus Torvalds
1151da177e4SLinus Torvalds/* ------------------------------------------------------------------------ */
1161da177e4SLinus Torvalds
1171da177e4SLinus Torvaldssyscall_trace_entry:
1181da177e4SLinus Torvalds	SAVE_STATIC
1191da177e4SLinus Torvalds	move	s0, t2
1201da177e4SLinus Torvalds	move	a0, sp
121*4c21b8fdSMarkos Chandras
122*4c21b8fdSMarkos Chandras	/*
123*4c21b8fdSMarkos Chandras	 * syscall number is in v0 unless we called syscall(__NR_###)
124*4c21b8fdSMarkos Chandras	 * where the real syscall number is in a0
125*4c21b8fdSMarkos Chandras	 */
126*4c21b8fdSMarkos Chandras	addiu	a1, v0,  __NR_O32_Linux
127*4c21b8fdSMarkos Chandras	bnez	v0, 1f /* __NR_syscall at offset 0 */
128*4c21b8fdSMarkos Chandras	lw	a1, PT_R4(sp)
129*4c21b8fdSMarkos Chandras
130*4c21b8fdSMarkos Chandras1:	jal	syscall_trace_enter
1311da177e4SLinus Torvalds
1329d37c405SMarkos Chandras	bltz	v0, 2f			# seccomp failed? Skip syscall
1339d37c405SMarkos Chandras
13404a7052cSRalf Baechle	move	t0, s0
13504a7052cSRalf Baechle	RESTORE_STATIC
1361da177e4SLinus Torvalds	lw	a0, PT_R4(sp)		# Restore argument registers
1371da177e4SLinus Torvalds	lw	a1, PT_R5(sp)
1381da177e4SLinus Torvalds	lw	a2, PT_R6(sp)
1391da177e4SLinus Torvalds	lw	a3, PT_R7(sp)
14004a7052cSRalf Baechle	jalr	t0
1411da177e4SLinus Torvalds
1421da177e4SLinus Torvalds	li	t0, -EMAXERRNO - 1	# error?
1431da177e4SLinus Torvalds	sltu	t0, t0, v0
1441da177e4SLinus Torvalds	sw	t0, PT_R7(sp)		# set error flag
1451da177e4SLinus Torvalds	beqz	t0, 1f
1461da177e4SLinus Torvalds
1478f5a00ebSAl Viro	lw	t1, PT_R2(sp)		# syscall number
1481da177e4SLinus Torvalds	negu	v0			# error
1498f5a00ebSAl Viro	sw	t1, PT_R0(sp)		# save it for syscall restarting
1501da177e4SLinus Torvalds1:	sw	v0, PT_R2(sp)		# result
1511da177e4SLinus Torvalds
1529d37c405SMarkos Chandras2:	j	syscall_exit
1531da177e4SLinus Torvalds
1541da177e4SLinus Torvalds/* ------------------------------------------------------------------------ */
1551da177e4SLinus Torvalds
1561da177e4SLinus Torvalds	/*
1571da177e4SLinus Torvalds	 * The stackpointer for a call with more than 4 arguments is bad.
1581da177e4SLinus Torvalds	 * We probably should handle this case a bit more drastic.
1591da177e4SLinus Torvalds	 */
1601da177e4SLinus Torvaldsbad_stack:
1615b89c004SAl Viro	li	v0, EFAULT
1621da177e4SLinus Torvalds	sw	v0, PT_R2(sp)
1631da177e4SLinus Torvalds	li	t0, 1				# set error flag
1641da177e4SLinus Torvalds	sw	t0, PT_R7(sp)
1651da177e4SLinus Torvalds	j	o32_syscall_exit
1661da177e4SLinus Torvalds
1671da177e4SLinus Torvalds	/*
1681da177e4SLinus Torvalds	 * The system call does not exist in this kernel
1691da177e4SLinus Torvalds	 */
1701da177e4SLinus Torvaldsillegal_syscall:
171bda8229bSAtsushi Nemoto	li	v0, ENOSYS			# error
1721da177e4SLinus Torvalds	sw	v0, PT_R2(sp)
1731da177e4SLinus Torvalds	li	t0, 1				# set error flag
1741da177e4SLinus Torvalds	sw	t0, PT_R7(sp)
1751da177e4SLinus Torvalds	j	o32_syscall_exit
1761da177e4SLinus Torvalds	END(handle_sys)
1771da177e4SLinus Torvalds
1781da177e4SLinus Torvalds	LEAF(sys_syscall)
1791da177e4SLinus Torvalds	subu	t0, a0, __NR_O32_Linux	# check syscall number
1801da177e4SLinus Torvalds	sltiu	v0, t0, __NR_O32_Linux_syscalls + 1
181e807f957SVlad Malov	beqz	t0, einval		# do not recurse
18246e12c07SRalf Baechle	sll	t1, t0, 2
1831da177e4SLinus Torvalds	beqz	v0, einval
1841da177e4SLinus Torvalds	lw	t2, sys_call_table(t1)		# syscall routine
1851da177e4SLinus Torvalds
1861da177e4SLinus Torvalds	/* Some syscalls like execve get their arguments from struct pt_regs
1871da177e4SLinus Torvalds	   and claim zero arguments in the syscall table. Thus we have to
1881da177e4SLinus Torvalds	   assume the worst case and shuffle around all potential arguments.
1891da177e4SLinus Torvalds	   If you want performance, don't use indirect syscalls. */
1901da177e4SLinus Torvalds
1911da177e4SLinus Torvalds	move	a0, a1				# shift argument registers
1921da177e4SLinus Torvalds	move	a1, a2
1931da177e4SLinus Torvalds	move	a2, a3
1941da177e4SLinus Torvalds	lw	a3, 16(sp)
1951da177e4SLinus Torvalds	lw	t4, 20(sp)
1961da177e4SLinus Torvalds	lw	t5, 24(sp)
1971da177e4SLinus Torvalds	lw	t6, 28(sp)
1981da177e4SLinus Torvalds	sw	t4, 16(sp)
1991da177e4SLinus Torvalds	sw	t5, 20(sp)
2001da177e4SLinus Torvalds	sw	t6, 24(sp)
2011da177e4SLinus Torvalds	sw	a0, PT_R4(sp)			# .. and push back a0 - a3, some
2021da177e4SLinus Torvalds	sw	a1, PT_R5(sp)			# syscalls expect them there
2031da177e4SLinus Torvalds	sw	a2, PT_R6(sp)
2041da177e4SLinus Torvalds	sw	a3, PT_R7(sp)
2051da177e4SLinus Torvalds	sw	a3, PT_R26(sp)			# update a3 for syscall restarting
2061da177e4SLinus Torvalds	jr	t2
2071da177e4SLinus Torvalds	/* Unreached */
2081da177e4SLinus Torvalds
209fb498e25SAtsushi Nemotoeinval: li	v0, -ENOSYS
2101da177e4SLinus Torvalds	jr	ra
2111da177e4SLinus Torvalds	END(sys_syscall)
2121da177e4SLinus Torvalds
21346e12c07SRalf Baechle	.align	2
21446e12c07SRalf Baechle	.type	sys_call_table, @object
21546e12c07SRalf BaechleEXPORT(sys_call_table)
21646e12c07SRalf Baechle	PTR	sys_syscall			/* 4000 */
21746e12c07SRalf Baechle	PTR	sys_exit
21846e12c07SRalf Baechle	PTR	__sys_fork
21946e12c07SRalf Baechle	PTR	sys_read
22046e12c07SRalf Baechle	PTR	sys_write
22146e12c07SRalf Baechle	PTR	sys_open			/* 4005 */
22246e12c07SRalf Baechle	PTR	sys_close
22346e12c07SRalf Baechle	PTR	sys_waitpid
22446e12c07SRalf Baechle	PTR	sys_creat
22546e12c07SRalf Baechle	PTR	sys_link
22646e12c07SRalf Baechle	PTR	sys_unlink			/* 4010 */
22746e12c07SRalf Baechle	PTR	sys_execve
22846e12c07SRalf Baechle	PTR	sys_chdir
22946e12c07SRalf Baechle	PTR	sys_time
23046e12c07SRalf Baechle	PTR	sys_mknod
23146e12c07SRalf Baechle	PTR	sys_chmod			/* 4015 */
23246e12c07SRalf Baechle	PTR	sys_lchown
23346e12c07SRalf Baechle	PTR	sys_ni_syscall
23446e12c07SRalf Baechle	PTR	sys_ni_syscall			/* was sys_stat */
23546e12c07SRalf Baechle	PTR	sys_lseek
23646e12c07SRalf Baechle	PTR	sys_getpid			/* 4020 */
23746e12c07SRalf Baechle	PTR	sys_mount
23846e12c07SRalf Baechle	PTR	sys_oldumount
23946e12c07SRalf Baechle	PTR	sys_setuid
24046e12c07SRalf Baechle	PTR	sys_getuid
24146e12c07SRalf Baechle	PTR	sys_stime			/* 4025 */
24246e12c07SRalf Baechle	PTR	sys_ptrace
24346e12c07SRalf Baechle	PTR	sys_alarm
24446e12c07SRalf Baechle	PTR	sys_ni_syscall			/* was sys_fstat */
24546e12c07SRalf Baechle	PTR	sys_pause
24646e12c07SRalf Baechle	PTR	sys_utime			/* 4030 */
24746e12c07SRalf Baechle	PTR	sys_ni_syscall
24846e12c07SRalf Baechle	PTR	sys_ni_syscall
24946e12c07SRalf Baechle	PTR	sys_access
25046e12c07SRalf Baechle	PTR	sys_nice
25146e12c07SRalf Baechle	PTR	sys_ni_syscall			/* 4035 */
25246e12c07SRalf Baechle	PTR	sys_sync
25346e12c07SRalf Baechle	PTR	sys_kill
25446e12c07SRalf Baechle	PTR	sys_rename
25546e12c07SRalf Baechle	PTR	sys_mkdir
25646e12c07SRalf Baechle	PTR	sys_rmdir			/* 4040 */
25746e12c07SRalf Baechle	PTR	sys_dup
25846e12c07SRalf Baechle	PTR	sysm_pipe
25946e12c07SRalf Baechle	PTR	sys_times
26046e12c07SRalf Baechle	PTR	sys_ni_syscall
26146e12c07SRalf Baechle	PTR	sys_brk				/* 4045 */
26246e12c07SRalf Baechle	PTR	sys_setgid
26346e12c07SRalf Baechle	PTR	sys_getgid
26446e12c07SRalf Baechle	PTR	sys_ni_syscall			/* was signal(2) */
26546e12c07SRalf Baechle	PTR	sys_geteuid
26646e12c07SRalf Baechle	PTR	sys_getegid			/* 4050 */
26746e12c07SRalf Baechle	PTR	sys_acct
26846e12c07SRalf Baechle	PTR	sys_umount
26946e12c07SRalf Baechle	PTR	sys_ni_syscall
27046e12c07SRalf Baechle	PTR	sys_ioctl
27146e12c07SRalf Baechle	PTR	sys_fcntl			/* 4055 */
27246e12c07SRalf Baechle	PTR	sys_ni_syscall
27346e12c07SRalf Baechle	PTR	sys_setpgid
27446e12c07SRalf Baechle	PTR	sys_ni_syscall
27546e12c07SRalf Baechle	PTR	sys_olduname
27646e12c07SRalf Baechle	PTR	sys_umask			/* 4060 */
27746e12c07SRalf Baechle	PTR	sys_chroot
27846e12c07SRalf Baechle	PTR	sys_ustat
27946e12c07SRalf Baechle	PTR	sys_dup2
28046e12c07SRalf Baechle	PTR	sys_getppid
28146e12c07SRalf Baechle	PTR	sys_getpgrp			/* 4065 */
28246e12c07SRalf Baechle	PTR	sys_setsid
28346e12c07SRalf Baechle	PTR	sys_sigaction
28446e12c07SRalf Baechle	PTR	sys_sgetmask
28546e12c07SRalf Baechle	PTR	sys_ssetmask
28646e12c07SRalf Baechle	PTR	sys_setreuid			/* 4070 */
28746e12c07SRalf Baechle	PTR	sys_setregid
28846e12c07SRalf Baechle	PTR	sys_sigsuspend
28946e12c07SRalf Baechle	PTR	sys_sigpending
29046e12c07SRalf Baechle	PTR	sys_sethostname
29146e12c07SRalf Baechle	PTR	sys_setrlimit			/* 4075 */
29246e12c07SRalf Baechle	PTR	sys_getrlimit
29346e12c07SRalf Baechle	PTR	sys_getrusage
29446e12c07SRalf Baechle	PTR	sys_gettimeofday
29546e12c07SRalf Baechle	PTR	sys_settimeofday
29646e12c07SRalf Baechle	PTR	sys_getgroups			/* 4080 */
29746e12c07SRalf Baechle	PTR	sys_setgroups
29846e12c07SRalf Baechle	PTR	sys_ni_syscall			/* old_select */
29946e12c07SRalf Baechle	PTR	sys_symlink
30046e12c07SRalf Baechle	PTR	sys_ni_syscall			/* was sys_lstat */
30146e12c07SRalf Baechle	PTR	sys_readlink			/* 4085 */
30246e12c07SRalf Baechle	PTR	sys_uselib
30346e12c07SRalf Baechle	PTR	sys_swapon
30446e12c07SRalf Baechle	PTR	sys_reboot
30546e12c07SRalf Baechle	PTR	sys_old_readdir
30646e12c07SRalf Baechle	PTR	sys_mips_mmap			/* 4090 */
30746e12c07SRalf Baechle	PTR	sys_munmap
30846e12c07SRalf Baechle	PTR	sys_truncate
30946e12c07SRalf Baechle	PTR	sys_ftruncate
31046e12c07SRalf Baechle	PTR	sys_fchmod
31146e12c07SRalf Baechle	PTR	sys_fchown			/* 4095 */
31246e12c07SRalf Baechle	PTR	sys_getpriority
31346e12c07SRalf Baechle	PTR	sys_setpriority
31446e12c07SRalf Baechle	PTR	sys_ni_syscall
31546e12c07SRalf Baechle	PTR	sys_statfs
31646e12c07SRalf Baechle	PTR	sys_fstatfs			/* 4100 */
31746e12c07SRalf Baechle	PTR	sys_ni_syscall			/* was ioperm(2) */
31846e12c07SRalf Baechle	PTR	sys_socketcall
31946e12c07SRalf Baechle	PTR	sys_syslog
32046e12c07SRalf Baechle	PTR	sys_setitimer
32146e12c07SRalf Baechle	PTR	sys_getitimer			/* 4105 */
32246e12c07SRalf Baechle	PTR	sys_newstat
32346e12c07SRalf Baechle	PTR	sys_newlstat
32446e12c07SRalf Baechle	PTR	sys_newfstat
32546e12c07SRalf Baechle	PTR	sys_uname
32646e12c07SRalf Baechle	PTR	sys_ni_syscall			/* 4110 was iopl(2) */
32746e12c07SRalf Baechle	PTR	sys_vhangup
32846e12c07SRalf Baechle	PTR	sys_ni_syscall			/* was sys_idle() */
32946e12c07SRalf Baechle	PTR	sys_ni_syscall			/* was sys_vm86 */
33046e12c07SRalf Baechle	PTR	sys_wait4
33146e12c07SRalf Baechle	PTR	sys_swapoff			/* 4115 */
33246e12c07SRalf Baechle	PTR	sys_sysinfo
33346e12c07SRalf Baechle	PTR	sys_ipc
33446e12c07SRalf Baechle	PTR	sys_fsync
33546e12c07SRalf Baechle	PTR	sys_sigreturn
33646e12c07SRalf Baechle	PTR	__sys_clone			/* 4120 */
33746e12c07SRalf Baechle	PTR	sys_setdomainname
33846e12c07SRalf Baechle	PTR	sys_newuname
33946e12c07SRalf Baechle	PTR	sys_ni_syscall			/* sys_modify_ldt */
34046e12c07SRalf Baechle	PTR	sys_adjtimex
34146e12c07SRalf Baechle	PTR	sys_mprotect			/* 4125 */
34246e12c07SRalf Baechle	PTR	sys_sigprocmask
34346e12c07SRalf Baechle	PTR	sys_ni_syscall			/* was create_module */
34446e12c07SRalf Baechle	PTR	sys_init_module
34546e12c07SRalf Baechle	PTR	sys_delete_module
34646e12c07SRalf Baechle	PTR	sys_ni_syscall			/* 4130 was get_kernel_syms */
34746e12c07SRalf Baechle	PTR	sys_quotactl
34846e12c07SRalf Baechle	PTR	sys_getpgid
34946e12c07SRalf Baechle	PTR	sys_fchdir
35046e12c07SRalf Baechle	PTR	sys_bdflush
35146e12c07SRalf Baechle	PTR	sys_sysfs			/* 4135 */
35246e12c07SRalf Baechle	PTR	sys_personality
35346e12c07SRalf Baechle	PTR	sys_ni_syscall			/* for afs_syscall */
35446e12c07SRalf Baechle	PTR	sys_setfsuid
35546e12c07SRalf Baechle	PTR	sys_setfsgid
35646e12c07SRalf Baechle	PTR	sys_llseek			/* 4140 */
35746e12c07SRalf Baechle	PTR	sys_getdents
35846e12c07SRalf Baechle	PTR	sys_select
35946e12c07SRalf Baechle	PTR	sys_flock
36046e12c07SRalf Baechle	PTR	sys_msync
36146e12c07SRalf Baechle	PTR	sys_readv			/* 4145 */
36246e12c07SRalf Baechle	PTR	sys_writev
36346e12c07SRalf Baechle	PTR	sys_cacheflush
36446e12c07SRalf Baechle	PTR	sys_cachectl
36546e12c07SRalf Baechle	PTR	sys_sysmips
36646e12c07SRalf Baechle	PTR	sys_ni_syscall			/* 4150 */
36746e12c07SRalf Baechle	PTR	sys_getsid
36846e12c07SRalf Baechle	PTR	sys_fdatasync
36946e12c07SRalf Baechle	PTR	sys_sysctl
37046e12c07SRalf Baechle	PTR	sys_mlock
37146e12c07SRalf Baechle	PTR	sys_munlock			/* 4155 */
37246e12c07SRalf Baechle	PTR	sys_mlockall
37346e12c07SRalf Baechle	PTR	sys_munlockall
37446e12c07SRalf Baechle	PTR	sys_sched_setparam
37546e12c07SRalf Baechle	PTR	sys_sched_getparam
37646e12c07SRalf Baechle	PTR	sys_sched_setscheduler		/* 4160 */
37746e12c07SRalf Baechle	PTR	sys_sched_getscheduler
37846e12c07SRalf Baechle	PTR	sys_sched_yield
37946e12c07SRalf Baechle	PTR	sys_sched_get_priority_max
38046e12c07SRalf Baechle	PTR	sys_sched_get_priority_min
38146e12c07SRalf Baechle	PTR	sys_sched_rr_get_interval	/* 4165 */
38246e12c07SRalf Baechle	PTR	sys_nanosleep
38346e12c07SRalf Baechle	PTR	sys_mremap
38446e12c07SRalf Baechle	PTR	sys_accept
38546e12c07SRalf Baechle	PTR	sys_bind
38646e12c07SRalf Baechle	PTR	sys_connect			/* 4170 */
38746e12c07SRalf Baechle	PTR	sys_getpeername
38846e12c07SRalf Baechle	PTR	sys_getsockname
38946e12c07SRalf Baechle	PTR	sys_getsockopt
39046e12c07SRalf Baechle	PTR	sys_listen
39146e12c07SRalf Baechle	PTR	sys_recv			/* 4175 */
39246e12c07SRalf Baechle	PTR	sys_recvfrom
39346e12c07SRalf Baechle	PTR	sys_recvmsg
39446e12c07SRalf Baechle	PTR	sys_send
39546e12c07SRalf Baechle	PTR	sys_sendmsg
39646e12c07SRalf Baechle	PTR	sys_sendto			/* 4180 */
39746e12c07SRalf Baechle	PTR	sys_setsockopt
39846e12c07SRalf Baechle	PTR	sys_shutdown
39946e12c07SRalf Baechle	PTR	sys_socket
40046e12c07SRalf Baechle	PTR	sys_socketpair
40146e12c07SRalf Baechle	PTR	sys_setresuid			/* 4185 */
40246e12c07SRalf Baechle	PTR	sys_getresuid
40346e12c07SRalf Baechle	PTR	sys_ni_syscall			/* was sys_query_module */
40446e12c07SRalf Baechle	PTR	sys_poll
40546e12c07SRalf Baechle	PTR	sys_ni_syscall			/* was nfsservctl */
40646e12c07SRalf Baechle	PTR	sys_setresgid			/* 4190 */
40746e12c07SRalf Baechle	PTR	sys_getresgid
40846e12c07SRalf Baechle	PTR	sys_prctl
40946e12c07SRalf Baechle	PTR	sys_rt_sigreturn
41046e12c07SRalf Baechle	PTR	sys_rt_sigaction
41146e12c07SRalf Baechle	PTR	sys_rt_sigprocmask		/* 4195 */
41246e12c07SRalf Baechle	PTR	sys_rt_sigpending
41346e12c07SRalf Baechle	PTR	sys_rt_sigtimedwait
41446e12c07SRalf Baechle	PTR	sys_rt_sigqueueinfo
41546e12c07SRalf Baechle	PTR	sys_rt_sigsuspend
41646e12c07SRalf Baechle	PTR	sys_pread64			/* 4200 */
41746e12c07SRalf Baechle	PTR	sys_pwrite64
41846e12c07SRalf Baechle	PTR	sys_chown
41946e12c07SRalf Baechle	PTR	sys_getcwd
42046e12c07SRalf Baechle	PTR	sys_capget
42146e12c07SRalf Baechle	PTR	sys_capset			/* 4205 */
42246e12c07SRalf Baechle	PTR	sys_sigaltstack
42346e12c07SRalf Baechle	PTR	sys_sendfile
42446e12c07SRalf Baechle	PTR	sys_ni_syscall
42546e12c07SRalf Baechle	PTR	sys_ni_syscall
42646e12c07SRalf Baechle	PTR	sys_mips_mmap2			/* 4210 */
42746e12c07SRalf Baechle	PTR	sys_truncate64
42846e12c07SRalf Baechle	PTR	sys_ftruncate64
42946e12c07SRalf Baechle	PTR	sys_stat64
43046e12c07SRalf Baechle	PTR	sys_lstat64
43146e12c07SRalf Baechle	PTR	sys_fstat64			/* 4215 */
43246e12c07SRalf Baechle	PTR	sys_pivot_root
43346e12c07SRalf Baechle	PTR	sys_mincore
43446e12c07SRalf Baechle	PTR	sys_madvise
43546e12c07SRalf Baechle	PTR	sys_getdents64
43646e12c07SRalf Baechle	PTR	sys_fcntl64			/* 4220 */
43746e12c07SRalf Baechle	PTR	sys_ni_syscall
43846e12c07SRalf Baechle	PTR	sys_gettid
43946e12c07SRalf Baechle	PTR	sys_readahead
44046e12c07SRalf Baechle	PTR	sys_setxattr
44146e12c07SRalf Baechle	PTR	sys_lsetxattr			/* 4225 */
44246e12c07SRalf Baechle	PTR	sys_fsetxattr
44346e12c07SRalf Baechle	PTR	sys_getxattr
44446e12c07SRalf Baechle	PTR	sys_lgetxattr
44546e12c07SRalf Baechle	PTR	sys_fgetxattr
44646e12c07SRalf Baechle	PTR	sys_listxattr			/* 4230 */
44746e12c07SRalf Baechle	PTR	sys_llistxattr
44846e12c07SRalf Baechle	PTR	sys_flistxattr
44946e12c07SRalf Baechle	PTR	sys_removexattr
45046e12c07SRalf Baechle	PTR	sys_lremovexattr
45146e12c07SRalf Baechle	PTR	sys_fremovexattr		/* 4235 */
45246e12c07SRalf Baechle	PTR	sys_tkill
45346e12c07SRalf Baechle	PTR	sys_sendfile64
45446e12c07SRalf Baechle	PTR	sys_futex
455f088fc84SRalf Baechle#ifdef CONFIG_MIPS_MT_FPAFF
456f088fc84SRalf Baechle	/*
457f088fc84SRalf Baechle	 * For FPU affinity scheduling on MIPS MT processors, we need to
458f088fc84SRalf Baechle	 * intercept sys_sched_xxxaffinity() calls until we get a proper hook
4590a0fca9dSViresh Kumar	 * in kernel/sched/core.c.  Considered only temporary we only support
4600a0fca9dSViresh Kumar	 * these hooks for the 32-bit kernel - there is no MIPS64 MT processor
4610a0fca9dSViresh Kumar	 * atm.
462f088fc84SRalf Baechle	 */
46346e12c07SRalf Baechle	PTR	mipsmt_sys_sched_setaffinity
46446e12c07SRalf Baechle	PTR	mipsmt_sys_sched_getaffinity
465f088fc84SRalf Baechle#else
46646e12c07SRalf Baechle	PTR	sys_sched_setaffinity
46746e12c07SRalf Baechle	PTR	sys_sched_getaffinity		/* 4240 */
468f088fc84SRalf Baechle#endif /* CONFIG_MIPS_MT_FPAFF */
46946e12c07SRalf Baechle	PTR	sys_io_setup
47046e12c07SRalf Baechle	PTR	sys_io_destroy
47146e12c07SRalf Baechle	PTR	sys_io_getevents
47246e12c07SRalf Baechle	PTR	sys_io_submit
47346e12c07SRalf Baechle	PTR	sys_io_cancel			/* 4245 */
47446e12c07SRalf Baechle	PTR	sys_exit_group
47546e12c07SRalf Baechle	PTR	sys_lookup_dcookie
47646e12c07SRalf Baechle	PTR	sys_epoll_create
47746e12c07SRalf Baechle	PTR	sys_epoll_ctl
47846e12c07SRalf Baechle	PTR	sys_epoll_wait			/* 4250 */
47946e12c07SRalf Baechle	PTR	sys_remap_file_pages
48046e12c07SRalf Baechle	PTR	sys_set_tid_address
48146e12c07SRalf Baechle	PTR	sys_restart_syscall
48246e12c07SRalf Baechle	PTR	sys_fadvise64_64
48346e12c07SRalf Baechle	PTR	sys_statfs64			/* 4255 */
48446e12c07SRalf Baechle	PTR	sys_fstatfs64
48546e12c07SRalf Baechle	PTR	sys_timer_create
48646e12c07SRalf Baechle	PTR	sys_timer_settime
48746e12c07SRalf Baechle	PTR	sys_timer_gettime
48846e12c07SRalf Baechle	PTR	sys_timer_getoverrun		/* 4260 */
48946e12c07SRalf Baechle	PTR	sys_timer_delete
49046e12c07SRalf Baechle	PTR	sys_clock_settime
49146e12c07SRalf Baechle	PTR	sys_clock_gettime
49246e12c07SRalf Baechle	PTR	sys_clock_getres
49346e12c07SRalf Baechle	PTR	sys_clock_nanosleep		/* 4265 */
49446e12c07SRalf Baechle	PTR	sys_tgkill
49546e12c07SRalf Baechle	PTR	sys_utimes
49646e12c07SRalf Baechle	PTR	sys_mbind
49746e12c07SRalf Baechle	PTR	sys_ni_syscall			/* sys_get_mempolicy */
49846e12c07SRalf Baechle	PTR	sys_ni_syscall			/* 4270 sys_set_mempolicy */
49946e12c07SRalf Baechle	PTR	sys_mq_open
50046e12c07SRalf Baechle	PTR	sys_mq_unlink
50146e12c07SRalf Baechle	PTR	sys_mq_timedsend
50246e12c07SRalf Baechle	PTR	sys_mq_timedreceive
50346e12c07SRalf Baechle	PTR	sys_mq_notify			/* 4275 */
50446e12c07SRalf Baechle	PTR	sys_mq_getsetattr
50546e12c07SRalf Baechle	PTR	sys_ni_syscall			/* sys_vserver */
50646e12c07SRalf Baechle	PTR	sys_waitid
50746e12c07SRalf Baechle	PTR	sys_ni_syscall			/* available, was setaltroot */
50846e12c07SRalf Baechle	PTR	sys_add_key			/* 4280 */
50946e12c07SRalf Baechle	PTR	sys_request_key
51046e12c07SRalf Baechle	PTR	sys_keyctl
51146e12c07SRalf Baechle	PTR	sys_set_thread_area
51246e12c07SRalf Baechle	PTR	sys_inotify_init
51346e12c07SRalf Baechle	PTR	sys_inotify_add_watch		/* 4285 */
51446e12c07SRalf Baechle	PTR	sys_inotify_rm_watch
51546e12c07SRalf Baechle	PTR	sys_migrate_pages
51646e12c07SRalf Baechle	PTR	sys_openat
51746e12c07SRalf Baechle	PTR	sys_mkdirat
51846e12c07SRalf Baechle	PTR	sys_mknodat			/* 4290 */
51946e12c07SRalf Baechle	PTR	sys_fchownat
52046e12c07SRalf Baechle	PTR	sys_futimesat
52146e12c07SRalf Baechle	PTR	sys_fstatat64
52246e12c07SRalf Baechle	PTR	sys_unlinkat
52346e12c07SRalf Baechle	PTR	sys_renameat			/* 4295 */
52446e12c07SRalf Baechle	PTR	sys_linkat
52546e12c07SRalf Baechle	PTR	sys_symlinkat
52646e12c07SRalf Baechle	PTR	sys_readlinkat
52746e12c07SRalf Baechle	PTR	sys_fchmodat
52846e12c07SRalf Baechle	PTR	sys_faccessat			/* 4300 */
52946e12c07SRalf Baechle	PTR	sys_pselect6
53046e12c07SRalf Baechle	PTR	sys_ppoll
53146e12c07SRalf Baechle	PTR	sys_unshare
53246e12c07SRalf Baechle	PTR	sys_splice
53346e12c07SRalf Baechle	PTR	sys_sync_file_range		/* 4305 */
53446e12c07SRalf Baechle	PTR	sys_tee
53546e12c07SRalf Baechle	PTR	sys_vmsplice
53646e12c07SRalf Baechle	PTR	sys_move_pages
53746e12c07SRalf Baechle	PTR	sys_set_robust_list
53846e12c07SRalf Baechle	PTR	sys_get_robust_list		/* 4310 */
53946e12c07SRalf Baechle	PTR	sys_kexec_load
54046e12c07SRalf Baechle	PTR	sys_getcpu
54146e12c07SRalf Baechle	PTR	sys_epoll_pwait
54246e12c07SRalf Baechle	PTR	sys_ioprio_set
54346e12c07SRalf Baechle	PTR	sys_ioprio_get			/* 4315 */
54446e12c07SRalf Baechle	PTR	sys_utimensat
54546e12c07SRalf Baechle	PTR	sys_signalfd
54646e12c07SRalf Baechle	PTR	sys_ni_syscall			/* was timerfd */
54746e12c07SRalf Baechle	PTR	sys_eventfd
54846e12c07SRalf Baechle	PTR	sys_fallocate			/* 4320 */
54946e12c07SRalf Baechle	PTR	sys_timerfd_create
55046e12c07SRalf Baechle	PTR	sys_timerfd_gettime
55146e12c07SRalf Baechle	PTR	sys_timerfd_settime
55246e12c07SRalf Baechle	PTR	sys_signalfd4
55346e12c07SRalf Baechle	PTR	sys_eventfd2			/* 4325 */
55446e12c07SRalf Baechle	PTR	sys_epoll_create1
55546e12c07SRalf Baechle	PTR	sys_dup3
55646e12c07SRalf Baechle	PTR	sys_pipe2
55746e12c07SRalf Baechle	PTR	sys_inotify_init1
55846e12c07SRalf Baechle	PTR	sys_preadv			/* 4330 */
55946e12c07SRalf Baechle	PTR	sys_pwritev
56046e12c07SRalf Baechle	PTR	sys_rt_tgsigqueueinfo
56146e12c07SRalf Baechle	PTR	sys_perf_event_open
56246e12c07SRalf Baechle	PTR	sys_accept4
56346e12c07SRalf Baechle	PTR	sys_recvmmsg			/* 4335 */
56446e12c07SRalf Baechle	PTR	sys_fanotify_init
56546e12c07SRalf Baechle	PTR	sys_fanotify_mark
56646e12c07SRalf Baechle	PTR	sys_prlimit64
56746e12c07SRalf Baechle	PTR	sys_name_to_handle_at
56846e12c07SRalf Baechle	PTR	sys_open_by_handle_at		/* 4340 */
56946e12c07SRalf Baechle	PTR	sys_clock_adjtime
57046e12c07SRalf Baechle	PTR	sys_syncfs
57146e12c07SRalf Baechle	PTR	sys_sendmmsg
57246e12c07SRalf Baechle	PTR	sys_setns
57346e12c07SRalf Baechle	PTR	sys_process_vm_readv		/* 4345 */
57446e12c07SRalf Baechle	PTR	sys_process_vm_writev
57546e12c07SRalf Baechle	PTR	sys_kcmp
57646e12c07SRalf Baechle	PTR	sys_finit_module
5776776254bSJames Hogan	PTR	sys_sched_setattr
5786776254bSJames Hogan	PTR	sys_sched_getattr		/* 4350 */
579