xref: /openbmc/linux/arch/mips/kernel/scall32-o32.S (revision 02f884ed46b38c5c386709b2619730ba7a8d200c)
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:
72*02f884edSAl Viro	j	syscall_exit_partial
731da177e4SLinus Torvalds
741da177e4SLinus Torvalds/* ------------------------------------------------------------------------ */
751da177e4SLinus Torvalds
761da177e4SLinus Torvaldssyscall_trace_entry:
771da177e4SLinus Torvalds	SAVE_STATIC
781da177e4SLinus Torvalds	move	s0, t2
791da177e4SLinus Torvalds	move	a0, sp
808b659a39SRalf Baechle	jal	syscall_trace_enter
811da177e4SLinus Torvalds
8204a7052cSRalf Baechle	move	t0, s0
8304a7052cSRalf Baechle	RESTORE_STATIC
841da177e4SLinus Torvalds	lw	a0, PT_R4(sp)		# Restore argument registers
851da177e4SLinus Torvalds	lw	a1, PT_R5(sp)
861da177e4SLinus Torvalds	lw	a2, PT_R6(sp)
871da177e4SLinus Torvalds	lw	a3, PT_R7(sp)
8804a7052cSRalf Baechle	jalr	t0
891da177e4SLinus Torvalds
901da177e4SLinus Torvalds	li	t0, -EMAXERRNO - 1	# error?
911da177e4SLinus Torvalds	sltu	t0, t0, v0
921da177e4SLinus Torvalds	sw	t0, PT_R7(sp)		# set error flag
931da177e4SLinus Torvalds	beqz	t0, 1f
941da177e4SLinus Torvalds
958f5a00ebSAl Viro	lw	t1, PT_R2(sp)		# syscall number
961da177e4SLinus Torvalds	negu	v0			# error
978f5a00ebSAl Viro	sw	t1, PT_R0(sp)		# save it for syscall restarting
981da177e4SLinus Torvalds1:	sw	v0, PT_R2(sp)		# result
991da177e4SLinus Torvalds
1001da177e4SLinus Torvalds	j	syscall_exit
1011da177e4SLinus Torvalds
1021da177e4SLinus Torvalds/* ------------------------------------------------------------------------ */
1031da177e4SLinus Torvalds
1041da177e4SLinus Torvalds	/*
1051da177e4SLinus Torvalds	 * More than four arguments.  Try to deal with it by copying the
1061da177e4SLinus Torvalds	 * stack arguments from the user stack to the kernel stack.
1071da177e4SLinus Torvalds	 * This Sucks (TM).
1081da177e4SLinus Torvalds	 */
1091da177e4SLinus Torvaldsstackargs:
1101da177e4SLinus Torvalds	lw	t0, PT_R29(sp)		# get old user stack pointer
1111da177e4SLinus Torvalds
1121da177e4SLinus Torvalds	/*
1131da177e4SLinus Torvalds	 * We intentionally keep the kernel stack a little below the top of
1141da177e4SLinus Torvalds	 * userspace so we don't have to do a slower byte accurate check here.
1151da177e4SLinus Torvalds	 */
1161da177e4SLinus Torvalds	lw	t5, TI_ADDR_LIMIT($28)
1171da177e4SLinus Torvalds	addu	t4, t0, 32
1181da177e4SLinus Torvalds	and	t5, t4
1191da177e4SLinus Torvalds	bltz	t5, bad_stack		# -> sp is bad
1201da177e4SLinus Torvalds
1211da177e4SLinus Torvalds	/* Ok, copy the args from the luser stack to the kernel stack.
1221da177e4SLinus Torvalds	 * t3 is the precomputed number of instruction bytes needed to
1231da177e4SLinus Torvalds	 * load or store arguments 6-8.
1241da177e4SLinus Torvalds	 */
1251da177e4SLinus Torvalds
1261da177e4SLinus Torvalds	la	t1, 5f			# load up to 3 arguments
1271da177e4SLinus Torvalds	subu	t1, t3
1281da177e4SLinus Torvalds1:	lw	t5, 16(t0)		# argument #5 from usp
1291da177e4SLinus Torvalds	.set    push
1301da177e4SLinus Torvalds	.set    noreorder
1311da177e4SLinus Torvalds	.set	nomacro
1321da177e4SLinus Torvalds	jr	t1
1331da177e4SLinus Torvalds	 addiu	t1, 6f - 5f
1341da177e4SLinus Torvalds
1351da177e4SLinus Torvalds2:	lw	t8, 28(t0)		# argument #8 from usp
1361da177e4SLinus Torvalds3:	lw	t7, 24(t0)		# argument #7 from usp
1371da177e4SLinus Torvalds4:	lw	t6, 20(t0)		# argument #6 from usp
1381da177e4SLinus Torvalds5:	jr	t1
1391da177e4SLinus Torvalds	 sw	t5, 16(sp)		# argument #5 to ksp
1401da177e4SLinus Torvalds
1411da177e4SLinus Torvalds	sw	t8, 28(sp)		# argument #8 to ksp
1421da177e4SLinus Torvalds	sw	t7, 24(sp)		# argument #7 to ksp
1431da177e4SLinus Torvalds	sw	t6, 20(sp)		# argument #6 to ksp
1441da177e4SLinus Torvalds6:	j	stack_done		# go back
1451da177e4SLinus Torvalds	 nop
1461da177e4SLinus Torvalds	.set	pop
1471da177e4SLinus Torvalds
1481da177e4SLinus Torvalds	.section __ex_table,"a"
1491da177e4SLinus Torvalds	PTR	1b,bad_stack
1501da177e4SLinus Torvalds	PTR	2b,bad_stack
1511da177e4SLinus Torvalds	PTR	3b,bad_stack
1521da177e4SLinus Torvalds	PTR	4b,bad_stack
1531da177e4SLinus Torvalds	.previous
1541da177e4SLinus Torvalds
1551da177e4SLinus Torvalds	/*
1561da177e4SLinus Torvalds	 * The stackpointer for a call with more than 4 arguments is bad.
1571da177e4SLinus Torvalds	 * We probably should handle this case a bit more drastic.
1581da177e4SLinus Torvalds	 */
1591da177e4SLinus Torvaldsbad_stack:
1605b89c004SAl Viro	li	v0, EFAULT
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
1661da177e4SLinus Torvalds	/*
1671da177e4SLinus Torvalds	 * The system call does not exist in this kernel
1681da177e4SLinus Torvalds	 */
1691da177e4SLinus Torvaldsillegal_syscall:
170bda8229bSAtsushi Nemoto	li	v0, ENOSYS			# error
1711da177e4SLinus Torvalds	sw	v0, PT_R2(sp)
1721da177e4SLinus Torvalds	li	t0, 1				# set error flag
1731da177e4SLinus Torvalds	sw	t0, PT_R7(sp)
1741da177e4SLinus Torvalds	j	o32_syscall_exit
1751da177e4SLinus Torvalds	END(handle_sys)
1761da177e4SLinus Torvalds
1771da177e4SLinus Torvalds	LEAF(sys_syscall)
1781da177e4SLinus Torvalds	subu	t0, a0, __NR_O32_Linux	# check syscall number
1791da177e4SLinus Torvalds	sltiu	v0, t0, __NR_O32_Linux_syscalls + 1
180e807f957SVlad Malov	beqz	t0, einval		# do not recurse
1811da177e4SLinus Torvalds	sll	t1, t0, 3
1821da177e4SLinus Torvalds	beqz	v0, einval
1831da177e4SLinus Torvalds	lw	t2, sys_call_table(t1)		# syscall routine
1841da177e4SLinus Torvalds
1851da177e4SLinus Torvalds	/* Some syscalls like execve get their arguments from struct pt_regs
1861da177e4SLinus Torvalds	   and claim zero arguments in the syscall table. Thus we have to
1871da177e4SLinus Torvalds	   assume the worst case and shuffle around all potential arguments.
1881da177e4SLinus Torvalds	   If you want performance, don't use indirect syscalls. */
1891da177e4SLinus Torvalds
1901da177e4SLinus Torvalds	move	a0, a1				# shift argument registers
1911da177e4SLinus Torvalds	move	a1, a2
1921da177e4SLinus Torvalds	move	a2, a3
1931da177e4SLinus Torvalds	lw	a3, 16(sp)
1941da177e4SLinus Torvalds	lw	t4, 20(sp)
1951da177e4SLinus Torvalds	lw	t5, 24(sp)
1961da177e4SLinus Torvalds	lw	t6, 28(sp)
1971da177e4SLinus Torvalds	sw	t4, 16(sp)
1981da177e4SLinus Torvalds	sw	t5, 20(sp)
1991da177e4SLinus Torvalds	sw	t6, 24(sp)
2001da177e4SLinus Torvalds	sw	a0, PT_R4(sp)			# .. and push back a0 - a3, some
2011da177e4SLinus Torvalds	sw	a1, PT_R5(sp)			# syscalls expect them there
2021da177e4SLinus Torvalds	sw	a2, PT_R6(sp)
2031da177e4SLinus Torvalds	sw	a3, PT_R7(sp)
2041da177e4SLinus Torvalds	sw	a3, PT_R26(sp)			# update a3 for syscall restarting
2051da177e4SLinus Torvalds	jr	t2
2061da177e4SLinus Torvalds	/* Unreached */
2071da177e4SLinus Torvalds
208fb498e25SAtsushi Nemotoeinval:	li	v0, -ENOSYS
2091da177e4SLinus Torvalds	jr	ra
2101da177e4SLinus Torvalds	END(sys_syscall)
2111da177e4SLinus Torvalds
2121da177e4SLinus Torvalds	.macro	fifty ptr, nargs, from=1, to=50
2131da177e4SLinus Torvalds	sys	\ptr		\nargs
2141da177e4SLinus Torvalds	.if	\to-\from
2151da177e4SLinus Torvalds	fifty	\ptr,\nargs,"(\from+1)",\to
2161da177e4SLinus Torvalds	.endif
2171da177e4SLinus Torvalds	.endm
2181da177e4SLinus Torvalds
2191da177e4SLinus Torvalds	.macro	mille ptr, nargs, from=1, to=20
2201da177e4SLinus Torvalds	fifty	\ptr,\nargs
2211da177e4SLinus Torvalds	.if	\to-\from
2221da177e4SLinus Torvalds	mille	\ptr,\nargs,"(\from+1)",\to
2231da177e4SLinus Torvalds	.endif
2241da177e4SLinus Torvalds	.endm
2251da177e4SLinus Torvalds
2261da177e4SLinus Torvalds	.macro	syscalltable
2271da177e4SLinus Torvalds	sys	sys_syscall		8	/* 4000 */
2281da177e4SLinus Torvalds	sys	sys_exit		1
2291da177e4SLinus Torvalds	sys	sys_fork		0
2301da177e4SLinus Torvalds	sys	sys_read		3
2311da177e4SLinus Torvalds	sys	sys_write		3
2321da177e4SLinus Torvalds	sys	sys_open		3	/* 4005 */
2331da177e4SLinus Torvalds	sys	sys_close		1
2341da177e4SLinus Torvalds	sys	sys_waitpid		3
2351da177e4SLinus Torvalds	sys	sys_creat		2
2361da177e4SLinus Torvalds	sys	sys_link		2
2371da177e4SLinus Torvalds	sys	sys_unlink		1	/* 4010 */
2381da177e4SLinus Torvalds	sys	sys_execve		0
2391da177e4SLinus Torvalds	sys	sys_chdir		1
2401da177e4SLinus Torvalds	sys	sys_time		1
2411da177e4SLinus Torvalds	sys	sys_mknod		3
2421da177e4SLinus Torvalds	sys	sys_chmod		2	/* 4015 */
2431da177e4SLinus Torvalds	sys	sys_lchown		3
2441da177e4SLinus Torvalds	sys	sys_ni_syscall		0
2451da177e4SLinus Torvalds	sys	sys_ni_syscall		0	/* was sys_stat */
2461da177e4SLinus Torvalds	sys	sys_lseek		3
2471da177e4SLinus Torvalds	sys	sys_getpid		0	/* 4020 */
2481da177e4SLinus Torvalds	sys	sys_mount		5
2491da177e4SLinus Torvalds	sys	sys_oldumount		1
2501da177e4SLinus Torvalds	sys	sys_setuid		1
2511da177e4SLinus Torvalds	sys	sys_getuid		0
2521da177e4SLinus Torvalds	sys	sys_stime		1	/* 4025 */
2531da177e4SLinus Torvalds	sys	sys_ptrace		4
2541da177e4SLinus Torvalds	sys	sys_alarm		1
2551da177e4SLinus Torvalds	sys	sys_ni_syscall		0	/* was sys_fstat */
2561da177e4SLinus Torvalds	sys	sys_pause		0
2571da177e4SLinus Torvalds	sys	sys_utime		2	/* 4030 */
2581da177e4SLinus Torvalds	sys	sys_ni_syscall		0
2591da177e4SLinus Torvalds	sys	sys_ni_syscall		0
2601da177e4SLinus Torvalds	sys	sys_access		2
2611da177e4SLinus Torvalds	sys	sys_nice		1
2621da177e4SLinus Torvalds	sys	sys_ni_syscall		0	/* 4035 */
2631da177e4SLinus Torvalds	sys	sys_sync		0
2641da177e4SLinus Torvalds	sys	sys_kill		2
2651da177e4SLinus Torvalds	sys	sys_rename		2
2661da177e4SLinus Torvalds	sys	sys_mkdir		2
2671da177e4SLinus Torvalds	sys	sys_rmdir		1	/* 4040 */
2681da177e4SLinus Torvalds	sys	sys_dup			1
2698213bbf9SRalf Baechle	sys	sysm_pipe		0
2701da177e4SLinus Torvalds	sys	sys_times		1
2711da177e4SLinus Torvalds	sys	sys_ni_syscall		0
2721da177e4SLinus Torvalds	sys	sys_brk			1	/* 4045 */
2731da177e4SLinus Torvalds	sys	sys_setgid		1
2741da177e4SLinus Torvalds	sys	sys_getgid		0
2751da177e4SLinus Torvalds	sys	sys_ni_syscall		0	/* was signal(2) */
2761da177e4SLinus Torvalds	sys	sys_geteuid		0
2771da177e4SLinus Torvalds	sys	sys_getegid		0	/* 4050 */
2781da177e4SLinus Torvalds	sys	sys_acct		1
2791da177e4SLinus Torvalds	sys	sys_umount		2
2801da177e4SLinus Torvalds	sys	sys_ni_syscall		0
2811da177e4SLinus Torvalds	sys	sys_ioctl		3
2821da177e4SLinus Torvalds	sys	sys_fcntl		3	/* 4055 */
2831da177e4SLinus Torvalds	sys	sys_ni_syscall		2
2841da177e4SLinus Torvalds	sys	sys_setpgid		2
2851da177e4SLinus Torvalds	sys	sys_ni_syscall		0
2861da177e4SLinus Torvalds	sys	sys_olduname		1
2871da177e4SLinus Torvalds	sys	sys_umask		1	/* 4060 */
2881da177e4SLinus Torvalds	sys	sys_chroot		1
2891da177e4SLinus Torvalds	sys	sys_ustat		2
2901da177e4SLinus Torvalds	sys	sys_dup2		2
2911da177e4SLinus Torvalds	sys	sys_getppid		0
2921da177e4SLinus Torvalds	sys	sys_getpgrp		0	/* 4065 */
2931da177e4SLinus Torvalds	sys	sys_setsid		0
2941da177e4SLinus Torvalds	sys	sys_sigaction		3
2951da177e4SLinus Torvalds	sys	sys_sgetmask		0
2961da177e4SLinus Torvalds	sys	sys_ssetmask		1
2971da177e4SLinus Torvalds	sys	sys_setreuid		2	/* 4070 */
2981da177e4SLinus Torvalds	sys	sys_setregid		2
2991da177e4SLinus Torvalds	sys	sys_sigsuspend		0
3001da177e4SLinus Torvalds	sys	sys_sigpending		1
3011da177e4SLinus Torvalds	sys	sys_sethostname		2
3021da177e4SLinus Torvalds	sys	sys_setrlimit		2	/* 4075 */
3031da177e4SLinus Torvalds	sys	sys_getrlimit		2
3041da177e4SLinus Torvalds	sys	sys_getrusage		2
3051da177e4SLinus Torvalds	sys	sys_gettimeofday	2
3061da177e4SLinus Torvalds	sys	sys_settimeofday	2
3071da177e4SLinus Torvalds	sys	sys_getgroups		2	/* 4080 */
3081da177e4SLinus Torvalds	sys	sys_setgroups		2
3091da177e4SLinus Torvalds	sys	sys_ni_syscall		0	/* old_select */
3101da177e4SLinus Torvalds	sys	sys_symlink		2
3111da177e4SLinus Torvalds	sys	sys_ni_syscall		0	/* was sys_lstat */
3121da177e4SLinus Torvalds	sys	sys_readlink		3	/* 4085 */
3131da177e4SLinus Torvalds	sys	sys_uselib		1
3141da177e4SLinus Torvalds	sys	sys_swapon		2
3151da177e4SLinus Torvalds	sys	sys_reboot		3
316e55380edSHeiko Carstens	sys	sys_old_readdir		3
317dbda6ac0SRalf Baechle	sys	sys_mips_mmap		6	/* 4090 */
3181da177e4SLinus Torvalds	sys	sys_munmap		2
3191da177e4SLinus Torvalds	sys	sys_truncate		2
3201da177e4SLinus Torvalds	sys	sys_ftruncate		2
3211da177e4SLinus Torvalds	sys	sys_fchmod		2
3221da177e4SLinus Torvalds	sys	sys_fchown		3	/* 4095 */
3231da177e4SLinus Torvalds	sys	sys_getpriority		2
3241da177e4SLinus Torvalds	sys	sys_setpriority		3
3251da177e4SLinus Torvalds	sys	sys_ni_syscall		0
3261da177e4SLinus Torvalds	sys	sys_statfs		2
3271da177e4SLinus Torvalds	sys	sys_fstatfs		2	/* 4100 */
3281da177e4SLinus Torvalds	sys	sys_ni_syscall		0	/* was ioperm(2) */
3291da177e4SLinus Torvalds	sys	sys_socketcall		2
3301da177e4SLinus Torvalds	sys	sys_syslog		3
3311da177e4SLinus Torvalds	sys	sys_setitimer		3
3321da177e4SLinus Torvalds	sys	sys_getitimer		2	/* 4105 */
3331da177e4SLinus Torvalds	sys	sys_newstat		2
3341da177e4SLinus Torvalds	sys	sys_newlstat		2
3351da177e4SLinus Torvalds	sys	sys_newfstat		2
3361da177e4SLinus Torvalds	sys	sys_uname		1
3371da177e4SLinus Torvalds	sys	sys_ni_syscall		0	/* 4110 was iopl(2) */
3381da177e4SLinus Torvalds	sys	sys_vhangup		0
3391da177e4SLinus Torvalds	sys	sys_ni_syscall		0	/* was sys_idle() */
3401da177e4SLinus Torvalds	sys	sys_ni_syscall		0	/* was sys_vm86 */
3411da177e4SLinus Torvalds	sys	sys_wait4		4
3421da177e4SLinus Torvalds	sys	sys_swapoff		1	/* 4115 */
3431da177e4SLinus Torvalds	sys	sys_sysinfo		1
3441da177e4SLinus Torvalds	sys	sys_ipc			6
3451da177e4SLinus Torvalds	sys	sys_fsync		1
3461da177e4SLinus Torvalds	sys	sys_sigreturn		0
3471da177e4SLinus Torvalds	sys	sys_clone		0	/* 4120 */
3481da177e4SLinus Torvalds	sys	sys_setdomainname	2
3491da177e4SLinus Torvalds	sys	sys_newuname		1
3501da177e4SLinus Torvalds	sys	sys_ni_syscall		0	/* sys_modify_ldt */
3511da177e4SLinus Torvalds	sys	sys_adjtimex		1
3521da177e4SLinus Torvalds	sys	sys_mprotect		3	/* 4125 */
3531da177e4SLinus Torvalds	sys	sys_sigprocmask		3
3541da177e4SLinus Torvalds	sys	sys_ni_syscall		0	/* was create_module */
3551da177e4SLinus Torvalds	sys	sys_init_module		5
3561da177e4SLinus Torvalds	sys	sys_delete_module	1
3571da177e4SLinus Torvalds	sys	sys_ni_syscall		0	/* 4130	was get_kernel_syms */
3581da177e4SLinus Torvalds	sys	sys_quotactl		4
3591da177e4SLinus Torvalds	sys	sys_getpgid		1
3601da177e4SLinus Torvalds	sys	sys_fchdir		1
3611da177e4SLinus Torvalds	sys	sys_bdflush		2
3621da177e4SLinus Torvalds	sys	sys_sysfs		3	/* 4135 */
3631da177e4SLinus Torvalds	sys	sys_personality		1
3641da177e4SLinus Torvalds	sys	sys_ni_syscall		0	/* for afs_syscall */
3651da177e4SLinus Torvalds	sys	sys_setfsuid		1
3661da177e4SLinus Torvalds	sys	sys_setfsgid		1
3671da177e4SLinus Torvalds	sys	sys_llseek		5	/* 4140 */
3681da177e4SLinus Torvalds	sys	sys_getdents		3
3691da177e4SLinus Torvalds	sys	sys_select		5
3701da177e4SLinus Torvalds	sys	sys_flock		2
3711da177e4SLinus Torvalds	sys	sys_msync		3
3721da177e4SLinus Torvalds	sys	sys_readv		3	/* 4145 */
3731da177e4SLinus Torvalds	sys	sys_writev		3
3741da177e4SLinus Torvalds	sys	sys_cacheflush		3
3751da177e4SLinus Torvalds	sys	sys_cachectl		3
3761da177e4SLinus Torvalds	sys	sys_sysmips		4
3771da177e4SLinus Torvalds	sys	sys_ni_syscall		0	/* 4150 */
3781da177e4SLinus Torvalds	sys	sys_getsid		1
3791da177e4SLinus Torvalds	sys	sys_fdatasync		1
3801da177e4SLinus Torvalds	sys	sys_sysctl		1
3811da177e4SLinus Torvalds	sys	sys_mlock		2
3821da177e4SLinus Torvalds	sys	sys_munlock		2	/* 4155 */
3831da177e4SLinus Torvalds	sys	sys_mlockall		1
3841da177e4SLinus Torvalds	sys	sys_munlockall		0
3851da177e4SLinus Torvalds	sys	sys_sched_setparam	2
3861da177e4SLinus Torvalds	sys	sys_sched_getparam	2
3871da177e4SLinus Torvalds	sys	sys_sched_setscheduler	3	/* 4160 */
3881da177e4SLinus Torvalds	sys	sys_sched_getscheduler	1
3891da177e4SLinus Torvalds	sys	sys_sched_yield		0
3901da177e4SLinus Torvalds	sys	sys_sched_get_priority_max 1
3911da177e4SLinus Torvalds	sys	sys_sched_get_priority_min 1
3921da177e4SLinus Torvalds	sys	sys_sched_rr_get_interval 2	/* 4165 */
3931da177e4SLinus Torvalds	sys	sys_nanosleep,		2
3947dbdf43cSYoichi Yuasa	sys	sys_mremap,		5
3951da177e4SLinus Torvalds	sys	sys_accept		3
3961da177e4SLinus Torvalds	sys	sys_bind		3
3971da177e4SLinus Torvalds	sys	sys_connect		3	/* 4170 */
3981da177e4SLinus Torvalds	sys	sys_getpeername		3
3991da177e4SLinus Torvalds	sys	sys_getsockname		3
4001da177e4SLinus Torvalds	sys	sys_getsockopt		5
4011da177e4SLinus Torvalds	sys	sys_listen		2
4021da177e4SLinus Torvalds	sys	sys_recv		4	/* 4175 */
4031da177e4SLinus Torvalds	sys	sys_recvfrom		6
4041da177e4SLinus Torvalds	sys	sys_recvmsg		3
4051da177e4SLinus Torvalds	sys	sys_send		4
4061da177e4SLinus Torvalds	sys	sys_sendmsg		3
4071da177e4SLinus Torvalds	sys	sys_sendto		6	/* 4180 */
4081da177e4SLinus Torvalds	sys	sys_setsockopt		5
4091da177e4SLinus Torvalds	sys	sys_shutdown		2
4101da177e4SLinus Torvalds	sys	sys_socket		3
4111da177e4SLinus Torvalds	sys	sys_socketpair		4
4121da177e4SLinus Torvalds	sys	sys_setresuid		3	/* 4185 */
4131da177e4SLinus Torvalds	sys	sys_getresuid		3
4141da177e4SLinus Torvalds	sys	sys_ni_syscall		0	/* was sys_query_module */
4151da177e4SLinus Torvalds	sys	sys_poll		3
416f5b94099SNeilBrown	sys	sys_ni_syscall		0	/* was nfsservctl */
4171da177e4SLinus Torvalds	sys	sys_setresgid		3	/* 4190 */
4181da177e4SLinus Torvalds	sys	sys_getresgid		3
4191da177e4SLinus Torvalds	sys	sys_prctl		5
4201da177e4SLinus Torvalds	sys	sys_rt_sigreturn	0
4211da177e4SLinus Torvalds	sys	sys_rt_sigaction	4
4221da177e4SLinus Torvalds	sys	sys_rt_sigprocmask	4	/* 4195 */
4231da177e4SLinus Torvalds	sys	sys_rt_sigpending	2
4241da177e4SLinus Torvalds	sys	sys_rt_sigtimedwait	4
4251da177e4SLinus Torvalds	sys	sys_rt_sigqueueinfo	3
4261da177e4SLinus Torvalds	sys	sys_rt_sigsuspend	0
4271da177e4SLinus Torvalds	sys	sys_pread64		6	/* 4200 */
4281da177e4SLinus Torvalds	sys	sys_pwrite64		6
4291da177e4SLinus Torvalds	sys	sys_chown		3
4301da177e4SLinus Torvalds	sys	sys_getcwd		2
4311da177e4SLinus Torvalds	sys	sys_capget		2
4321da177e4SLinus Torvalds	sys	sys_capset		2	/* 4205 */
4331da177e4SLinus Torvalds	sys	sys_sigaltstack		0
4341da177e4SLinus Torvalds	sys	sys_sendfile		4
4351da177e4SLinus Torvalds	sys	sys_ni_syscall		0
4361da177e4SLinus Torvalds	sys	sys_ni_syscall		0
437dbda6ac0SRalf Baechle	sys	sys_mips_mmap2		6	/* 4210 */
4381da177e4SLinus Torvalds	sys	sys_truncate64		4
4391da177e4SLinus Torvalds	sys	sys_ftruncate64		4
4401da177e4SLinus Torvalds	sys	sys_stat64		2
4411da177e4SLinus Torvalds	sys	sys_lstat64		2
4421da177e4SLinus Torvalds	sys	sys_fstat64		2	/* 4215 */
4431da177e4SLinus Torvalds	sys	sys_pivot_root		2
4441da177e4SLinus Torvalds	sys	sys_mincore		3
4451da177e4SLinus Torvalds	sys	sys_madvise		3
4461da177e4SLinus Torvalds	sys	sys_getdents64		3
4471da177e4SLinus Torvalds	sys	sys_fcntl64		3	/* 4220 */
4481da177e4SLinus Torvalds	sys	sys_ni_syscall		0
4491da177e4SLinus Torvalds	sys	sys_gettid		0
4501da177e4SLinus Torvalds	sys	sys_readahead		5
4511da177e4SLinus Torvalds	sys	sys_setxattr		5
4521da177e4SLinus Torvalds	sys	sys_lsetxattr		5	/* 4225 */
4531da177e4SLinus Torvalds	sys	sys_fsetxattr		5
4541da177e4SLinus Torvalds	sys	sys_getxattr		4
4551da177e4SLinus Torvalds	sys	sys_lgetxattr		4
4561da177e4SLinus Torvalds	sys	sys_fgetxattr		4
4571da177e4SLinus Torvalds	sys	sys_listxattr		3	/* 4230 */
4581da177e4SLinus Torvalds	sys	sys_llistxattr		3
4591da177e4SLinus Torvalds	sys	sys_flistxattr		3
4601da177e4SLinus Torvalds	sys	sys_removexattr		2
4611da177e4SLinus Torvalds	sys	sys_lremovexattr	2
4621da177e4SLinus Torvalds	sys	sys_fremovexattr	2	/* 4235 */
4631da177e4SLinus Torvalds	sys	sys_tkill		2
4641da177e4SLinus Torvalds	sys	sys_sendfile64		5
46590a67b59SThiemo Seufer	sys	sys_futex		6
466f088fc84SRalf Baechle#ifdef CONFIG_MIPS_MT_FPAFF
467f088fc84SRalf Baechle	/*
468f088fc84SRalf Baechle	 * For FPU affinity scheduling on MIPS MT processors, we need to
469f088fc84SRalf Baechle	 * intercept sys_sched_xxxaffinity() calls until we get a proper hook
470f088fc84SRalf Baechle	 * in kernel/sched.c.  Considered only temporary we only support these
471f088fc84SRalf Baechle	 * hooks for the 32-bit kernel - there is no MIPS64 MT processor atm.
472f088fc84SRalf Baechle	 */
473f088fc84SRalf Baechle	sys	mipsmt_sys_sched_setaffinity	3
474f088fc84SRalf Baechle	sys	mipsmt_sys_sched_getaffinity	3
475f088fc84SRalf Baechle#else
4761da177e4SLinus Torvalds	sys	sys_sched_setaffinity	3
4771da177e4SLinus Torvalds	sys	sys_sched_getaffinity	3	/* 4240 */
478f088fc84SRalf Baechle#endif /* CONFIG_MIPS_MT_FPAFF */
4791da177e4SLinus Torvalds	sys	sys_io_setup		2
4801da177e4SLinus Torvalds	sys	sys_io_destroy		1
4811da177e4SLinus Torvalds	sys	sys_io_getevents	5
4821da177e4SLinus Torvalds	sys	sys_io_submit		3
4831da177e4SLinus Torvalds	sys	sys_io_cancel		3	/* 4245 */
4841da177e4SLinus Torvalds	sys	sys_exit_group		1
4850d507d61SRalf Baechle	sys	sys_lookup_dcookie	4
4861da177e4SLinus Torvalds	sys	sys_epoll_create	1
4871da177e4SLinus Torvalds	sys	sys_epoll_ctl		4
4885db6acdbSRalf Baechle	sys	sys_epoll_wait		4	/* 4250 */
4891da177e4SLinus Torvalds	sys	sys_remap_file_pages	5
4901da177e4SLinus Torvalds	sys	sys_set_tid_address	1
4911da177e4SLinus Torvalds	sys	sys_restart_syscall	0
4921da177e4SLinus Torvalds	sys	sys_fadvise64_64	7
4931da177e4SLinus Torvalds	sys	sys_statfs64		3	/* 4255 */
4941da177e4SLinus Torvalds	sys	sys_fstatfs64		2
4951da177e4SLinus Torvalds	sys	sys_timer_create	3
4961da177e4SLinus Torvalds	sys	sys_timer_settime	4
4971da177e4SLinus Torvalds	sys	sys_timer_gettime	2
4981da177e4SLinus Torvalds	sys	sys_timer_getoverrun	1	/* 4260 */
4991da177e4SLinus Torvalds	sys	sys_timer_delete	1
5001da177e4SLinus Torvalds	sys	sys_clock_settime	2
5011da177e4SLinus Torvalds	sys	sys_clock_gettime	2
5021da177e4SLinus Torvalds	sys	sys_clock_getres	2
5031da177e4SLinus Torvalds	sys	sys_clock_nanosleep	4	/* 4265 */
5041da177e4SLinus Torvalds	sys	sys_tgkill		3
5051da177e4SLinus Torvalds	sys	sys_utimes		2
5061da177e4SLinus Torvalds	sys	sys_mbind		4
5071da177e4SLinus Torvalds	sys	sys_ni_syscall		0	/* sys_get_mempolicy */
5081da177e4SLinus Torvalds	sys	sys_ni_syscall		0	/* 4270 sys_set_mempolicy */
5091da177e4SLinus Torvalds	sys	sys_mq_open		4
5101da177e4SLinus Torvalds	sys	sys_mq_unlink		1
5111da177e4SLinus Torvalds	sys	sys_mq_timedsend	5
5121da177e4SLinus Torvalds	sys	sys_mq_timedreceive	5
5131da177e4SLinus Torvalds	sys	sys_mq_notify		2	/* 4275 */
5141da177e4SLinus Torvalds	sys	sys_mq_getsetattr	3
5151da177e4SLinus Torvalds	sys	sys_ni_syscall		0	/* sys_vserver */
516a19050f3SRalf Baechle	sys	sys_waitid		5
5171da177e4SLinus Torvalds	sys	sys_ni_syscall		0	/* available, was setaltroot */
518e50c0a8fSRalf Baechle	sys	sys_add_key		5	/* 4280 */
5191da177e4SLinus Torvalds	sys	sys_request_key		4
5201da177e4SLinus Torvalds	sys	sys_keyctl		5
5213c37026dSRalf Baechle	sys	sys_set_thread_area	1
5227db36c85SRalf Baechle	sys	sys_inotify_init	0
5237db36c85SRalf Baechle	sys	sys_inotify_add_watch	3	/* 4285 */
5247db36c85SRalf Baechle	sys	sys_inotify_rm_watch	2
52572bf8914SRalf Baechle	sys	sys_migrate_pages	4
52672bf8914SRalf Baechle	sys	sys_openat		4
52772bf8914SRalf Baechle	sys	sys_mkdirat		3
52872bf8914SRalf Baechle	sys	sys_mknodat		4	/* 4290 */
52972bf8914SRalf Baechle	sys	sys_fchownat		5
53072bf8914SRalf Baechle	sys	sys_futimesat		3
531326a6257SYoichi Yuasa	sys	sys_fstatat64		4
53272bf8914SRalf Baechle	sys	sys_unlinkat		3
53372bf8914SRalf Baechle	sys	sys_renameat		4	/* 4295 */
534c04030e1SUlrich Drepper	sys	sys_linkat		5
53572bf8914SRalf Baechle	sys	sys_symlinkat		3
53672bf8914SRalf Baechle	sys	sys_readlinkat		4
53772bf8914SRalf Baechle	sys	sys_fchmodat		3
53872bf8914SRalf Baechle	sys	sys_faccessat		3	/* 4300 */
53972bf8914SRalf Baechle	sys	sys_pselect6		6
54072bf8914SRalf Baechle	sys	sys_ppoll		5
54172bf8914SRalf Baechle	sys	sys_unshare		1
54208d30879SRalf Baechle	sys	sys_splice		6
543a8d587a7SRalf Baechle	sys	sys_sync_file_range	7	/* 4305 */
544136d47d3SRalf Baechle	sys	sys_tee			4
545722cfd90SRalf Baechle	sys	sys_vmsplice		4
546722cfd90SRalf Baechle	sys	sys_move_pages		6
5477fdeb048SAtsushi Nemoto	sys	sys_set_robust_list	2
548d2bcf87dSRalf Baechle	sys	sys_get_robust_list	3	/* 4310 */
549583bb86fSNicolas Schichan	sys	sys_kexec_load		4
550991ea26dSRalf Baechle	sys	sys_getcpu		3
551991ea26dSRalf Baechle	sys	sys_epoll_pwait		6
55208253b39SRalf Baechle	sys	sys_ioprio_set		3
5537a6d4f38SAtsushi Nemoto	sys	sys_ioprio_get		2	/* 4315 */
5547a6d4f38SAtsushi Nemoto	sys	sys_utimensat		4
5557a6d4f38SAtsushi Nemoto	sys	sys_signalfd		3
5568bdd5142SRalf Baechle	sys	sys_ni_syscall		0	/* was timerfd */
5577a6d4f38SAtsushi Nemoto	sys	sys_eventfd		1
5584dc46775SRalf Baechle	sys	sys_fallocate		6	/* 4320 */
5596783fe62SDmitri Vorobiev	sys	sys_timerfd_create	2
5606783fe62SDmitri Vorobiev	sys	sys_timerfd_gettime	2
5616783fe62SDmitri Vorobiev	sys	sys_timerfd_settime	4
5623885b71bSRalf Baechle	sys	sys_signalfd4		4
5633885b71bSRalf Baechle	sys	sys_eventfd2		2	/* 4325 */
5643885b71bSRalf Baechle	sys	sys_epoll_create1	1
5653885b71bSRalf Baechle	sys	sys_dup3		3
5663885b71bSRalf Baechle	sys	sys_pipe2		2
5673885b71bSRalf Baechle	sys	sys_inotify_init1	1
568ddd9e91bSRalf Baechle	sys	sys_preadv		6	/* 4330 */
569ddd9e91bSRalf Baechle	sys	sys_pwritev		6
57069f16c9aSDavid Daney	sys	sys_rt_tgsigqueueinfo	4
571cdd6c482SIngo Molnar	sys	sys_perf_event_open	5
57254822de7SRalf Baechle	sys	sys_accept4		4
5735e844b31SDavid Daney	sys	sys_recvmmsg		5	/* 4335 */
5745e844b31SDavid Daney	sys	sys_fanotify_init	2
5755e844b31SDavid Daney	sys	sys_fanotify_mark	6
5765e844b31SDavid Daney	sys	sys_prlimit64		4
57784ed9432SDavid Daney	sys	sys_name_to_handle_at	5
57884ed9432SDavid Daney	sys	sys_open_by_handle_at	3	/* 4340 */
57984ed9432SDavid Daney	sys	sys_clock_adjtime	2
5801bbf2875SRalf Baechle	sys	sys_syncfs		1
581b12acf16SRalf Baechle	sys	sys_sendmmsg		4
5827b21fdddSEric W. Biederman	sys	sys_setns		2
5838ff8584eSDavid Daney	sys	sys_process_vm_readv	6	/* 4345 */
5848ff8584eSDavid Daney	sys	sys_process_vm_writev	6
5851da177e4SLinus Torvalds	.endm
5861da177e4SLinus Torvalds
5871da177e4SLinus Torvalds	/* We pre-compute the number of _instruction_ bytes needed to
5881da177e4SLinus Torvalds	   load or store the arguments 6-8. Negative values are ignored. */
5891da177e4SLinus Torvalds
5901da177e4SLinus Torvalds	.macro  sys function, nargs
5911da177e4SLinus Torvalds	PTR	\function
5921da177e4SLinus Torvalds	LONG	(\nargs << 2) - (5 << 2)
5931da177e4SLinus Torvalds	.endm
5941da177e4SLinus Torvalds
5951da177e4SLinus Torvalds	.align	3
5961da177e4SLinus Torvalds	.type	sys_call_table,@object
5971da177e4SLinus TorvaldsEXPORT(sys_call_table)
5981da177e4SLinus Torvalds	syscalltable
5991da177e4SLinus Torvalds	.size	sys_call_table, . - sys_call_table
600