1/*
2 *  linux/arch/i386/entry.S
3 *
4 *  Copyright (C) 1991, 1992  Linus Torvalds
5 */
6
7/*
8 * entry.S contains the system-call and fault low-level handling routines.
9 * This also contains the timer-interrupt handler, as well as all interrupts
10 * and faults that can result in a task-switch.
11 *
12 * NOTE: This code handles signal-recognition, which happens every time
13 * after a timer-interrupt and after each system call.
14 *
15 * I changed all the .align's to 4 (16 byte alignment), as that's faster
16 * on a 486.
17 *
18 * Stack layout in 'ret_from_system_call':
19 * 	ptrace needs to have all regs on the stack.
20 *	if the order here is changed, it needs to be
21 *	updated in fork.c:copy_process, signal.c:do_signal,
22 *	ptrace.c and ptrace.h
23 *
24 *	 0(%esp) - %ebx
25 *	 4(%esp) - %ecx
26 *	 8(%esp) - %edx
27 *       C(%esp) - %esi
28 *	10(%esp) - %edi
29 *	14(%esp) - %ebp
30 *	18(%esp) - %eax
31 *	1C(%esp) - %ds
32 *	20(%esp) - %es
33 *	24(%esp) - orig_eax
34 *	28(%esp) - %eip
35 *	2C(%esp) - %cs
36 *	30(%esp) - %eflags
37 *	34(%esp) - %oldesp
38 *	38(%esp) - %oldss
39 *
40 * "current" is in register %ebx during any slow entries.
41 */
42
43#include <linux/config.h>
44#include <linux/sys.h>
45#include <linux/linkage.h>
46#include <asm/segment.h>
47#include <asm/smp.h>
48
49EBX		= 0x00
50ECX		= 0x04
51EDX		= 0x08
52ESI		= 0x0C
53EDI		= 0x10
54EBP		= 0x14
55EAX		= 0x18
56DS		= 0x1C
57ES		= 0x20
58ORIG_EAX	= 0x24
59EIP		= 0x28
60CS		= 0x2C
61EFLAGS		= 0x30
62OLDESP		= 0x34
63OLDSS		= 0x38
64
65CF_MASK		= 0x00000001
66TF_MASK		= 0x00000100
67IF_MASK		= 0x00000200
68DF_MASK		= 0x00000400
69NT_MASK		= 0x00004000
70VM_MASK		= 0x00020000
71
72/*
73 * these are offsets into the task-struct.
74 */
75state		=  0
76flags		=  4
77sigpending	=  8
78addr_limit	= 12
79exec_domain	= 16
80need_resched	= 20
81tsk_ptrace	= 24
82processor	= 52
83
84ENOSYS = 38
85
86
87#define SAVE_ALL \
88	cld; \
89	pushl %es; \
90	pushl %ds; \
91	pushl %eax; \
92	pushl %ebp; \
93	pushl %edi; \
94	pushl %esi; \
95	pushl %edx; \
96	pushl %ecx; \
97	pushl %ebx; \
98	movl $(__KERNEL_DS),%edx; \
99	movl %edx,%ds; \
100	movl %edx,%es;
101
102#define RESTORE_ALL	\
103	popl %ebx;	\
104	popl %ecx;	\
105	popl %edx;	\
106	popl %esi;	\
107	popl %edi;	\
108	popl %ebp;	\
109	popl %eax;	\
1101:	popl %ds;	\
1112:	popl %es;	\
112	addl $4,%esp;	\
1133:	iret;		\
114.section .fixup,"ax";	\
1154:	movl $0,(%esp);	\
116	jmp 1b;		\
1175:	movl $0,(%esp);	\
118	jmp 2b;		\
1196:	pushl %ss;	\
120	popl %ds;	\
121	pushl %ss;	\
122	popl %es;	\
123	pushl $11;	\
124	call do_exit;	\
125.previous;		\
126.section __ex_table,"a";\
127	.align 4;	\
128	.long 1b,4b;	\
129	.long 2b,5b;	\
130	.long 3b,6b;	\
131.previous
132
133#define GET_CURRENT(reg) \
134	movl $-8192, reg; \
135	andl %esp, reg
136
137ENTRY(lcall7)
138	pushfl			# We get a different stack layout with call gates,
139	pushl %eax		# which has to be cleaned up later..
140	SAVE_ALL
141	movl EIP(%esp),%eax	# due to call gates, this is eflags, not eip..
142	movl CS(%esp),%edx	# this is eip..
143	movl EFLAGS(%esp),%ecx	# and this is cs..
144	movl %eax,EFLAGS(%esp)	#
145	andl $~(NT_MASK|TF_MASK|DF_MASK), %eax
146	pushl %eax
147	popfl
148	movl %edx,EIP(%esp)	# Now we move them to their "normal" places
149	movl %ecx,CS(%esp)	#
150	movl %esp,%ebx
151	pushl %ebx
152	andl $-8192,%ebx	# GET_CURRENT
153	movl exec_domain(%ebx),%edx	# Get the execution domain
154	movl 4(%edx),%edx	# Get the lcall7 handler for the domain
155	pushl $0x7
156	call *%edx
157	addl $4, %esp
158	popl %eax
159	jmp ret_from_sys_call
160
161ENTRY(lcall27)
162	pushfl			# We get a different stack layout with call gates,
163	pushl %eax		# which has to be cleaned up later..
164	SAVE_ALL
165	movl EIP(%esp),%eax	# due to call gates, this is eflags, not eip..
166	movl CS(%esp),%edx	# this is eip..
167	movl EFLAGS(%esp),%ecx	# and this is cs..
168	movl %eax,EFLAGS(%esp)	#
169	andl $~(NT_MASK|TF_MASK|DF_MASK), %eax
170	pushl %eax
171	popfl
172	movl %edx,EIP(%esp)	# Now we move them to their "normal" places
173	movl %ecx,CS(%esp)	#
174	movl %esp,%ebx
175	pushl %ebx
176	andl $-8192,%ebx	# GET_CURRENT
177	movl exec_domain(%ebx),%edx	# Get the execution domain
178	movl 4(%edx),%edx	# Get the lcall7 handler for the domain
179	pushl $0x27
180	call *%edx
181	addl $4, %esp
182	popl %eax
183	jmp ret_from_sys_call
184
185
186ENTRY(ret_from_fork)
187	pushl %ebx
188	call SYMBOL_NAME(schedule_tail)
189	addl $4, %esp
190	GET_CURRENT(%ebx)
191	testb $0x02,tsk_ptrace(%ebx)	# PT_TRACESYS
192	jne tracesys_exit
193	jmp	ret_from_sys_call
194
195/*
196 * Return to user mode is not as complex as all this looks,
197 * but we want the default path for a system call return to
198 * go as quickly as possible which is why some of this is
199 * less clear than it otherwise should be.
200 */
201
202ENTRY(system_call)
203	pushl %eax			# save orig_eax
204	SAVE_ALL
205	GET_CURRENT(%ebx)
206	testb $0x02,tsk_ptrace(%ebx)	# PT_TRACESYS
207	jne tracesys
208	cmpl $(NR_syscalls),%eax
209	jae badsys
210	call *SYMBOL_NAME(sys_call_table)(,%eax,4)
211	movl %eax,EAX(%esp)		# save the return value
212ENTRY(ret_from_sys_call)
213	cli				# need_resched and signals atomic test
214	cmpl $0,need_resched(%ebx)
215	jne reschedule
216	cmpl $0,sigpending(%ebx)
217	jne signal_return
218restore_all:
219	RESTORE_ALL
220
221	ALIGN
222signal_return:
223	sti				# we can get here from an interrupt handler
224	testl $(VM_MASK),EFLAGS(%esp)
225	movl %esp,%eax
226	jne v86_signal_return
227	xorl %edx,%edx
228	call SYMBOL_NAME(do_signal)
229	jmp restore_all
230
231	ALIGN
232v86_signal_return:
233	call SYMBOL_NAME(save_v86_state)
234	movl %eax,%esp
235	xorl %edx,%edx
236	call SYMBOL_NAME(do_signal)
237	jmp restore_all
238
239	ALIGN
240tracesys:
241	movl $-ENOSYS,EAX(%esp)
242	call SYMBOL_NAME(syscall_trace)
243	movl ORIG_EAX(%esp),%eax
244	cmpl $(NR_syscalls),%eax
245	jae tracesys_exit
246	call *SYMBOL_NAME(sys_call_table)(,%eax,4)
247	movl %eax,EAX(%esp)		# save the return value
248tracesys_exit:
249	call SYMBOL_NAME(syscall_trace)
250	jmp ret_from_sys_call
251badsys:
252	movl $-ENOSYS,EAX(%esp)
253	jmp ret_from_sys_call
254
255	ALIGN
256ENTRY(ret_from_intr)
257	GET_CURRENT(%ebx)
258ret_from_exception:
259	movl EFLAGS(%esp),%eax		# mix EFLAGS and CS
260	movb CS(%esp),%al
261	testl $(VM_MASK | 3),%eax	# return to VM86 mode or non-supervisor?
262	jne ret_from_sys_call
263	jmp restore_all
264
265	ALIGN
266reschedule:
267	call SYMBOL_NAME(schedule)    # test
268	jmp ret_from_sys_call
269
270ENTRY(divide_error)
271	pushl $0		# no error code
272	pushl $ SYMBOL_NAME(do_divide_error)
273	ALIGN
274error_code:
275	pushl %ds
276	pushl %eax
277	xorl %eax,%eax
278	pushl %ebp
279	pushl %edi
280	pushl %esi
281	pushl %edx
282	decl %eax			# eax = -1
283	pushl %ecx
284	pushl %ebx
285	cld
286	movl %es,%ecx
287	movl ORIG_EAX(%esp), %esi	# get the error code
288	movl ES(%esp), %edi		# get the function address
289	movl %eax, ORIG_EAX(%esp)
290	movl %ecx, ES(%esp)
291	movl %esp,%edx
292	pushl %esi			# push the error code
293	pushl %edx			# push the pt_regs pointer
294	movl $(__KERNEL_DS),%edx
295	movl %edx,%ds
296	movl %edx,%es
297	GET_CURRENT(%ebx)
298	call *%edi
299	addl $8,%esp
300	jmp ret_from_exception
301
302ENTRY(coprocessor_error)
303	pushl $0
304	pushl $ SYMBOL_NAME(do_coprocessor_error)
305	jmp error_code
306
307ENTRY(simd_coprocessor_error)
308	pushl $0
309	pushl $ SYMBOL_NAME(do_simd_coprocessor_error)
310	jmp error_code
311
312ENTRY(device_not_available)
313	pushl $-1		# mark this as an int
314	SAVE_ALL
315	GET_CURRENT(%ebx)
316	movl %cr0,%eax
317	testl $0x4,%eax			# EM (math emulation bit)
318	jne device_not_available_emulate
319	call SYMBOL_NAME(math_state_restore)
320	jmp ret_from_exception
321device_not_available_emulate:
322	pushl $0		# temporary storage for ORIG_EIP
323	call  SYMBOL_NAME(math_emulate)
324	addl $4,%esp
325	jmp ret_from_exception
326
327ENTRY(debug)
328	pushl $0
329	pushl $ SYMBOL_NAME(do_debug)
330	jmp error_code
331
332ENTRY(nmi)
333	pushl %eax
334	SAVE_ALL
335	movl %esp,%edx
336	pushl $0
337	pushl %edx
338	call SYMBOL_NAME(do_nmi)
339	addl $8,%esp
340	RESTORE_ALL
341
342ENTRY(int3)
343	pushl $0
344	pushl $ SYMBOL_NAME(do_int3)
345	jmp error_code
346
347ENTRY(overflow)
348	pushl $0
349	pushl $ SYMBOL_NAME(do_overflow)
350	jmp error_code
351
352ENTRY(bounds)
353	pushl $0
354	pushl $ SYMBOL_NAME(do_bounds)
355	jmp error_code
356
357ENTRY(invalid_op)
358	pushl $0
359	pushl $ SYMBOL_NAME(do_invalid_op)
360	jmp error_code
361
362ENTRY(coprocessor_segment_overrun)
363	pushl $0
364	pushl $ SYMBOL_NAME(do_coprocessor_segment_overrun)
365	jmp error_code
366
367ENTRY(double_fault)
368	pushl $ SYMBOL_NAME(do_double_fault)
369	jmp error_code
370
371ENTRY(invalid_TSS)
372	pushl $ SYMBOL_NAME(do_invalid_TSS)
373	jmp error_code
374
375ENTRY(segment_not_present)
376	pushl $ SYMBOL_NAME(do_segment_not_present)
377	jmp error_code
378
379ENTRY(stack_segment)
380	pushl $ SYMBOL_NAME(do_stack_segment)
381	jmp error_code
382
383ENTRY(general_protection)
384	pushl $ SYMBOL_NAME(do_general_protection)
385	jmp error_code
386
387ENTRY(alignment_check)
388	pushl $ SYMBOL_NAME(do_alignment_check)
389	jmp error_code
390
391ENTRY(page_fault)
392	pushl $ SYMBOL_NAME(do_page_fault)
393	jmp error_code
394
395ENTRY(machine_check)
396	pushl $0
397	pushl $ SYMBOL_NAME(do_machine_check)
398	jmp error_code
399
400ENTRY(spurious_interrupt_bug)
401	pushl $0
402	pushl $ SYMBOL_NAME(do_spurious_interrupt_bug)
403	jmp error_code
404
405.data
406ENTRY(sys_call_table)
407	.long SYMBOL_NAME(sys_ni_syscall)	/* 0  -  old "setup()" system call*/
408	.long SYMBOL_NAME(sys_exit)
409	.long SYMBOL_NAME(sys_fork)
410	.long SYMBOL_NAME(sys_read)
411	.long SYMBOL_NAME(sys_write)
412	.long SYMBOL_NAME(sys_open)		/* 5 */
413	.long SYMBOL_NAME(sys_close)
414	.long SYMBOL_NAME(sys_waitpid)
415	.long SYMBOL_NAME(sys_creat)
416	.long SYMBOL_NAME(sys_link)
417	.long SYMBOL_NAME(sys_unlink)		/* 10 */
418	.long SYMBOL_NAME(sys_execve)
419	.long SYMBOL_NAME(sys_chdir)
420	.long SYMBOL_NAME(sys_time)
421	.long SYMBOL_NAME(sys_mknod)
422	.long SYMBOL_NAME(sys_chmod)		/* 15 */
423	.long SYMBOL_NAME(sys_lchown16)
424	.long SYMBOL_NAME(sys_ni_syscall)				/* old break syscall holder */
425	.long SYMBOL_NAME(sys_stat)
426	.long SYMBOL_NAME(sys_lseek)
427	.long SYMBOL_NAME(sys_getpid)		/* 20 */
428	.long SYMBOL_NAME(sys_mount)
429	.long SYMBOL_NAME(sys_oldumount)
430	.long SYMBOL_NAME(sys_setuid16)
431	.long SYMBOL_NAME(sys_getuid16)
432	.long SYMBOL_NAME(sys_stime)		/* 25 */
433	.long SYMBOL_NAME(sys_ptrace)
434	.long SYMBOL_NAME(sys_alarm)
435	.long SYMBOL_NAME(sys_fstat)
436	.long SYMBOL_NAME(sys_pause)
437	.long SYMBOL_NAME(sys_utime)		/* 30 */
438	.long SYMBOL_NAME(sys_ni_syscall)				/* old stty syscall holder */
439	.long SYMBOL_NAME(sys_ni_syscall)				/* old gtty syscall holder */
440	.long SYMBOL_NAME(sys_access)
441	.long SYMBOL_NAME(sys_nice)
442	.long SYMBOL_NAME(sys_ni_syscall)	/* 35 */		/* old ftime syscall holder */
443	.long SYMBOL_NAME(sys_sync)
444	.long SYMBOL_NAME(sys_kill)
445	.long SYMBOL_NAME(sys_rename)
446	.long SYMBOL_NAME(sys_mkdir)
447	.long SYMBOL_NAME(sys_rmdir)		/* 40 */
448	.long SYMBOL_NAME(sys_dup)
449	.long SYMBOL_NAME(sys_pipe)
450	.long SYMBOL_NAME(sys_times)
451	.long SYMBOL_NAME(sys_ni_syscall)				/* old prof syscall holder */
452	.long SYMBOL_NAME(sys_brk)		/* 45 */
453	.long SYMBOL_NAME(sys_setgid16)
454	.long SYMBOL_NAME(sys_getgid16)
455	.long SYMBOL_NAME(sys_signal)
456	.long SYMBOL_NAME(sys_geteuid16)
457	.long SYMBOL_NAME(sys_getegid16)	/* 50 */
458	.long SYMBOL_NAME(sys_acct)
459	.long SYMBOL_NAME(sys_umount)					/* recycled never used phys() */
460	.long SYMBOL_NAME(sys_ni_syscall)				/* old lock syscall holder */
461	.long SYMBOL_NAME(sys_ioctl)
462	.long SYMBOL_NAME(sys_fcntl)		/* 55 */
463	.long SYMBOL_NAME(sys_ni_syscall)				/* old mpx syscall holder */
464	.long SYMBOL_NAME(sys_setpgid)
465	.long SYMBOL_NAME(sys_ni_syscall)				/* old ulimit syscall holder */
466	.long SYMBOL_NAME(sys_olduname)
467	.long SYMBOL_NAME(sys_umask)		/* 60 */
468	.long SYMBOL_NAME(sys_chroot)
469	.long SYMBOL_NAME(sys_ustat)
470	.long SYMBOL_NAME(sys_dup2)
471	.long SYMBOL_NAME(sys_getppid)
472	.long SYMBOL_NAME(sys_getpgrp)		/* 65 */
473	.long SYMBOL_NAME(sys_setsid)
474	.long SYMBOL_NAME(sys_sigaction)
475	.long SYMBOL_NAME(sys_sgetmask)
476	.long SYMBOL_NAME(sys_ssetmask)
477	.long SYMBOL_NAME(sys_setreuid16)	/* 70 */
478	.long SYMBOL_NAME(sys_setregid16)
479	.long SYMBOL_NAME(sys_sigsuspend)
480	.long SYMBOL_NAME(sys_sigpending)
481	.long SYMBOL_NAME(sys_sethostname)
482	.long SYMBOL_NAME(sys_setrlimit)	/* 75 */
483	.long SYMBOL_NAME(sys_old_getrlimit)
484	.long SYMBOL_NAME(sys_getrusage)
485	.long SYMBOL_NAME(sys_gettimeofday)
486	.long SYMBOL_NAME(sys_settimeofday)
487	.long SYMBOL_NAME(sys_getgroups16)	/* 80 */
488	.long SYMBOL_NAME(sys_setgroups16)
489	.long SYMBOL_NAME(old_select)
490	.long SYMBOL_NAME(sys_symlink)
491	.long SYMBOL_NAME(sys_lstat)
492	.long SYMBOL_NAME(sys_readlink)		/* 85 */
493	.long SYMBOL_NAME(sys_uselib)
494	.long SYMBOL_NAME(sys_swapon)
495	.long SYMBOL_NAME(sys_reboot)
496	.long SYMBOL_NAME(old_readdir)
497	.long SYMBOL_NAME(old_mmap)		/* 90 */
498	.long SYMBOL_NAME(sys_munmap)
499	.long SYMBOL_NAME(sys_truncate)
500	.long SYMBOL_NAME(sys_ftruncate)
501	.long SYMBOL_NAME(sys_fchmod)
502	.long SYMBOL_NAME(sys_fchown16)		/* 95 */
503	.long SYMBOL_NAME(sys_getpriority)
504	.long SYMBOL_NAME(sys_setpriority)
505	.long SYMBOL_NAME(sys_ni_syscall)				/* old profil syscall holder */
506	.long SYMBOL_NAME(sys_statfs)
507	.long SYMBOL_NAME(sys_fstatfs)		/* 100 */
508	.long SYMBOL_NAME(sys_ioperm)
509	.long SYMBOL_NAME(sys_socketcall)
510	.long SYMBOL_NAME(sys_syslog)
511	.long SYMBOL_NAME(sys_setitimer)
512	.long SYMBOL_NAME(sys_getitimer)	/* 105 */
513	.long SYMBOL_NAME(sys_newstat)
514	.long SYMBOL_NAME(sys_newlstat)
515	.long SYMBOL_NAME(sys_newfstat)
516	.long SYMBOL_NAME(sys_uname)
517	.long SYMBOL_NAME(sys_iopl)		/* 110 */
518	.long SYMBOL_NAME(sys_vhangup)
519	.long SYMBOL_NAME(sys_ni_syscall)	/* old "idle" system call */
520	.long SYMBOL_NAME(sys_vm86old)
521	.long SYMBOL_NAME(sys_wait4)
522	.long SYMBOL_NAME(sys_swapoff)		/* 115 */
523	.long SYMBOL_NAME(sys_sysinfo)
524	.long SYMBOL_NAME(sys_ipc)
525	.long SYMBOL_NAME(sys_fsync)
526	.long SYMBOL_NAME(sys_sigreturn)
527	.long SYMBOL_NAME(sys_clone)		/* 120 */
528	.long SYMBOL_NAME(sys_setdomainname)
529	.long SYMBOL_NAME(sys_newuname)
530	.long SYMBOL_NAME(sys_modify_ldt)
531	.long SYMBOL_NAME(sys_adjtimex)
532	.long SYMBOL_NAME(sys_mprotect)		/* 125 */
533	.long SYMBOL_NAME(sys_sigprocmask)
534	.long SYMBOL_NAME(sys_create_module)
535	.long SYMBOL_NAME(sys_init_module)
536	.long SYMBOL_NAME(sys_delete_module)
537	.long SYMBOL_NAME(sys_get_kernel_syms)	/* 130 */
538	.long SYMBOL_NAME(sys_quotactl)
539	.long SYMBOL_NAME(sys_getpgid)
540	.long SYMBOL_NAME(sys_fchdir)
541	.long SYMBOL_NAME(sys_bdflush)
542	.long SYMBOL_NAME(sys_sysfs)		/* 135 */
543	.long SYMBOL_NAME(sys_personality)
544	.long SYMBOL_NAME(sys_ni_syscall)	/* for afs_syscall */
545	.long SYMBOL_NAME(sys_setfsuid16)
546	.long SYMBOL_NAME(sys_setfsgid16)
547	.long SYMBOL_NAME(sys_llseek)		/* 140 */
548	.long SYMBOL_NAME(sys_getdents)
549	.long SYMBOL_NAME(sys_select)
550	.long SYMBOL_NAME(sys_flock)
551	.long SYMBOL_NAME(sys_msync)
552	.long SYMBOL_NAME(sys_readv)		/* 145 */
553	.long SYMBOL_NAME(sys_writev)
554	.long SYMBOL_NAME(sys_getsid)
555	.long SYMBOL_NAME(sys_fdatasync)
556	.long SYMBOL_NAME(sys_sysctl)
557	.long SYMBOL_NAME(sys_mlock)		/* 150 */
558	.long SYMBOL_NAME(sys_munlock)
559	.long SYMBOL_NAME(sys_mlockall)
560	.long SYMBOL_NAME(sys_munlockall)
561	.long SYMBOL_NAME(sys_sched_setparam)
562	.long SYMBOL_NAME(sys_sched_getparam)   /* 155 */
563	.long SYMBOL_NAME(sys_sched_setscheduler)
564	.long SYMBOL_NAME(sys_sched_getscheduler)
565	.long SYMBOL_NAME(sys_sched_yield)
566	.long SYMBOL_NAME(sys_sched_get_priority_max)
567	.long SYMBOL_NAME(sys_sched_get_priority_min)  /* 160 */
568	.long SYMBOL_NAME(sys_sched_rr_get_interval)
569	.long SYMBOL_NAME(sys_nanosleep)
570	.long SYMBOL_NAME(sys_mremap)
571	.long SYMBOL_NAME(sys_setresuid16)
572	.long SYMBOL_NAME(sys_getresuid16)	/* 165 */
573	.long SYMBOL_NAME(sys_vm86)
574	.long SYMBOL_NAME(sys_query_module)
575	.long SYMBOL_NAME(sys_poll)
576	.long SYMBOL_NAME(sys_nfsservctl)
577	.long SYMBOL_NAME(sys_setresgid16)	/* 170 */
578	.long SYMBOL_NAME(sys_getresgid16)
579	.long SYMBOL_NAME(sys_prctl)
580	.long SYMBOL_NAME(sys_rt_sigreturn)
581	.long SYMBOL_NAME(sys_rt_sigaction)
582	.long SYMBOL_NAME(sys_rt_sigprocmask)	/* 175 */
583	.long SYMBOL_NAME(sys_rt_sigpending)
584	.long SYMBOL_NAME(sys_rt_sigtimedwait)
585	.long SYMBOL_NAME(sys_rt_sigqueueinfo)
586	.long SYMBOL_NAME(sys_rt_sigsuspend)
587	.long SYMBOL_NAME(sys_pread)		/* 180 */
588	.long SYMBOL_NAME(sys_pwrite)
589	.long SYMBOL_NAME(sys_chown16)
590	.long SYMBOL_NAME(sys_getcwd)
591	.long SYMBOL_NAME(sys_capget)
592	.long SYMBOL_NAME(sys_capset)           /* 185 */
593	.long SYMBOL_NAME(sys_sigaltstack)
594	.long SYMBOL_NAME(sys_sendfile)
595	.long SYMBOL_NAME(sys_ni_syscall)		/* streams1 */
596	.long SYMBOL_NAME(sys_ni_syscall)		/* streams2 */
597	.long SYMBOL_NAME(sys_vfork)            /* 190 */
598	.long SYMBOL_NAME(sys_getrlimit)
599	.long SYMBOL_NAME(sys_mmap2)
600	.long SYMBOL_NAME(sys_truncate64)
601	.long SYMBOL_NAME(sys_ftruncate64)
602	.long SYMBOL_NAME(sys_stat64)		/* 195 */
603	.long SYMBOL_NAME(sys_lstat64)
604	.long SYMBOL_NAME(sys_fstat64)
605	.long SYMBOL_NAME(sys_lchown)
606	.long SYMBOL_NAME(sys_getuid)
607	.long SYMBOL_NAME(sys_getgid)		/* 200 */
608	.long SYMBOL_NAME(sys_geteuid)
609	.long SYMBOL_NAME(sys_getegid)
610	.long SYMBOL_NAME(sys_setreuid)
611	.long SYMBOL_NAME(sys_setregid)
612	.long SYMBOL_NAME(sys_getgroups)	/* 205 */
613	.long SYMBOL_NAME(sys_setgroups)
614	.long SYMBOL_NAME(sys_fchown)
615	.long SYMBOL_NAME(sys_setresuid)
616	.long SYMBOL_NAME(sys_getresuid)
617	.long SYMBOL_NAME(sys_setresgid)	/* 210 */
618	.long SYMBOL_NAME(sys_getresgid)
619	.long SYMBOL_NAME(sys_chown)
620	.long SYMBOL_NAME(sys_setuid)
621	.long SYMBOL_NAME(sys_setgid)
622	.long SYMBOL_NAME(sys_setfsuid)		/* 215 */
623	.long SYMBOL_NAME(sys_setfsgid)
624	.long SYMBOL_NAME(sys_pivot_root)
625	.long SYMBOL_NAME(sys_mincore)
626	.long SYMBOL_NAME(sys_madvise)
627	.long SYMBOL_NAME(sys_getdents64)	/* 220 */
628	.long SYMBOL_NAME(sys_fcntl64)
629	.long SYMBOL_NAME(sys_ni_syscall)	/* reserved for TUX */
630	.long SYMBOL_NAME(sys_ni_syscall)	/* Reserved for Security */
631	.long SYMBOL_NAME(sys_gettid)
632	.long SYMBOL_NAME(sys_readahead)	/* 225 */
633	.long SYMBOL_NAME(sys_setxattr)
634	.long SYMBOL_NAME(sys_lsetxattr)
635	.long SYMBOL_NAME(sys_fsetxattr)
636	.long SYMBOL_NAME(sys_getxattr)
637	.long SYMBOL_NAME(sys_lgetxattr)	/* 230 */
638	.long SYMBOL_NAME(sys_fgetxattr)
639	.long SYMBOL_NAME(sys_listxattr)
640	.long SYMBOL_NAME(sys_llistxattr)
641	.long SYMBOL_NAME(sys_flistxattr)
642	.long SYMBOL_NAME(sys_removexattr)	/* 235 */
643	.long SYMBOL_NAME(sys_lremovexattr)
644	.long SYMBOL_NAME(sys_fremovexattr)
645 	.long SYMBOL_NAME(sys_tkill)
646	.long SYMBOL_NAME(sys_sendfile64)
647	.long SYMBOL_NAME(sys_ni_syscall)	/* 240 reserved for futex */
648	.long SYMBOL_NAME(sys_ni_syscall)	/* reserved for sched_setaffinity */
649	.long SYMBOL_NAME(sys_ni_syscall)	/* reserved for sched_getaffinity */
650	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_set_thread_area */
651	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_get_thread_area */
652	.long SYMBOL_NAME(sys_ni_syscall)	/* 245 sys_io_setup */
653	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_io_destroy */
654	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_io_getevents */
655	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_io_submit */
656	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_io_cancel */
657	.long SYMBOL_NAME(sys_ni_syscall)	/* 250 sys_alloc_hugepages */
658	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_free_hugepages */
659	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_exit_group */
660	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_lookup_dcookie */
661	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_epoll_create */
662	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_epoll_ctl 255 */
663	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_epoll_wait */
664 	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_remap_file_pages */
665 	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_set_tid_address */
666
667	.rept NR_syscalls-(.-sys_call_table)/4
668		.long SYMBOL_NAME(sys_ni_syscall)
669	.endr
670