| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* | 
 | 2 |  * This file is subject to the terms and conditions of the GNU General Public | 
 | 3 |  * License.  See the file "COPYING" in the main directory of this archive | 
 | 4 |  * for more details. | 
 | 5 |  * | 
| Ralf Baechle | 192ef36 | 2006-07-07 14:07:18 +0100 | [diff] [blame] | 6 |  * Copyright (C) 1995-99, 2000- 02, 06 Ralf Baechle <ralf@linux-mips.org> | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 7 |  * Copyright (C) 2001 MIPS Technologies, Inc. | 
 | 8 |  * Copyright (C) 2004 Thiemo Seufer | 
 | 9 |  */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 10 | #include <linux/errno.h> | 
 | 11 | #include <asm/asm.h> | 
 | 12 | #include <asm/asmmacro.h> | 
| Ralf Baechle | 192ef36 | 2006-07-07 14:07:18 +0100 | [diff] [blame] | 13 | #include <asm/irqflags.h> | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 14 | #include <asm/mipsregs.h> | 
 | 15 | #include <asm/regdef.h> | 
 | 16 | #include <asm/stackframe.h> | 
 | 17 | #include <asm/isadep.h> | 
 | 18 | #include <asm/sysmips.h> | 
 | 19 | #include <asm/thread_info.h> | 
 | 20 | #include <asm/unistd.h> | 
 | 21 | #include <asm/war.h> | 
| Sam Ravnborg | 048eb58 | 2005-09-09 22:32:31 +0200 | [diff] [blame] | 22 | #include <asm/asm-offsets.h> | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 23 |  | 
 | 24 | /* Highest syscall used of any syscall flavour */ | 
 | 25 | #define MAX_SYSCALL_NO	__NR_O32_Linux + __NR_O32_Linux_syscalls | 
 | 26 |  | 
 | 27 | 	.align  5 | 
 | 28 | NESTED(handle_sys, PT_SIZE, sp) | 
 | 29 | 	.set	noat | 
 | 30 | 	SAVE_SOME | 
| Atsushi Nemoto | eae6c0d | 2006-09-26 23:43:40 +0900 | [diff] [blame] | 31 | 	TRACE_IRQS_ON_RELOAD | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 32 | 	STI | 
 | 33 | 	.set	at | 
 | 34 |  | 
 | 35 | 	lw	t1, PT_EPC(sp)		# skip syscall on return | 
 | 36 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 37 | 	subu	v0, v0, __NR_O32_Linux	# check syscall number | 
 | 38 | 	sltiu	t0, v0, __NR_O32_Linux_syscalls + 1 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 39 | 	addiu	t1, 4			# skip to next instruction | 
 | 40 | 	sw	t1, PT_EPC(sp) | 
 | 41 | 	beqz	t0, illegal_syscall | 
 | 42 |  | 
 | 43 | 	sll	t0, v0, 3 | 
 | 44 | 	la	t1, sys_call_table | 
 | 45 | 	addu	t1, t0 | 
 | 46 | 	lw	t2, (t1)		# syscall routine | 
 | 47 | 	lw	t3, 4(t1)		# >= 0 if we need stack arguments | 
 | 48 | 	beqz	t2, illegal_syscall | 
 | 49 |  | 
 | 50 | 	sw	a3, PT_R26(sp)		# save a3 for syscall restarting | 
 | 51 | 	bgez	t3, stackargs | 
 | 52 |  | 
 | 53 | stack_done: | 
 | 54 | 	lw	t0, TI_FLAGS($28)	# syscall tracing enabled? | 
 | 55 | 	li	t1, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | 
 | 56 | 	and	t0, t1 | 
 | 57 | 	bnez	t0, syscall_trace_entry	# -> yes | 
 | 58 |  | 
 | 59 | 	jalr	t2			# Do The Real Thing (TM) | 
 | 60 |  | 
 | 61 | 	li	t0, -EMAXERRNO - 1	# error? | 
 | 62 | 	sltu	t0, t0, v0 | 
 | 63 | 	sw	t0, PT_R7(sp)		# set error flag | 
 | 64 | 	beqz	t0, 1f | 
 | 65 |  | 
 | 66 | 	negu	v0			# error | 
 | 67 | 	sw	v0, PT_R0(sp)		# set flag for syscall | 
 | 68 | 					# restarting | 
 | 69 | 1:	sw	v0, PT_R2(sp)		# result | 
 | 70 |  | 
 | 71 | o32_syscall_exit: | 
 | 72 | 	local_irq_disable		# make sure need_resched and | 
 | 73 | 					# signals dont change between | 
 | 74 | 					# sampling and return | 
 | 75 | 	lw	a2, TI_FLAGS($28)	# current->work | 
 | 76 | 	li	t0, _TIF_ALLWORK_MASK | 
 | 77 | 	and	t0, a2 | 
 | 78 | 	bnez	t0, o32_syscall_exit_work | 
 | 79 |  | 
 | 80 | 	j	restore_partial | 
 | 81 |  | 
 | 82 | o32_syscall_exit_work: | 
 | 83 | 	j	syscall_exit_work_partial | 
 | 84 |  | 
 | 85 | /* ------------------------------------------------------------------------ */ | 
 | 86 |  | 
 | 87 | syscall_trace_entry: | 
 | 88 | 	SAVE_STATIC | 
 | 89 | 	move	s0, t2 | 
 | 90 | 	move	a0, sp | 
 | 91 | 	li	a1, 0 | 
 | 92 | 	jal	do_syscall_trace | 
 | 93 |  | 
| Ralf Baechle | 04a7052 | 2005-11-30 16:24:57 +0000 | [diff] [blame] | 94 | 	move	t0, s0 | 
 | 95 | 	RESTORE_STATIC | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 96 | 	lw	a0, PT_R4(sp)		# Restore argument registers | 
 | 97 | 	lw	a1, PT_R5(sp) | 
 | 98 | 	lw	a2, PT_R6(sp) | 
 | 99 | 	lw	a3, PT_R7(sp) | 
| Ralf Baechle | 04a7052 | 2005-11-30 16:24:57 +0000 | [diff] [blame] | 100 | 	jalr	t0 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 101 |  | 
 | 102 | 	li	t0, -EMAXERRNO - 1	# error? | 
 | 103 | 	sltu	t0, t0, v0 | 
 | 104 | 	sw	t0, PT_R7(sp)		# set error flag | 
 | 105 | 	beqz	t0, 1f | 
 | 106 |  | 
 | 107 | 	negu	v0			# error | 
 | 108 | 	sw	v0, PT_R0(sp)		# set flag for syscall | 
 | 109 | 					# restarting | 
 | 110 | 1:	sw	v0, PT_R2(sp)		# result | 
 | 111 |  | 
 | 112 | 	j	syscall_exit | 
 | 113 |  | 
 | 114 | /* ------------------------------------------------------------------------ */ | 
 | 115 |  | 
 | 116 | 	/* | 
 | 117 | 	 * More than four arguments.  Try to deal with it by copying the | 
 | 118 | 	 * stack arguments from the user stack to the kernel stack. | 
 | 119 | 	 * This Sucks (TM). | 
 | 120 | 	 */ | 
 | 121 | stackargs: | 
 | 122 | 	lw	t0, PT_R29(sp)		# get old user stack pointer | 
 | 123 |  | 
 | 124 | 	/* | 
 | 125 | 	 * We intentionally keep the kernel stack a little below the top of | 
 | 126 | 	 * userspace so we don't have to do a slower byte accurate check here. | 
 | 127 | 	 */ | 
 | 128 | 	lw	t5, TI_ADDR_LIMIT($28) | 
 | 129 | 	addu	t4, t0, 32 | 
 | 130 | 	and	t5, t4 | 
 | 131 | 	bltz	t5, bad_stack		# -> sp is bad | 
 | 132 |  | 
 | 133 | 	/* Ok, copy the args from the luser stack to the kernel stack. | 
 | 134 | 	 * t3 is the precomputed number of instruction bytes needed to | 
 | 135 | 	 * load or store arguments 6-8. | 
 | 136 | 	 */ | 
 | 137 |  | 
 | 138 | 	la	t1, 5f			# load up to 3 arguments | 
 | 139 | 	subu	t1, t3 | 
 | 140 | 1:	lw	t5, 16(t0)		# argument #5 from usp | 
 | 141 | 	.set    push | 
 | 142 | 	.set    noreorder | 
 | 143 | 	.set	nomacro | 
 | 144 | 	jr	t1 | 
 | 145 | 	 addiu	t1, 6f - 5f | 
 | 146 |  | 
 | 147 | 2:	lw	t8, 28(t0)		# argument #8 from usp | 
 | 148 | 3:	lw	t7, 24(t0)		# argument #7 from usp | 
 | 149 | 4:	lw	t6, 20(t0)		# argument #6 from usp | 
 | 150 | 5:	jr	t1 | 
 | 151 | 	 sw	t5, 16(sp)		# argument #5 to ksp | 
 | 152 |  | 
 | 153 | 	sw	t8, 28(sp)		# argument #8 to ksp | 
 | 154 | 	sw	t7, 24(sp)		# argument #7 to ksp | 
 | 155 | 	sw	t6, 20(sp)		# argument #6 to ksp | 
 | 156 | 6:	j	stack_done		# go back | 
 | 157 | 	 nop | 
 | 158 | 	.set	pop | 
 | 159 |  | 
 | 160 | 	.section __ex_table,"a" | 
 | 161 | 	PTR	1b,bad_stack | 
 | 162 | 	PTR	2b,bad_stack | 
 | 163 | 	PTR	3b,bad_stack | 
 | 164 | 	PTR	4b,bad_stack | 
 | 165 | 	.previous | 
 | 166 |  | 
 | 167 | 	/* | 
 | 168 | 	 * The stackpointer for a call with more than 4 arguments is bad. | 
 | 169 | 	 * We probably should handle this case a bit more drastic. | 
 | 170 | 	 */ | 
 | 171 | bad_stack: | 
 | 172 | 	negu	v0				# error | 
 | 173 | 	sw	v0, PT_R0(sp) | 
 | 174 | 	sw	v0, PT_R2(sp) | 
 | 175 | 	li	t0, 1				# set error flag | 
 | 176 | 	sw	t0, PT_R7(sp) | 
 | 177 | 	j	o32_syscall_exit | 
 | 178 |  | 
 | 179 | 	/* | 
 | 180 | 	 * The system call does not exist in this kernel | 
 | 181 | 	 */ | 
 | 182 | illegal_syscall: | 
| Atsushi Nemoto | bda8229 | 2008-10-25 01:17:22 +0900 | [diff] [blame] | 183 | 	li	v0, ENOSYS			# error | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 184 | 	sw	v0, PT_R2(sp) | 
 | 185 | 	li	t0, 1				# set error flag | 
 | 186 | 	sw	t0, PT_R7(sp) | 
 | 187 | 	j	o32_syscall_exit | 
 | 188 | 	END(handle_sys) | 
 | 189 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 190 | 	LEAF(sys_syscall) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 191 | 	subu	t0, a0, __NR_O32_Linux	# check syscall number | 
 | 192 | 	sltiu	v0, t0, __NR_O32_Linux_syscalls + 1 | 
| Vlad Malov | e807f95 | 2008-11-18 15:05:46 -0800 | [diff] [blame] | 193 | 	beqz	t0, einval		# do not recurse | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 194 | 	sll	t1, t0, 3 | 
 | 195 | 	beqz	v0, einval | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 196 | 	lw	t2, sys_call_table(t1)		# syscall routine | 
 | 197 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 198 | 	/* Some syscalls like execve get their arguments from struct pt_regs | 
 | 199 | 	   and claim zero arguments in the syscall table. Thus we have to | 
 | 200 | 	   assume the worst case and shuffle around all potential arguments. | 
 | 201 | 	   If you want performance, don't use indirect syscalls. */ | 
 | 202 |  | 
 | 203 | 	move	a0, a1				# shift argument registers | 
 | 204 | 	move	a1, a2 | 
 | 205 | 	move	a2, a3 | 
 | 206 | 	lw	a3, 16(sp) | 
 | 207 | 	lw	t4, 20(sp) | 
 | 208 | 	lw	t5, 24(sp) | 
 | 209 | 	lw	t6, 28(sp) | 
 | 210 | 	sw	t4, 16(sp) | 
 | 211 | 	sw	t5, 20(sp) | 
 | 212 | 	sw	t6, 24(sp) | 
 | 213 | 	sw	a0, PT_R4(sp)			# .. and push back a0 - a3, some | 
 | 214 | 	sw	a1, PT_R5(sp)			# syscalls expect them there | 
 | 215 | 	sw	a2, PT_R6(sp) | 
 | 216 | 	sw	a3, PT_R7(sp) | 
 | 217 | 	sw	a3, PT_R26(sp)			# update a3 for syscall restarting | 
 | 218 | 	jr	t2 | 
 | 219 | 	/* Unreached */ | 
 | 220 |  | 
| Atsushi Nemoto | fb498e2 | 2008-10-25 01:17:23 +0900 | [diff] [blame] | 221 | einval:	li	v0, -ENOSYS | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 222 | 	jr	ra | 
 | 223 | 	END(sys_syscall) | 
 | 224 |  | 
 | 225 | 	.macro	fifty ptr, nargs, from=1, to=50 | 
 | 226 | 	sys	\ptr		\nargs | 
 | 227 | 	.if	\to-\from | 
 | 228 | 	fifty	\ptr,\nargs,"(\from+1)",\to | 
 | 229 | 	.endif | 
 | 230 | 	.endm | 
 | 231 |  | 
 | 232 | 	.macro	mille ptr, nargs, from=1, to=20 | 
 | 233 | 	fifty	\ptr,\nargs | 
 | 234 | 	.if	\to-\from | 
 | 235 | 	mille	\ptr,\nargs,"(\from+1)",\to | 
 | 236 | 	.endif | 
 | 237 | 	.endm | 
 | 238 |  | 
 | 239 | 	.macro	syscalltable | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 240 | 	sys	sys_syscall		8	/* 4000 */ | 
 | 241 | 	sys	sys_exit		1 | 
 | 242 | 	sys	sys_fork		0 | 
 | 243 | 	sys	sys_read		3 | 
 | 244 | 	sys	sys_write		3 | 
 | 245 | 	sys	sys_open		3	/* 4005 */ | 
 | 246 | 	sys	sys_close		1 | 
 | 247 | 	sys	sys_waitpid		3 | 
 | 248 | 	sys	sys_creat		2 | 
 | 249 | 	sys	sys_link		2 | 
 | 250 | 	sys	sys_unlink		1	/* 4010 */ | 
 | 251 | 	sys	sys_execve		0 | 
 | 252 | 	sys	sys_chdir		1 | 
 | 253 | 	sys	sys_time		1 | 
 | 254 | 	sys	sys_mknod		3 | 
 | 255 | 	sys	sys_chmod		2	/* 4015 */ | 
 | 256 | 	sys	sys_lchown		3 | 
 | 257 | 	sys	sys_ni_syscall		0 | 
 | 258 | 	sys	sys_ni_syscall		0	/* was sys_stat */ | 
 | 259 | 	sys	sys_lseek		3 | 
 | 260 | 	sys	sys_getpid		0	/* 4020 */ | 
 | 261 | 	sys	sys_mount		5 | 
 | 262 | 	sys	sys_oldumount		1 | 
 | 263 | 	sys	sys_setuid		1 | 
 | 264 | 	sys	sys_getuid		0 | 
 | 265 | 	sys	sys_stime		1	/* 4025 */ | 
 | 266 | 	sys	sys_ptrace		4 | 
 | 267 | 	sys	sys_alarm		1 | 
 | 268 | 	sys	sys_ni_syscall		0	/* was sys_fstat */ | 
 | 269 | 	sys	sys_pause		0 | 
 | 270 | 	sys	sys_utime		2	/* 4030 */ | 
 | 271 | 	sys	sys_ni_syscall		0 | 
 | 272 | 	sys	sys_ni_syscall		0 | 
 | 273 | 	sys	sys_access		2 | 
 | 274 | 	sys	sys_nice		1 | 
 | 275 | 	sys	sys_ni_syscall		0	/* 4035 */ | 
 | 276 | 	sys	sys_sync		0 | 
 | 277 | 	sys	sys_kill		2 | 
 | 278 | 	sys	sys_rename		2 | 
 | 279 | 	sys	sys_mkdir		2 | 
 | 280 | 	sys	sys_rmdir		1	/* 4040 */ | 
 | 281 | 	sys	sys_dup			1 | 
| Ralf Baechle | 8213bbf | 2008-07-20 13:16:46 +0100 | [diff] [blame] | 282 | 	sys	sysm_pipe		0 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 283 | 	sys	sys_times		1 | 
 | 284 | 	sys	sys_ni_syscall		0 | 
 | 285 | 	sys	sys_brk			1	/* 4045 */ | 
 | 286 | 	sys	sys_setgid		1 | 
 | 287 | 	sys	sys_getgid		0 | 
 | 288 | 	sys	sys_ni_syscall		0	/* was signal(2) */ | 
 | 289 | 	sys	sys_geteuid		0 | 
 | 290 | 	sys	sys_getegid		0	/* 4050 */ | 
 | 291 | 	sys	sys_acct		1 | 
 | 292 | 	sys	sys_umount		2 | 
 | 293 | 	sys	sys_ni_syscall		0 | 
 | 294 | 	sys	sys_ioctl		3 | 
 | 295 | 	sys	sys_fcntl		3	/* 4055 */ | 
 | 296 | 	sys	sys_ni_syscall		2 | 
 | 297 | 	sys	sys_setpgid		2 | 
 | 298 | 	sys	sys_ni_syscall		0 | 
 | 299 | 	sys	sys_olduname		1 | 
 | 300 | 	sys	sys_umask		1	/* 4060 */ | 
 | 301 | 	sys	sys_chroot		1 | 
 | 302 | 	sys	sys_ustat		2 | 
 | 303 | 	sys	sys_dup2		2 | 
 | 304 | 	sys	sys_getppid		0 | 
 | 305 | 	sys	sys_getpgrp		0	/* 4065 */ | 
 | 306 | 	sys	sys_setsid		0 | 
 | 307 | 	sys	sys_sigaction		3 | 
 | 308 | 	sys	sys_sgetmask		0 | 
 | 309 | 	sys	sys_ssetmask		1 | 
 | 310 | 	sys	sys_setreuid		2	/* 4070 */ | 
 | 311 | 	sys	sys_setregid		2 | 
 | 312 | 	sys	sys_sigsuspend		0 | 
 | 313 | 	sys	sys_sigpending		1 | 
 | 314 | 	sys	sys_sethostname		2 | 
 | 315 | 	sys	sys_setrlimit		2	/* 4075 */ | 
 | 316 | 	sys	sys_getrlimit		2 | 
 | 317 | 	sys	sys_getrusage		2 | 
 | 318 | 	sys	sys_gettimeofday	2 | 
 | 319 | 	sys	sys_settimeofday	2 | 
 | 320 | 	sys	sys_getgroups		2	/* 4080 */ | 
 | 321 | 	sys	sys_setgroups		2 | 
 | 322 | 	sys	sys_ni_syscall		0	/* old_select */ | 
 | 323 | 	sys	sys_symlink		2 | 
 | 324 | 	sys	sys_ni_syscall		0	/* was sys_lstat */ | 
 | 325 | 	sys	sys_readlink		3	/* 4085 */ | 
 | 326 | 	sys	sys_uselib		1 | 
 | 327 | 	sys	sys_swapon		2 | 
 | 328 | 	sys	sys_reboot		3 | 
| Heiko Carstens | e55380e | 2009-01-14 14:13:55 +0100 | [diff] [blame] | 329 | 	sys	sys_old_readdir		3 | 
| Ralf Baechle | dbda6ac | 2009-02-08 16:00:26 +0000 | [diff] [blame] | 330 | 	sys	sys_mips_mmap		6	/* 4090 */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 331 | 	sys	sys_munmap		2 | 
 | 332 | 	sys	sys_truncate		2 | 
 | 333 | 	sys	sys_ftruncate		2 | 
 | 334 | 	sys	sys_fchmod		2 | 
 | 335 | 	sys	sys_fchown		3	/* 4095 */ | 
 | 336 | 	sys	sys_getpriority		2 | 
 | 337 | 	sys	sys_setpriority		3 | 
 | 338 | 	sys	sys_ni_syscall		0 | 
 | 339 | 	sys	sys_statfs		2 | 
 | 340 | 	sys	sys_fstatfs		2	/* 4100 */ | 
 | 341 | 	sys	sys_ni_syscall		0	/* was ioperm(2) */ | 
 | 342 | 	sys	sys_socketcall		2 | 
 | 343 | 	sys	sys_syslog		3 | 
 | 344 | 	sys	sys_setitimer		3 | 
 | 345 | 	sys	sys_getitimer		2	/* 4105 */ | 
 | 346 | 	sys	sys_newstat		2 | 
 | 347 | 	sys	sys_newlstat		2 | 
 | 348 | 	sys	sys_newfstat		2 | 
 | 349 | 	sys	sys_uname		1 | 
 | 350 | 	sys	sys_ni_syscall		0	/* 4110 was iopl(2) */ | 
 | 351 | 	sys	sys_vhangup		0 | 
 | 352 | 	sys	sys_ni_syscall		0	/* was sys_idle() */ | 
 | 353 | 	sys	sys_ni_syscall		0	/* was sys_vm86 */ | 
 | 354 | 	sys	sys_wait4		4 | 
 | 355 | 	sys	sys_swapoff		1	/* 4115 */ | 
 | 356 | 	sys	sys_sysinfo		1 | 
 | 357 | 	sys	sys_ipc			6 | 
 | 358 | 	sys	sys_fsync		1 | 
 | 359 | 	sys	sys_sigreturn		0 | 
 | 360 | 	sys	sys_clone		0	/* 4120 */ | 
 | 361 | 	sys	sys_setdomainname	2 | 
 | 362 | 	sys	sys_newuname		1 | 
 | 363 | 	sys	sys_ni_syscall		0	/* sys_modify_ldt */ | 
 | 364 | 	sys	sys_adjtimex		1 | 
 | 365 | 	sys	sys_mprotect		3	/* 4125 */ | 
 | 366 | 	sys	sys_sigprocmask		3 | 
 | 367 | 	sys	sys_ni_syscall		0	/* was create_module */ | 
 | 368 | 	sys	sys_init_module		5 | 
 | 369 | 	sys	sys_delete_module	1 | 
 | 370 | 	sys	sys_ni_syscall		0	/* 4130	was get_kernel_syms */ | 
 | 371 | 	sys	sys_quotactl		4 | 
 | 372 | 	sys	sys_getpgid		1 | 
 | 373 | 	sys	sys_fchdir		1 | 
 | 374 | 	sys	sys_bdflush		2 | 
 | 375 | 	sys	sys_sysfs		3	/* 4135 */ | 
 | 376 | 	sys	sys_personality		1 | 
 | 377 | 	sys	sys_ni_syscall		0	/* for afs_syscall */ | 
 | 378 | 	sys	sys_setfsuid		1 | 
 | 379 | 	sys	sys_setfsgid		1 | 
 | 380 | 	sys	sys_llseek		5	/* 4140 */ | 
 | 381 | 	sys	sys_getdents		3 | 
 | 382 | 	sys	sys_select		5 | 
 | 383 | 	sys	sys_flock		2 | 
 | 384 | 	sys	sys_msync		3 | 
 | 385 | 	sys	sys_readv		3	/* 4145 */ | 
 | 386 | 	sys	sys_writev		3 | 
 | 387 | 	sys	sys_cacheflush		3 | 
 | 388 | 	sys	sys_cachectl		3 | 
 | 389 | 	sys	sys_sysmips		4 | 
 | 390 | 	sys	sys_ni_syscall		0	/* 4150 */ | 
 | 391 | 	sys	sys_getsid		1 | 
 | 392 | 	sys	sys_fdatasync		1 | 
 | 393 | 	sys	sys_sysctl		1 | 
 | 394 | 	sys	sys_mlock		2 | 
 | 395 | 	sys	sys_munlock		2	/* 4155 */ | 
 | 396 | 	sys	sys_mlockall		1 | 
 | 397 | 	sys	sys_munlockall		0 | 
 | 398 | 	sys	sys_sched_setparam	2 | 
 | 399 | 	sys	sys_sched_getparam	2 | 
 | 400 | 	sys	sys_sched_setscheduler	3	/* 4160 */ | 
 | 401 | 	sys	sys_sched_getscheduler	1 | 
 | 402 | 	sys	sys_sched_yield		0 | 
 | 403 | 	sys	sys_sched_get_priority_max 1 | 
 | 404 | 	sys	sys_sched_get_priority_min 1 | 
 | 405 | 	sys	sys_sched_rr_get_interval 2	/* 4165 */ | 
 | 406 | 	sys	sys_nanosleep,		2 | 
| Yoichi Yuasa | 7dbdf43 | 2006-06-23 02:04:14 -0700 | [diff] [blame] | 407 | 	sys	sys_mremap,		5 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 408 | 	sys	sys_accept		3 | 
 | 409 | 	sys	sys_bind		3 | 
 | 410 | 	sys	sys_connect		3	/* 4170 */ | 
 | 411 | 	sys	sys_getpeername		3 | 
 | 412 | 	sys	sys_getsockname		3 | 
 | 413 | 	sys	sys_getsockopt		5 | 
 | 414 | 	sys	sys_listen		2 | 
 | 415 | 	sys	sys_recv		4	/* 4175 */ | 
 | 416 | 	sys	sys_recvfrom		6 | 
 | 417 | 	sys	sys_recvmsg		3 | 
 | 418 | 	sys	sys_send		4 | 
 | 419 | 	sys	sys_sendmsg		3 | 
 | 420 | 	sys	sys_sendto		6	/* 4180 */ | 
 | 421 | 	sys	sys_setsockopt		5 | 
 | 422 | 	sys	sys_shutdown		2 | 
 | 423 | 	sys	sys_socket		3 | 
 | 424 | 	sys	sys_socketpair		4 | 
 | 425 | 	sys	sys_setresuid		3	/* 4185 */ | 
 | 426 | 	sys	sys_getresuid		3 | 
 | 427 | 	sys	sys_ni_syscall		0	/* was sys_query_module */ | 
 | 428 | 	sys	sys_poll		3 | 
 | 429 | 	sys	sys_nfsservctl		3 | 
 | 430 | 	sys	sys_setresgid		3	/* 4190 */ | 
 | 431 | 	sys	sys_getresgid		3 | 
 | 432 | 	sys	sys_prctl		5 | 
 | 433 | 	sys	sys_rt_sigreturn	0 | 
 | 434 | 	sys	sys_rt_sigaction	4 | 
 | 435 | 	sys	sys_rt_sigprocmask	4	/* 4195 */ | 
 | 436 | 	sys	sys_rt_sigpending	2 | 
 | 437 | 	sys	sys_rt_sigtimedwait	4 | 
 | 438 | 	sys	sys_rt_sigqueueinfo	3 | 
 | 439 | 	sys	sys_rt_sigsuspend	0 | 
 | 440 | 	sys	sys_pread64		6	/* 4200 */ | 
 | 441 | 	sys	sys_pwrite64		6 | 
 | 442 | 	sys	sys_chown		3 | 
 | 443 | 	sys	sys_getcwd		2 | 
 | 444 | 	sys	sys_capget		2 | 
 | 445 | 	sys	sys_capset		2	/* 4205 */ | 
 | 446 | 	sys	sys_sigaltstack		0 | 
 | 447 | 	sys	sys_sendfile		4 | 
 | 448 | 	sys	sys_ni_syscall		0 | 
 | 449 | 	sys	sys_ni_syscall		0 | 
| Ralf Baechle | dbda6ac | 2009-02-08 16:00:26 +0000 | [diff] [blame] | 450 | 	sys	sys_mips_mmap2		6	/* 4210 */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 451 | 	sys	sys_truncate64		4 | 
 | 452 | 	sys	sys_ftruncate64		4 | 
 | 453 | 	sys	sys_stat64		2 | 
 | 454 | 	sys	sys_lstat64		2 | 
 | 455 | 	sys	sys_fstat64		2	/* 4215 */ | 
 | 456 | 	sys	sys_pivot_root		2 | 
 | 457 | 	sys	sys_mincore		3 | 
 | 458 | 	sys	sys_madvise		3 | 
 | 459 | 	sys	sys_getdents64		3 | 
 | 460 | 	sys	sys_fcntl64		3	/* 4220 */ | 
 | 461 | 	sys	sys_ni_syscall		0 | 
 | 462 | 	sys	sys_gettid		0 | 
 | 463 | 	sys	sys_readahead		5 | 
 | 464 | 	sys	sys_setxattr		5 | 
 | 465 | 	sys	sys_lsetxattr		5	/* 4225 */ | 
 | 466 | 	sys	sys_fsetxattr		5 | 
 | 467 | 	sys	sys_getxattr		4 | 
 | 468 | 	sys	sys_lgetxattr		4 | 
 | 469 | 	sys	sys_fgetxattr		4 | 
 | 470 | 	sys	sys_listxattr		3	/* 4230 */ | 
 | 471 | 	sys	sys_llistxattr		3 | 
 | 472 | 	sys	sys_flistxattr		3 | 
 | 473 | 	sys	sys_removexattr		2 | 
 | 474 | 	sys	sys_lremovexattr	2 | 
 | 475 | 	sys	sys_fremovexattr	2	/* 4235 */ | 
 | 476 | 	sys	sys_tkill		2 | 
 | 477 | 	sys	sys_sendfile64		5 | 
| Thiemo Seufer | 90a67b5 | 2005-03-13 00:07:00 +0000 | [diff] [blame] | 478 | 	sys	sys_futex		6 | 
| Ralf Baechle | f088fc8 | 2006-04-05 09:45:47 +0100 | [diff] [blame] | 479 | #ifdef CONFIG_MIPS_MT_FPAFF | 
 | 480 | 	/* | 
 | 481 | 	 * For FPU affinity scheduling on MIPS MT processors, we need to | 
 | 482 | 	 * intercept sys_sched_xxxaffinity() calls until we get a proper hook | 
 | 483 | 	 * in kernel/sched.c.  Considered only temporary we only support these | 
 | 484 | 	 * hooks for the 32-bit kernel - there is no MIPS64 MT processor atm. | 
 | 485 | 	 */ | 
 | 486 | 	sys	mipsmt_sys_sched_setaffinity	3 | 
 | 487 | 	sys	mipsmt_sys_sched_getaffinity	3 | 
 | 488 | #else | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 489 | 	sys	sys_sched_setaffinity	3 | 
 | 490 | 	sys	sys_sched_getaffinity	3	/* 4240 */ | 
| Ralf Baechle | f088fc8 | 2006-04-05 09:45:47 +0100 | [diff] [blame] | 491 | #endif /* CONFIG_MIPS_MT_FPAFF */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 492 | 	sys	sys_io_setup		2 | 
 | 493 | 	sys	sys_io_destroy		1 | 
 | 494 | 	sys	sys_io_getevents	5 | 
 | 495 | 	sys	sys_io_submit		3 | 
 | 496 | 	sys	sys_io_cancel		3	/* 4245 */ | 
 | 497 | 	sys	sys_exit_group		1 | 
| Ralf Baechle | 0d507d6 | 2005-10-18 12:48:31 +0100 | [diff] [blame] | 498 | 	sys	sys_lookup_dcookie	4 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 499 | 	sys	sys_epoll_create	1 | 
 | 500 | 	sys	sys_epoll_ctl		4 | 
 | 501 | 	sys	sys_epoll_wait		3	/* 4250 */ | 
 | 502 | 	sys	sys_remap_file_pages	5 | 
 | 503 | 	sys	sys_set_tid_address	1 | 
 | 504 | 	sys	sys_restart_syscall	0 | 
 | 505 | 	sys	sys_fadvise64_64	7 | 
 | 506 | 	sys	sys_statfs64		3	/* 4255 */ | 
 | 507 | 	sys	sys_fstatfs64		2 | 
 | 508 | 	sys	sys_timer_create	3 | 
 | 509 | 	sys	sys_timer_settime	4 | 
 | 510 | 	sys	sys_timer_gettime	2 | 
 | 511 | 	sys	sys_timer_getoverrun	1	/* 4260 */ | 
 | 512 | 	sys	sys_timer_delete	1 | 
 | 513 | 	sys	sys_clock_settime	2 | 
 | 514 | 	sys	sys_clock_gettime	2 | 
 | 515 | 	sys	sys_clock_getres	2 | 
 | 516 | 	sys	sys_clock_nanosleep	4	/* 4265 */ | 
 | 517 | 	sys	sys_tgkill		3 | 
 | 518 | 	sys	sys_utimes		2 | 
 | 519 | 	sys	sys_mbind		4 | 
 | 520 | 	sys	sys_ni_syscall		0	/* sys_get_mempolicy */ | 
 | 521 | 	sys	sys_ni_syscall		0	/* 4270 sys_set_mempolicy */ | 
 | 522 | 	sys	sys_mq_open		4 | 
 | 523 | 	sys	sys_mq_unlink		1 | 
 | 524 | 	sys	sys_mq_timedsend	5 | 
 | 525 | 	sys	sys_mq_timedreceive	5 | 
 | 526 | 	sys	sys_mq_notify		2	/* 4275 */ | 
 | 527 | 	sys	sys_mq_getsetattr	3 | 
 | 528 | 	sys	sys_ni_syscall		0	/* sys_vserver */ | 
| Ralf Baechle | a19050f | 2005-02-16 21:19:59 +0000 | [diff] [blame] | 529 | 	sys	sys_waitid		5 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 530 | 	sys	sys_ni_syscall		0	/* available, was setaltroot */ | 
| Ralf Baechle | e50c0a8 | 2005-05-31 11:49:19 +0000 | [diff] [blame] | 531 | 	sys	sys_add_key		5	/* 4280 */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 532 | 	sys	sys_request_key		4 | 
 | 533 | 	sys	sys_keyctl		5 | 
| Ralf Baechle | 3c37026 | 2005-04-13 17:43:59 +0000 | [diff] [blame] | 534 | 	sys	sys_set_thread_area	1 | 
| Ralf Baechle | 7db36c8 | 2005-07-13 11:48:45 +0000 | [diff] [blame] | 535 | 	sys	sys_inotify_init	0 | 
 | 536 | 	sys	sys_inotify_add_watch	3	/* 4285 */ | 
 | 537 | 	sys	sys_inotify_rm_watch	2 | 
| Ralf Baechle | 72bf891 | 2006-02-08 13:38:50 +0000 | [diff] [blame] | 538 | 	sys	sys_migrate_pages	4 | 
 | 539 | 	sys	sys_openat		4 | 
 | 540 | 	sys	sys_mkdirat		3 | 
 | 541 | 	sys	sys_mknodat		4	/* 4290 */ | 
 | 542 | 	sys	sys_fchownat		5 | 
 | 543 | 	sys	sys_futimesat		3 | 
| Yoichi Yuasa | 326a625 | 2006-02-13 18:07:30 +0900 | [diff] [blame] | 544 | 	sys	sys_fstatat64		4 | 
| Ralf Baechle | 72bf891 | 2006-02-08 13:38:50 +0000 | [diff] [blame] | 545 | 	sys	sys_unlinkat		3 | 
 | 546 | 	sys	sys_renameat		4	/* 4295 */ | 
| Ulrich Drepper | c04030e | 2006-02-24 13:04:21 -0800 | [diff] [blame] | 547 | 	sys	sys_linkat		5 | 
| Ralf Baechle | 72bf891 | 2006-02-08 13:38:50 +0000 | [diff] [blame] | 548 | 	sys	sys_symlinkat		3 | 
 | 549 | 	sys	sys_readlinkat		4 | 
 | 550 | 	sys	sys_fchmodat		3 | 
 | 551 | 	sys	sys_faccessat		3	/* 4300 */ | 
 | 552 | 	sys	sys_pselect6		6 | 
 | 553 | 	sys	sys_ppoll		5 | 
 | 554 | 	sys	sys_unshare		1 | 
| Ralf Baechle | 08d3087 | 2008-12-03 16:33:17 +0000 | [diff] [blame] | 555 | 	sys	sys_splice		6 | 
| Ralf Baechle | a8d587a | 2006-04-01 07:49:21 +0100 | [diff] [blame] | 556 | 	sys	sys_sync_file_range	7	/* 4305 */ | 
| Ralf Baechle | 136d47d | 2006-04-15 11:16:19 +0200 | [diff] [blame] | 557 | 	sys	sys_tee			4 | 
| Ralf Baechle | 722cfd9 | 2006-07-02 16:31:14 +0100 | [diff] [blame] | 558 | 	sys	sys_vmsplice		4 | 
 | 559 | 	sys	sys_move_pages		6 | 
| Atsushi Nemoto | 7fdeb04 | 2006-09-06 22:42:02 +0900 | [diff] [blame] | 560 | 	sys	sys_set_robust_list	2 | 
| Ralf Baechle | d2bcf87 | 2006-10-18 23:52:17 +0100 | [diff] [blame] | 561 | 	sys	sys_get_robust_list	3	/* 4310 */ | 
| Nicolas Schichan | 583bb86 | 2006-10-18 15:14:55 +0200 | [diff] [blame] | 562 | 	sys	sys_kexec_load		4 | 
| Ralf Baechle | 991ea26 | 2006-10-29 21:07:40 +0000 | [diff] [blame] | 563 | 	sys	sys_getcpu		3 | 
 | 564 | 	sys	sys_epoll_pwait		6 | 
| Ralf Baechle | 08253b3 | 2007-03-06 17:04:49 +0000 | [diff] [blame] | 565 | 	sys	sys_ioprio_set		3 | 
| Atsushi Nemoto | 7a6d4f3 | 2007-05-29 23:29:40 +0900 | [diff] [blame] | 566 | 	sys	sys_ioprio_get		2	/* 4315 */ | 
 | 567 | 	sys	sys_utimensat		4 | 
 | 568 | 	sys	sys_signalfd		3 | 
| Davide Libenzi | 4d672e7 | 2008-02-04 22:27:26 -0800 | [diff] [blame] | 569 | 	sys	sys_ni_syscall		0 | 
| Atsushi Nemoto | 7a6d4f3 | 2007-05-29 23:29:40 +0900 | [diff] [blame] | 570 | 	sys	sys_eventfd		1 | 
| Ralf Baechle | 4dc4677 | 2007-07-26 03:38:24 +0100 | [diff] [blame] | 571 | 	sys	sys_fallocate		6	/* 4320 */ | 
| Dmitri Vorobiev | 6783fe6 | 2008-02-19 00:02:37 +0300 | [diff] [blame] | 572 | 	sys	sys_timerfd_create	2 | 
 | 573 | 	sys	sys_timerfd_gettime	2 | 
 | 574 | 	sys	sys_timerfd_settime	4 | 
| Ralf Baechle | 3885b71 | 2008-07-31 11:16:43 +0100 | [diff] [blame] | 575 | 	sys	sys_signalfd4		4 | 
 | 576 | 	sys	sys_eventfd2		2	/* 4325 */ | 
 | 577 | 	sys	sys_epoll_create1	1 | 
 | 578 | 	sys	sys_dup3		3 | 
 | 579 | 	sys	sys_pipe2		2 | 
 | 580 | 	sys	sys_inotify_init1	1 | 
| Ralf Baechle | ddd9e91 | 2009-04-02 16:59:24 -0700 | [diff] [blame] | 581 | 	sys	sys_preadv		6	/* 4330 */ | 
 | 582 | 	sys	sys_pwritev		6 | 
| David Daney | 69f16c9 | 2009-06-26 09:53:57 -0700 | [diff] [blame] | 583 | 	sys	sys_rt_tgsigqueueinfo	4 | 
| Ingo Molnar | cdd6c48 | 2009-09-21 12:02:48 +0200 | [diff] [blame] | 584 | 	sys	sys_perf_event_open	5 | 
| Ralf Baechle | 54822de | 2009-08-03 17:27:19 +0100 | [diff] [blame] | 585 | 	sys	sys_accept4		4 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 586 | 	.endm | 
 | 587 |  | 
 | 588 | 	/* We pre-compute the number of _instruction_ bytes needed to | 
 | 589 | 	   load or store the arguments 6-8. Negative values are ignored. */ | 
 | 590 |  | 
 | 591 | 	.macro  sys function, nargs | 
 | 592 | 	PTR	\function | 
 | 593 | 	LONG	(\nargs << 2) - (5 << 2) | 
 | 594 | 	.endm | 
 | 595 |  | 
 | 596 | 	.align	3 | 
 | 597 | 	.type	sys_call_table,@object | 
 | 598 | EXPORT(sys_call_table) | 
 | 599 | 	syscalltable | 
 | 600 | 	.size	sys_call_table, . - sys_call_table |