xref: /openbmc/linux/arch/mips/kernel/scall32-o32.S (revision 46e12c07b3b9603c60fc1d421ff18618241cb081)
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
43*46e12c07SRalf 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
51*46e12c07SRalf Baechle	/*
52*46e12c07SRalf Baechle	 * More than four arguments.  Try to deal with it by copying the
53*46e12c07SRalf Baechle	 * stack arguments from the user stack to the kernel stack.
54*46e12c07SRalf Baechle	 * This Sucks (TM).
55*46e12c07SRalf Baechle	 */
56*46e12c07SRalf Baechle	lw	t0, PT_R29(sp)		# get old user stack pointer
57*46e12c07SRalf Baechle
58*46e12c07SRalf Baechle	/*
59*46e12c07SRalf Baechle	 * We intentionally keep the kernel stack a little below the top of
60*46e12c07SRalf Baechle	 * userspace so we don't have to do a slower byte accurate check here.
61*46e12c07SRalf Baechle	 */
62*46e12c07SRalf Baechle	lw	t5, TI_ADDR_LIMIT($28)
63*46e12c07SRalf Baechle	addu	t4, t0, 32
64*46e12c07SRalf Baechle	and	t5, t4
65*46e12c07SRalf Baechle	bltz	t5, bad_stack		# -> sp is bad
66*46e12c07SRalf Baechle
67*46e12c07SRalf Baechle	/*
68*46e12c07SRalf Baechle	 * Ok, copy the args from the luser stack to the kernel stack.
69*46e12c07SRalf Baechle	 * t3 is the precomputed number of instruction bytes needed to
70*46e12c07SRalf Baechle	 * load or store arguments 6-8.
71*46e12c07SRalf Baechle	 */
72*46e12c07SRalf Baechle
73*46e12c07SRalf Baechle	.set    push
74*46e12c07SRalf Baechle	.set    noreorder
75*46e12c07SRalf Baechle	.set	nomacro
76*46e12c07SRalf Baechle
77*46e12c07SRalf Baechle1:	lw	t5, 16(t0)		# argument #5 from usp
78*46e12c07SRalf Baechle4:	lw	t6, 20(t0)		# argument #6 from usp
79*46e12c07SRalf Baechle3:	lw	t7, 24(t0)		# argument #7 from usp
80*46e12c07SRalf Baechle2:	lw	t8, 28(t0)		# argument #8 from usp
81*46e12c07SRalf Baechle
82*46e12c07SRalf Baechle	sw	t5, 16(sp)		# argument #5 to ksp
83*46e12c07SRalf Baechle	sw	t6, 20(sp)		# argument #6 to ksp
84*46e12c07SRalf Baechle	sw	t7, 24(sp)		# argument #7 to ksp
85*46e12c07SRalf Baechle	sw	t8, 28(sp)		# argument #8 to ksp
86*46e12c07SRalf Baechle	.set	pop
87*46e12c07SRalf Baechle
88*46e12c07SRalf Baechle	.section __ex_table,"a"
89*46e12c07SRalf Baechle	PTR	1b,bad_stack
90*46e12c07SRalf Baechle	PTR	2b,bad_stack
91*46e12c07SRalf Baechle	PTR	3b,bad_stack
92*46e12c07SRalf Baechle	PTR	4b,bad_stack
93*46e12c07SRalf Baechle	.previous
94*46e12c07SRalf 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
1218b659a39SRalf Baechle	jal	syscall_trace_enter
1221da177e4SLinus Torvalds
12304a7052cSRalf Baechle	move	t0, s0
12404a7052cSRalf Baechle	RESTORE_STATIC
1251da177e4SLinus Torvalds	lw	a0, PT_R4(sp)		# Restore argument registers
1261da177e4SLinus Torvalds	lw	a1, PT_R5(sp)
1271da177e4SLinus Torvalds	lw	a2, PT_R6(sp)
1281da177e4SLinus Torvalds	lw	a3, PT_R7(sp)
12904a7052cSRalf Baechle	jalr	t0
1301da177e4SLinus Torvalds
1311da177e4SLinus Torvalds	li	t0, -EMAXERRNO - 1	# error?
1321da177e4SLinus Torvalds	sltu	t0, t0, v0
1331da177e4SLinus Torvalds	sw	t0, PT_R7(sp)		# set error flag
1341da177e4SLinus Torvalds	beqz	t0, 1f
1351da177e4SLinus Torvalds
1368f5a00ebSAl Viro	lw	t1, PT_R2(sp)		# syscall number
1371da177e4SLinus Torvalds	negu	v0			# error
1388f5a00ebSAl Viro	sw	t1, PT_R0(sp)		# save it for syscall restarting
1391da177e4SLinus Torvalds1:	sw	v0, PT_R2(sp)		# result
1401da177e4SLinus Torvalds
1411da177e4SLinus Torvalds	j	syscall_exit
1421da177e4SLinus Torvalds
1431da177e4SLinus Torvalds/* ------------------------------------------------------------------------ */
1441da177e4SLinus Torvalds
1451da177e4SLinus Torvalds	/*
1461da177e4SLinus Torvalds	 * The stackpointer for a call with more than 4 arguments is bad.
1471da177e4SLinus Torvalds	 * We probably should handle this case a bit more drastic.
1481da177e4SLinus Torvalds	 */
1491da177e4SLinus Torvaldsbad_stack:
1505b89c004SAl Viro	li	v0, EFAULT
1511da177e4SLinus Torvalds	sw	v0, PT_R2(sp)
1521da177e4SLinus Torvalds	li	t0, 1				# set error flag
1531da177e4SLinus Torvalds	sw	t0, PT_R7(sp)
1541da177e4SLinus Torvalds	j	o32_syscall_exit
1551da177e4SLinus Torvalds
1561da177e4SLinus Torvalds	/*
1571da177e4SLinus Torvalds	 * The system call does not exist in this kernel
1581da177e4SLinus Torvalds	 */
1591da177e4SLinus Torvaldsillegal_syscall:
160bda8229bSAtsushi Nemoto	li	v0, ENOSYS			# error
1611da177e4SLinus Torvalds	sw	v0, PT_R2(sp)
1621da177e4SLinus Torvalds	li	t0, 1				# set error flag
1631da177e4SLinus Torvalds	sw	t0, PT_R7(sp)
1641da177e4SLinus Torvalds	j	o32_syscall_exit
1651da177e4SLinus Torvalds	END(handle_sys)
1661da177e4SLinus Torvalds
1671da177e4SLinus Torvalds	LEAF(sys_syscall)
1681da177e4SLinus Torvalds	subu	t0, a0, __NR_O32_Linux	# check syscall number
1691da177e4SLinus Torvalds	sltiu	v0, t0, __NR_O32_Linux_syscalls + 1
170e807f957SVlad Malov	beqz	t0, einval		# do not recurse
171*46e12c07SRalf Baechle	sll	t1, t0, 2
1721da177e4SLinus Torvalds	beqz	v0, einval
1731da177e4SLinus Torvalds	lw	t2, sys_call_table(t1)		# syscall routine
1741da177e4SLinus Torvalds
1751da177e4SLinus Torvalds	/* Some syscalls like execve get their arguments from struct pt_regs
1761da177e4SLinus Torvalds	   and claim zero arguments in the syscall table. Thus we have to
1771da177e4SLinus Torvalds	   assume the worst case and shuffle around all potential arguments.
1781da177e4SLinus Torvalds	   If you want performance, don't use indirect syscalls. */
1791da177e4SLinus Torvalds
1801da177e4SLinus Torvalds	move	a0, a1				# shift argument registers
1811da177e4SLinus Torvalds	move	a1, a2
1821da177e4SLinus Torvalds	move	a2, a3
1831da177e4SLinus Torvalds	lw	a3, 16(sp)
1841da177e4SLinus Torvalds	lw	t4, 20(sp)
1851da177e4SLinus Torvalds	lw	t5, 24(sp)
1861da177e4SLinus Torvalds	lw	t6, 28(sp)
1871da177e4SLinus Torvalds	sw	t4, 16(sp)
1881da177e4SLinus Torvalds	sw	t5, 20(sp)
1891da177e4SLinus Torvalds	sw	t6, 24(sp)
1901da177e4SLinus Torvalds	sw	a0, PT_R4(sp)			# .. and push back a0 - a3, some
1911da177e4SLinus Torvalds	sw	a1, PT_R5(sp)			# syscalls expect them there
1921da177e4SLinus Torvalds	sw	a2, PT_R6(sp)
1931da177e4SLinus Torvalds	sw	a3, PT_R7(sp)
1941da177e4SLinus Torvalds	sw	a3, PT_R26(sp)			# update a3 for syscall restarting
1951da177e4SLinus Torvalds	jr	t2
1961da177e4SLinus Torvalds	/* Unreached */
1971da177e4SLinus Torvalds
198fb498e25SAtsushi Nemotoeinval: li	v0, -ENOSYS
1991da177e4SLinus Torvalds	jr	ra
2001da177e4SLinus Torvalds	END(sys_syscall)
2011da177e4SLinus Torvalds
202*46e12c07SRalf Baechle	.align	2
203*46e12c07SRalf Baechle	.type	sys_call_table, @object
204*46e12c07SRalf BaechleEXPORT(sys_call_table)
205*46e12c07SRalf Baechle	PTR	sys_syscall			/* 4000 */
206*46e12c07SRalf Baechle	PTR	sys_exit
207*46e12c07SRalf Baechle	PTR	__sys_fork
208*46e12c07SRalf Baechle	PTR	sys_read
209*46e12c07SRalf Baechle	PTR	sys_write
210*46e12c07SRalf Baechle	PTR	sys_open			/* 4005 */
211*46e12c07SRalf Baechle	PTR	sys_close
212*46e12c07SRalf Baechle	PTR	sys_waitpid
213*46e12c07SRalf Baechle	PTR	sys_creat
214*46e12c07SRalf Baechle	PTR	sys_link
215*46e12c07SRalf Baechle	PTR	sys_unlink			/* 4010 */
216*46e12c07SRalf Baechle	PTR	sys_execve
217*46e12c07SRalf Baechle	PTR	sys_chdir
218*46e12c07SRalf Baechle	PTR	sys_time
219*46e12c07SRalf Baechle	PTR	sys_mknod
220*46e12c07SRalf Baechle	PTR	sys_chmod			/* 4015 */
221*46e12c07SRalf Baechle	PTR	sys_lchown
222*46e12c07SRalf Baechle	PTR	sys_ni_syscall
223*46e12c07SRalf Baechle	PTR	sys_ni_syscall			/* was sys_stat */
224*46e12c07SRalf Baechle	PTR	sys_lseek
225*46e12c07SRalf Baechle	PTR	sys_getpid			/* 4020 */
226*46e12c07SRalf Baechle	PTR	sys_mount
227*46e12c07SRalf Baechle	PTR	sys_oldumount
228*46e12c07SRalf Baechle	PTR	sys_setuid
229*46e12c07SRalf Baechle	PTR	sys_getuid
230*46e12c07SRalf Baechle	PTR	sys_stime			/* 4025 */
231*46e12c07SRalf Baechle	PTR	sys_ptrace
232*46e12c07SRalf Baechle	PTR	sys_alarm
233*46e12c07SRalf Baechle	PTR	sys_ni_syscall			/* was sys_fstat */
234*46e12c07SRalf Baechle	PTR	sys_pause
235*46e12c07SRalf Baechle	PTR	sys_utime			/* 4030 */
236*46e12c07SRalf Baechle	PTR	sys_ni_syscall
237*46e12c07SRalf Baechle	PTR	sys_ni_syscall
238*46e12c07SRalf Baechle	PTR	sys_access
239*46e12c07SRalf Baechle	PTR	sys_nice
240*46e12c07SRalf Baechle	PTR	sys_ni_syscall			/* 4035 */
241*46e12c07SRalf Baechle	PTR	sys_sync
242*46e12c07SRalf Baechle	PTR	sys_kill
243*46e12c07SRalf Baechle	PTR	sys_rename
244*46e12c07SRalf Baechle	PTR	sys_mkdir
245*46e12c07SRalf Baechle	PTR	sys_rmdir			/* 4040 */
246*46e12c07SRalf Baechle	PTR	sys_dup
247*46e12c07SRalf Baechle	PTR	sysm_pipe
248*46e12c07SRalf Baechle	PTR	sys_times
249*46e12c07SRalf Baechle	PTR	sys_ni_syscall
250*46e12c07SRalf Baechle	PTR	sys_brk				/* 4045 */
251*46e12c07SRalf Baechle	PTR	sys_setgid
252*46e12c07SRalf Baechle	PTR	sys_getgid
253*46e12c07SRalf Baechle	PTR	sys_ni_syscall			/* was signal(2) */
254*46e12c07SRalf Baechle	PTR	sys_geteuid
255*46e12c07SRalf Baechle	PTR	sys_getegid			/* 4050 */
256*46e12c07SRalf Baechle	PTR	sys_acct
257*46e12c07SRalf Baechle	PTR	sys_umount
258*46e12c07SRalf Baechle	PTR	sys_ni_syscall
259*46e12c07SRalf Baechle	PTR	sys_ioctl
260*46e12c07SRalf Baechle	PTR	sys_fcntl			/* 4055 */
261*46e12c07SRalf Baechle	PTR	sys_ni_syscall
262*46e12c07SRalf Baechle	PTR	sys_setpgid
263*46e12c07SRalf Baechle	PTR	sys_ni_syscall
264*46e12c07SRalf Baechle	PTR	sys_olduname
265*46e12c07SRalf Baechle	PTR	sys_umask			/* 4060 */
266*46e12c07SRalf Baechle	PTR	sys_chroot
267*46e12c07SRalf Baechle	PTR	sys_ustat
268*46e12c07SRalf Baechle	PTR	sys_dup2
269*46e12c07SRalf Baechle	PTR	sys_getppid
270*46e12c07SRalf Baechle	PTR	sys_getpgrp			/* 4065 */
271*46e12c07SRalf Baechle	PTR	sys_setsid
272*46e12c07SRalf Baechle	PTR	sys_sigaction
273*46e12c07SRalf Baechle	PTR	sys_sgetmask
274*46e12c07SRalf Baechle	PTR	sys_ssetmask
275*46e12c07SRalf Baechle	PTR	sys_setreuid			/* 4070 */
276*46e12c07SRalf Baechle	PTR	sys_setregid
277*46e12c07SRalf Baechle	PTR	sys_sigsuspend
278*46e12c07SRalf Baechle	PTR	sys_sigpending
279*46e12c07SRalf Baechle	PTR	sys_sethostname
280*46e12c07SRalf Baechle	PTR	sys_setrlimit			/* 4075 */
281*46e12c07SRalf Baechle	PTR	sys_getrlimit
282*46e12c07SRalf Baechle	PTR	sys_getrusage
283*46e12c07SRalf Baechle	PTR	sys_gettimeofday
284*46e12c07SRalf Baechle	PTR	sys_settimeofday
285*46e12c07SRalf Baechle	PTR	sys_getgroups			/* 4080 */
286*46e12c07SRalf Baechle	PTR	sys_setgroups
287*46e12c07SRalf Baechle	PTR	sys_ni_syscall			/* old_select */
288*46e12c07SRalf Baechle	PTR	sys_symlink
289*46e12c07SRalf Baechle	PTR	sys_ni_syscall			/* was sys_lstat */
290*46e12c07SRalf Baechle	PTR	sys_readlink			/* 4085 */
291*46e12c07SRalf Baechle	PTR	sys_uselib
292*46e12c07SRalf Baechle	PTR	sys_swapon
293*46e12c07SRalf Baechle	PTR	sys_reboot
294*46e12c07SRalf Baechle	PTR	sys_old_readdir
295*46e12c07SRalf Baechle	PTR	sys_mips_mmap			/* 4090 */
296*46e12c07SRalf Baechle	PTR	sys_munmap
297*46e12c07SRalf Baechle	PTR	sys_truncate
298*46e12c07SRalf Baechle	PTR	sys_ftruncate
299*46e12c07SRalf Baechle	PTR	sys_fchmod
300*46e12c07SRalf Baechle	PTR	sys_fchown			/* 4095 */
301*46e12c07SRalf Baechle	PTR	sys_getpriority
302*46e12c07SRalf Baechle	PTR	sys_setpriority
303*46e12c07SRalf Baechle	PTR	sys_ni_syscall
304*46e12c07SRalf Baechle	PTR	sys_statfs
305*46e12c07SRalf Baechle	PTR	sys_fstatfs			/* 4100 */
306*46e12c07SRalf Baechle	PTR	sys_ni_syscall			/* was ioperm(2) */
307*46e12c07SRalf Baechle	PTR	sys_socketcall
308*46e12c07SRalf Baechle	PTR	sys_syslog
309*46e12c07SRalf Baechle	PTR	sys_setitimer
310*46e12c07SRalf Baechle	PTR	sys_getitimer			/* 4105 */
311*46e12c07SRalf Baechle	PTR	sys_newstat
312*46e12c07SRalf Baechle	PTR	sys_newlstat
313*46e12c07SRalf Baechle	PTR	sys_newfstat
314*46e12c07SRalf Baechle	PTR	sys_uname
315*46e12c07SRalf Baechle	PTR	sys_ni_syscall			/* 4110 was iopl(2) */
316*46e12c07SRalf Baechle	PTR	sys_vhangup
317*46e12c07SRalf Baechle	PTR	sys_ni_syscall			/* was sys_idle() */
318*46e12c07SRalf Baechle	PTR	sys_ni_syscall			/* was sys_vm86 */
319*46e12c07SRalf Baechle	PTR	sys_wait4
320*46e12c07SRalf Baechle	PTR	sys_swapoff			/* 4115 */
321*46e12c07SRalf Baechle	PTR	sys_sysinfo
322*46e12c07SRalf Baechle	PTR	sys_ipc
323*46e12c07SRalf Baechle	PTR	sys_fsync
324*46e12c07SRalf Baechle	PTR	sys_sigreturn
325*46e12c07SRalf Baechle	PTR	__sys_clone			/* 4120 */
326*46e12c07SRalf Baechle	PTR	sys_setdomainname
327*46e12c07SRalf Baechle	PTR	sys_newuname
328*46e12c07SRalf Baechle	PTR	sys_ni_syscall			/* sys_modify_ldt */
329*46e12c07SRalf Baechle	PTR	sys_adjtimex
330*46e12c07SRalf Baechle	PTR	sys_mprotect			/* 4125 */
331*46e12c07SRalf Baechle	PTR	sys_sigprocmask
332*46e12c07SRalf Baechle	PTR	sys_ni_syscall			/* was create_module */
333*46e12c07SRalf Baechle	PTR	sys_init_module
334*46e12c07SRalf Baechle	PTR	sys_delete_module
335*46e12c07SRalf Baechle	PTR	sys_ni_syscall			/* 4130 was get_kernel_syms */
336*46e12c07SRalf Baechle	PTR	sys_quotactl
337*46e12c07SRalf Baechle	PTR	sys_getpgid
338*46e12c07SRalf Baechle	PTR	sys_fchdir
339*46e12c07SRalf Baechle	PTR	sys_bdflush
340*46e12c07SRalf Baechle	PTR	sys_sysfs			/* 4135 */
341*46e12c07SRalf Baechle	PTR	sys_personality
342*46e12c07SRalf Baechle	PTR	sys_ni_syscall			/* for afs_syscall */
343*46e12c07SRalf Baechle	PTR	sys_setfsuid
344*46e12c07SRalf Baechle	PTR	sys_setfsgid
345*46e12c07SRalf Baechle	PTR	sys_llseek			/* 4140 */
346*46e12c07SRalf Baechle	PTR	sys_getdents
347*46e12c07SRalf Baechle	PTR	sys_select
348*46e12c07SRalf Baechle	PTR	sys_flock
349*46e12c07SRalf Baechle	PTR	sys_msync
350*46e12c07SRalf Baechle	PTR	sys_readv			/* 4145 */
351*46e12c07SRalf Baechle	PTR	sys_writev
352*46e12c07SRalf Baechle	PTR	sys_cacheflush
353*46e12c07SRalf Baechle	PTR	sys_cachectl
354*46e12c07SRalf Baechle	PTR	sys_sysmips
355*46e12c07SRalf Baechle	PTR	sys_ni_syscall			/* 4150 */
356*46e12c07SRalf Baechle	PTR	sys_getsid
357*46e12c07SRalf Baechle	PTR	sys_fdatasync
358*46e12c07SRalf Baechle	PTR	sys_sysctl
359*46e12c07SRalf Baechle	PTR	sys_mlock
360*46e12c07SRalf Baechle	PTR	sys_munlock			/* 4155 */
361*46e12c07SRalf Baechle	PTR	sys_mlockall
362*46e12c07SRalf Baechle	PTR	sys_munlockall
363*46e12c07SRalf Baechle	PTR	sys_sched_setparam
364*46e12c07SRalf Baechle	PTR	sys_sched_getparam
365*46e12c07SRalf Baechle	PTR	sys_sched_setscheduler		/* 4160 */
366*46e12c07SRalf Baechle	PTR	sys_sched_getscheduler
367*46e12c07SRalf Baechle	PTR	sys_sched_yield
368*46e12c07SRalf Baechle	PTR	sys_sched_get_priority_max
369*46e12c07SRalf Baechle	PTR	sys_sched_get_priority_min
370*46e12c07SRalf Baechle	PTR	sys_sched_rr_get_interval	/* 4165 */
371*46e12c07SRalf Baechle	PTR	sys_nanosleep
372*46e12c07SRalf Baechle	PTR	sys_mremap
373*46e12c07SRalf Baechle	PTR	sys_accept
374*46e12c07SRalf Baechle	PTR	sys_bind
375*46e12c07SRalf Baechle	PTR	sys_connect			/* 4170 */
376*46e12c07SRalf Baechle	PTR	sys_getpeername
377*46e12c07SRalf Baechle	PTR	sys_getsockname
378*46e12c07SRalf Baechle	PTR	sys_getsockopt
379*46e12c07SRalf Baechle	PTR	sys_listen
380*46e12c07SRalf Baechle	PTR	sys_recv			/* 4175 */
381*46e12c07SRalf Baechle	PTR	sys_recvfrom
382*46e12c07SRalf Baechle	PTR	sys_recvmsg
383*46e12c07SRalf Baechle	PTR	sys_send
384*46e12c07SRalf Baechle	PTR	sys_sendmsg
385*46e12c07SRalf Baechle	PTR	sys_sendto			/* 4180 */
386*46e12c07SRalf Baechle	PTR	sys_setsockopt
387*46e12c07SRalf Baechle	PTR	sys_shutdown
388*46e12c07SRalf Baechle	PTR	sys_socket
389*46e12c07SRalf Baechle	PTR	sys_socketpair
390*46e12c07SRalf Baechle	PTR	sys_setresuid			/* 4185 */
391*46e12c07SRalf Baechle	PTR	sys_getresuid
392*46e12c07SRalf Baechle	PTR	sys_ni_syscall			/* was sys_query_module */
393*46e12c07SRalf Baechle	PTR	sys_poll
394*46e12c07SRalf Baechle	PTR	sys_ni_syscall			/* was nfsservctl */
395*46e12c07SRalf Baechle	PTR	sys_setresgid			/* 4190 */
396*46e12c07SRalf Baechle	PTR	sys_getresgid
397*46e12c07SRalf Baechle	PTR	sys_prctl
398*46e12c07SRalf Baechle	PTR	sys_rt_sigreturn
399*46e12c07SRalf Baechle	PTR	sys_rt_sigaction
400*46e12c07SRalf Baechle	PTR	sys_rt_sigprocmask		/* 4195 */
401*46e12c07SRalf Baechle	PTR	sys_rt_sigpending
402*46e12c07SRalf Baechle	PTR	sys_rt_sigtimedwait
403*46e12c07SRalf Baechle	PTR	sys_rt_sigqueueinfo
404*46e12c07SRalf Baechle	PTR	sys_rt_sigsuspend
405*46e12c07SRalf Baechle	PTR	sys_pread64			/* 4200 */
406*46e12c07SRalf Baechle	PTR	sys_pwrite64
407*46e12c07SRalf Baechle	PTR	sys_chown
408*46e12c07SRalf Baechle	PTR	sys_getcwd
409*46e12c07SRalf Baechle	PTR	sys_capget
410*46e12c07SRalf Baechle	PTR	sys_capset			/* 4205 */
411*46e12c07SRalf Baechle	PTR	sys_sigaltstack
412*46e12c07SRalf Baechle	PTR	sys_sendfile
413*46e12c07SRalf Baechle	PTR	sys_ni_syscall
414*46e12c07SRalf Baechle	PTR	sys_ni_syscall
415*46e12c07SRalf Baechle	PTR	sys_mips_mmap2			/* 4210 */
416*46e12c07SRalf Baechle	PTR	sys_truncate64
417*46e12c07SRalf Baechle	PTR	sys_ftruncate64
418*46e12c07SRalf Baechle	PTR	sys_stat64
419*46e12c07SRalf Baechle	PTR	sys_lstat64
420*46e12c07SRalf Baechle	PTR	sys_fstat64			/* 4215 */
421*46e12c07SRalf Baechle	PTR	sys_pivot_root
422*46e12c07SRalf Baechle	PTR	sys_mincore
423*46e12c07SRalf Baechle	PTR	sys_madvise
424*46e12c07SRalf Baechle	PTR	sys_getdents64
425*46e12c07SRalf Baechle	PTR	sys_fcntl64			/* 4220 */
426*46e12c07SRalf Baechle	PTR	sys_ni_syscall
427*46e12c07SRalf Baechle	PTR	sys_gettid
428*46e12c07SRalf Baechle	PTR	sys_readahead
429*46e12c07SRalf Baechle	PTR	sys_setxattr
430*46e12c07SRalf Baechle	PTR	sys_lsetxattr			/* 4225 */
431*46e12c07SRalf Baechle	PTR	sys_fsetxattr
432*46e12c07SRalf Baechle	PTR	sys_getxattr
433*46e12c07SRalf Baechle	PTR	sys_lgetxattr
434*46e12c07SRalf Baechle	PTR	sys_fgetxattr
435*46e12c07SRalf Baechle	PTR	sys_listxattr			/* 4230 */
436*46e12c07SRalf Baechle	PTR	sys_llistxattr
437*46e12c07SRalf Baechle	PTR	sys_flistxattr
438*46e12c07SRalf Baechle	PTR	sys_removexattr
439*46e12c07SRalf Baechle	PTR	sys_lremovexattr
440*46e12c07SRalf Baechle	PTR	sys_fremovexattr		/* 4235 */
441*46e12c07SRalf Baechle	PTR	sys_tkill
442*46e12c07SRalf Baechle	PTR	sys_sendfile64
443*46e12c07SRalf Baechle	PTR	sys_futex
444f088fc84SRalf Baechle#ifdef CONFIG_MIPS_MT_FPAFF
445f088fc84SRalf Baechle	/*
446f088fc84SRalf Baechle	 * For FPU affinity scheduling on MIPS MT processors, we need to
447f088fc84SRalf Baechle	 * intercept sys_sched_xxxaffinity() calls until we get a proper hook
4480a0fca9dSViresh Kumar	 * in kernel/sched/core.c.  Considered only temporary we only support
4490a0fca9dSViresh Kumar	 * these hooks for the 32-bit kernel - there is no MIPS64 MT processor
4500a0fca9dSViresh Kumar	 * atm.
451f088fc84SRalf Baechle	 */
452*46e12c07SRalf Baechle	PTR	mipsmt_sys_sched_setaffinity
453*46e12c07SRalf Baechle	PTR	mipsmt_sys_sched_getaffinity
454f088fc84SRalf Baechle#else
455*46e12c07SRalf Baechle	PTR	sys_sched_setaffinity
456*46e12c07SRalf Baechle	PTR	sys_sched_getaffinity		/* 4240 */
457f088fc84SRalf Baechle#endif /* CONFIG_MIPS_MT_FPAFF */
458*46e12c07SRalf Baechle	PTR	sys_io_setup
459*46e12c07SRalf Baechle	PTR	sys_io_destroy
460*46e12c07SRalf Baechle	PTR	sys_io_getevents
461*46e12c07SRalf Baechle	PTR	sys_io_submit
462*46e12c07SRalf Baechle	PTR	sys_io_cancel			/* 4245 */
463*46e12c07SRalf Baechle	PTR	sys_exit_group
464*46e12c07SRalf Baechle	PTR	sys_lookup_dcookie
465*46e12c07SRalf Baechle	PTR	sys_epoll_create
466*46e12c07SRalf Baechle	PTR	sys_epoll_ctl
467*46e12c07SRalf Baechle	PTR	sys_epoll_wait			/* 4250 */
468*46e12c07SRalf Baechle	PTR	sys_remap_file_pages
469*46e12c07SRalf Baechle	PTR	sys_set_tid_address
470*46e12c07SRalf Baechle	PTR	sys_restart_syscall
471*46e12c07SRalf Baechle	PTR	sys_fadvise64_64
472*46e12c07SRalf Baechle	PTR	sys_statfs64			/* 4255 */
473*46e12c07SRalf Baechle	PTR	sys_fstatfs64
474*46e12c07SRalf Baechle	PTR	sys_timer_create
475*46e12c07SRalf Baechle	PTR	sys_timer_settime
476*46e12c07SRalf Baechle	PTR	sys_timer_gettime
477*46e12c07SRalf Baechle	PTR	sys_timer_getoverrun		/* 4260 */
478*46e12c07SRalf Baechle	PTR	sys_timer_delete
479*46e12c07SRalf Baechle	PTR	sys_clock_settime
480*46e12c07SRalf Baechle	PTR	sys_clock_gettime
481*46e12c07SRalf Baechle	PTR	sys_clock_getres
482*46e12c07SRalf Baechle	PTR	sys_clock_nanosleep		/* 4265 */
483*46e12c07SRalf Baechle	PTR	sys_tgkill
484*46e12c07SRalf Baechle	PTR	sys_utimes
485*46e12c07SRalf Baechle	PTR	sys_mbind
486*46e12c07SRalf Baechle	PTR	sys_ni_syscall			/* sys_get_mempolicy */
487*46e12c07SRalf Baechle	PTR	sys_ni_syscall			/* 4270 sys_set_mempolicy */
488*46e12c07SRalf Baechle	PTR	sys_mq_open
489*46e12c07SRalf Baechle	PTR	sys_mq_unlink
490*46e12c07SRalf Baechle	PTR	sys_mq_timedsend
491*46e12c07SRalf Baechle	PTR	sys_mq_timedreceive
492*46e12c07SRalf Baechle	PTR	sys_mq_notify			/* 4275 */
493*46e12c07SRalf Baechle	PTR	sys_mq_getsetattr
494*46e12c07SRalf Baechle	PTR	sys_ni_syscall			/* sys_vserver */
495*46e12c07SRalf Baechle	PTR	sys_waitid
496*46e12c07SRalf Baechle	PTR	sys_ni_syscall			/* available, was setaltroot */
497*46e12c07SRalf Baechle	PTR	sys_add_key			/* 4280 */
498*46e12c07SRalf Baechle	PTR	sys_request_key
499*46e12c07SRalf Baechle	PTR	sys_keyctl
500*46e12c07SRalf Baechle	PTR	sys_set_thread_area
501*46e12c07SRalf Baechle	PTR	sys_inotify_init
502*46e12c07SRalf Baechle	PTR	sys_inotify_add_watch		/* 4285 */
503*46e12c07SRalf Baechle	PTR	sys_inotify_rm_watch
504*46e12c07SRalf Baechle	PTR	sys_migrate_pages
505*46e12c07SRalf Baechle	PTR	sys_openat
506*46e12c07SRalf Baechle	PTR	sys_mkdirat
507*46e12c07SRalf Baechle	PTR	sys_mknodat			/* 4290 */
508*46e12c07SRalf Baechle	PTR	sys_fchownat
509*46e12c07SRalf Baechle	PTR	sys_futimesat
510*46e12c07SRalf Baechle	PTR	sys_fstatat64
511*46e12c07SRalf Baechle	PTR	sys_unlinkat
512*46e12c07SRalf Baechle	PTR	sys_renameat			/* 4295 */
513*46e12c07SRalf Baechle	PTR	sys_linkat
514*46e12c07SRalf Baechle	PTR	sys_symlinkat
515*46e12c07SRalf Baechle	PTR	sys_readlinkat
516*46e12c07SRalf Baechle	PTR	sys_fchmodat
517*46e12c07SRalf Baechle	PTR	sys_faccessat			/* 4300 */
518*46e12c07SRalf Baechle	PTR	sys_pselect6
519*46e12c07SRalf Baechle	PTR	sys_ppoll
520*46e12c07SRalf Baechle	PTR	sys_unshare
521*46e12c07SRalf Baechle	PTR	sys_splice
522*46e12c07SRalf Baechle	PTR	sys_sync_file_range		/* 4305 */
523*46e12c07SRalf Baechle	PTR	sys_tee
524*46e12c07SRalf Baechle	PTR	sys_vmsplice
525*46e12c07SRalf Baechle	PTR	sys_move_pages
526*46e12c07SRalf Baechle	PTR	sys_set_robust_list
527*46e12c07SRalf Baechle	PTR	sys_get_robust_list		/* 4310 */
528*46e12c07SRalf Baechle	PTR	sys_kexec_load
529*46e12c07SRalf Baechle	PTR	sys_getcpu
530*46e12c07SRalf Baechle	PTR	sys_epoll_pwait
531*46e12c07SRalf Baechle	PTR	sys_ioprio_set
532*46e12c07SRalf Baechle	PTR	sys_ioprio_get			/* 4315 */
533*46e12c07SRalf Baechle	PTR	sys_utimensat
534*46e12c07SRalf Baechle	PTR	sys_signalfd
535*46e12c07SRalf Baechle	PTR	sys_ni_syscall			/* was timerfd */
536*46e12c07SRalf Baechle	PTR	sys_eventfd
537*46e12c07SRalf Baechle	PTR	sys_fallocate			/* 4320 */
538*46e12c07SRalf Baechle	PTR	sys_timerfd_create
539*46e12c07SRalf Baechle	PTR	sys_timerfd_gettime
540*46e12c07SRalf Baechle	PTR	sys_timerfd_settime
541*46e12c07SRalf Baechle	PTR	sys_signalfd4
542*46e12c07SRalf Baechle	PTR	sys_eventfd2			/* 4325 */
543*46e12c07SRalf Baechle	PTR	sys_epoll_create1
544*46e12c07SRalf Baechle	PTR	sys_dup3
545*46e12c07SRalf Baechle	PTR	sys_pipe2
546*46e12c07SRalf Baechle	PTR	sys_inotify_init1
547*46e12c07SRalf Baechle	PTR	sys_preadv			/* 4330 */
548*46e12c07SRalf Baechle	PTR	sys_pwritev
549*46e12c07SRalf Baechle	PTR	sys_rt_tgsigqueueinfo
550*46e12c07SRalf Baechle	PTR	sys_perf_event_open
551*46e12c07SRalf Baechle	PTR	sys_accept4
552*46e12c07SRalf Baechle	PTR	sys_recvmmsg			/* 4335 */
553*46e12c07SRalf Baechle	PTR	sys_fanotify_init
554*46e12c07SRalf Baechle	PTR	sys_fanotify_mark
555*46e12c07SRalf Baechle	PTR	sys_prlimit64
556*46e12c07SRalf Baechle	PTR	sys_name_to_handle_at
557*46e12c07SRalf Baechle	PTR	sys_open_by_handle_at		/* 4340 */
558*46e12c07SRalf Baechle	PTR	sys_clock_adjtime
559*46e12c07SRalf Baechle	PTR	sys_syncfs
560*46e12c07SRalf Baechle	PTR	sys_sendmmsg
561*46e12c07SRalf Baechle	PTR	sys_setns
562*46e12c07SRalf Baechle	PTR	sys_process_vm_readv		/* 4345 */
563*46e12c07SRalf Baechle	PTR	sys_process_vm_writev
564*46e12c07SRalf Baechle	PTR	sys_kcmp
565*46e12c07SRalf Baechle	PTR	sys_finit_module
566