1/* -*- mode: asm -*-
2 *
3 *  linux/arch/m68k/kernel/entry.S
4 *
5 *  Copyright (C) 1991, 1992  Linus Torvalds
6 *
7 * This file is subject to the terms and conditions of the GNU General Public
8 * License.  See the file README.legal in the main directory of this archive
9 * for more details.
10 *
11 * Linux/m68k support by Hamish Macdonald
12 *
13 * 68060 fixes by Jesper Skov
14 *
15 */
16
17/*
18 * entry.S  contains the system-call and fault low-level handling routines.
19 * This also contains the timer-interrupt handler, as well as all interrupts
20 * and faults that can result in a task-switch.
21 *
22 * NOTE: This code handles signal-recognition, which happens every time
23 * after a timer-interrupt and after each system call.
24 *
25 */
26
27/*
28 * 12/03/96 Jes: Currently we only support m68k single-cpu systems, so
29 *               all pointers that used to be 'current' are now entry
30 *               number 0 in the 'current_set' list.
31 *
32 *  6/05/00 RZ:	 addedd writeback completion after return from sighandler
33 *		 for 68040
34 */
35
36#include <linux/sys.h>
37#include <linux/config.h>
38#include <linux/linkage.h>
39#include <asm/entry.h>
40#include <asm/errno.h>
41#include <asm/setup.h>
42#include <asm/segment.h>
43#include <asm/traps.h>
44
45#include "m68k_defs.h"
46
47.globl SYMBOL_NAME(system_call), SYMBOL_NAME(buserr), SYMBOL_NAME(trap)
48.globl SYMBOL_NAME(resume), SYMBOL_NAME(ret_from_exception)
49.globl SYMBOL_NAME(ret_from_signal)
50.globl SYMBOL_NAME(inthandler), SYMBOL_NAME(sys_call_table)
51.globl SYMBOL_NAME(sys_fork), SYMBOL_NAME(sys_clone), SYMBOL_NAME(sys_vfork)
52.globl SYMBOL_NAME(ret_from_interrupt), SYMBOL_NAME(bad_interrupt)
53
54.text
55ENTRY(buserr)
56	SAVE_ALL_INT
57	GET_CURRENT(%d0)
58	movel	%sp,%sp@- 		| stack frame pointer argument
59	bsrl	SYMBOL_NAME(buserr_c)
60	addql	#4,%sp
61	jra	SYMBOL_NAME(ret_from_exception)
62
63ENTRY(trap)
64	SAVE_ALL_INT
65	GET_CURRENT(%d0)
66	movel	%sp,%sp@- 		| stack frame pointer argument
67	bsrl	SYMBOL_NAME(trap_c)
68	addql	#4,%sp
69	jra	SYMBOL_NAME(ret_from_exception)
70
71ENTRY(reschedule)
72	| save top of frame
73	movel	%sp,%curptr@(TASK_THREAD+THREAD_ESP0)
74
75	pea	SYMBOL_NAME(ret_from_exception)
76	jmp	SYMBOL_NAME(schedule)
77
78	| After a fork we jump here directly from resume,
79	| so that %d1 contains the previous task
80	| Theoretically only needed on SMP, but let's watch
81	| what happens in schedule_tail() in future...
82ENTRY(ret_from_fork)
83	movel	%d1,%sp@-
84	jsr	SYMBOL_NAME(schedule_tail)
85	addql	#4,%sp
86	jra	SYMBOL_NAME(ret_from_exception)
87
88badsys:
89	movel	#-ENOSYS,%sp@(PT_D0)
90	jra	SYMBOL_NAME(ret_from_exception)
91
92do_trace:
93	movel	#-ENOSYS,%sp@(PT_D0)	| needed for strace
94	subql	#4,%sp
95	SAVE_SWITCH_STACK
96	jbsr	SYMBOL_NAME(syscall_trace)
97	RESTORE_SWITCH_STACK
98	addql	#4,%sp
99	movel	%sp@(PT_ORIG_D0),%d1
100	movel	#-ENOSYS,%d0
101	cmpl	#NR_syscalls,%d1
102	jcc	1f
103	jbsr	@(SYMBOL_NAME(sys_call_table),%d1:l:4)@(0)
1041:	movel	%d0,%sp@(PT_D0)		| save the return value
105	subql	#4,%sp			| dummy return address
106	SAVE_SWITCH_STACK
107	jbsr	SYMBOL_NAME(syscall_trace)
108
109SYMBOL_NAME_LABEL(ret_from_signal)
110	RESTORE_SWITCH_STACK
111	addql	#4,%sp
112/* on 68040 complete pending writebacks if any */
113#ifdef CONFIG_M68040
114	bfextu	%sp@(PT_VECTOR){#0,#4},%d0
115	subql	#7,%d0				| bus error frame ?
116	jbne	1f
117	movel	%sp,%sp@-
118	jbsr	SYMBOL_NAME(berr_040cleanup)
119	addql	#4,%sp
1201:
121#endif
122	jra	SYMBOL_NAME(ret_from_exception)
123
124ENTRY(system_call)
125	SAVE_ALL_SYS
126
127	GET_CURRENT(%d1)
128	| save top of frame
129	movel	%sp,%curptr@(TASK_THREAD+THREAD_ESP0)
130
131	btst	#PT_TRACESYS_BIT,%curptr@(TASK_PTRACE+PT_TRACESYS_OFF)
132	jne	do_trace
133	cmpl	#NR_syscalls,%d0
134	jcc	badsys
135	jbsr	@(SYMBOL_NAME(sys_call_table),%d0:l:4)@(0)
136	movel	%d0,%sp@(PT_D0)		| save the return value
137
138SYMBOL_NAME_LABEL(ret_from_exception)
139	btst	#5,%sp@(PT_SR)		| check if returning to kernel
140	bnes	2f			| if so, skip resched, signals
141	| only allow interrupts when we are really the last one on the
142	| kernel stack, otherwise stack overflow can occur during
143	| heavy interrupt load
144	andw	#ALLOWINT,%sr
145	tstl	%curptr@(TASK_NEEDRESCHED)
146	jne	SYMBOL_NAME(reschedule)
147#if 0
148	cmpl	#SYMBOL_NAME(task),%curptr	| task[0] cannot have signals
149	jeq	2f
150#endif
151					| check for delayed trace
152	bclr	#PT_DTRACE_BIT,%curptr@(TASK_PTRACE+PT_DTRACE_OFF)
153	jne	do_delayed_trace
1545:
155	tstl	%curptr@(TASK_STATE)	| state
156	jne	SYMBOL_NAME(reschedule)
157
158	tstl	%curptr@(TASK_SIGPENDING)
159	jne	Lsignal_return
1602:	RESTORE_ALL
161
162Lsignal_return:
163	subql	#4,%sp			| dummy return address
164	SAVE_SWITCH_STACK
165	pea	%sp@(SWITCH_STACK_SIZE)
166	clrl	%sp@-
167	bsrl	SYMBOL_NAME(do_signal)
168	addql	#8,%sp
169	RESTORE_SWITCH_STACK
170	addql	#4,%sp
171	RESTORE_ALL
172
173do_delayed_trace:
174	bclr	#7,%sp@(PT_SR)		| clear trace bit in SR
175	pea	1			| send SIGTRAP
176	movel	%curptr,%sp@-
177	pea	LSIGTRAP
178	jbsr	SYMBOL_NAME(send_sig)
179	addql	#8,%sp
180	addql	#4,%sp
181	jra	5b
182
183
184#if 0
185#if CONFIG_AMIGA
186SYMBOL_NAME_LABEL(ami_inthandler)
187	addql	#1,SYMBOL_NAME(irq_stat)+4	| local_irq_count
188	SAVE_ALL_INT
189	GET_CURRENT(%d0)
190
191	bfextu	%sp@(PT_VECTOR){#4,#12},%d0
192	movel	%d0,%a0
193	addql	#1,%a0@(SYMBOL_NAME(kstat)+STAT_IRQ-VECOFF(VEC_SPUR))
194	movel	%a0@(SYMBOL_NAME(autoirq_list)-VECOFF(VEC_SPUR)),%a0
195
196| amiga vector int handler get the req mask instead of irq vector
197	lea	CUSTOMBASE,%a1
198	movew	%a1@(C_INTREQR),%d0
199	andw	%a1@(C_INTENAR),%d0
200
201| prepare stack (push frame pointer, dev_id & req mask)
202	pea	%sp@
203	movel	%a0@(IRQ_DEVID),%sp@-
204	movel	%d0,%sp@-
205	pea	%pc@(SYMBOL_NAME(ret_from_interrupt):w)
206	jbra	@(IRQ_HANDLER,%a0)@(0)
207
208ENTRY(nmi_handler)
209	rte
210#endif
211#endif
212
213/*
214** This is the main interrupt handler, responsible for calling process_int()
215*/
216SYMBOL_NAME_LABEL(inthandler)
217	SAVE_ALL_INT
218	GET_CURRENT(%d0)
219	addql	#1,SYMBOL_NAME(irq_stat)+4	| local_irq_count
220					|  put exception # in d0
221	bfextu %sp@(PT_VECTOR){#4,#10},%d0
222
223	movel	%sp,%sp@-
224	movel	%d0,%sp@- 		|  put vector # on stack
225#if defined(MACH_Q40_ONLY) && defined(CONFIG_BLK_DEV_FD)
226	btstb	#4,0xff000000	| Q40 floppy needs very special treatment ...
227	jbeq	1f
228	btstb	#3,0xff000004
229	jbeq	1f
230	jbsr	SYMBOL_NAME(floppy_hardint)
231	jbra	3f
2321:
233#endif
234	jbsr	SYMBOL_NAME(process_int)|  process the IRQ
2353:     	addql	#8,%sp			|  pop parameters off stack
236
237SYMBOL_NAME_LABEL(ret_from_interrupt)
238	subql	#1,SYMBOL_NAME(irq_stat)+4	| local_irq_count
239	jeq	1f
2402:
241	RESTORE_ALL
2421:
243	moveq	#(~ALLOWINT>>8)&0xff,%d0
244	andb	%sp@(PT_SR),%d0
245	jne	2b
246
247	/* check if we need to do software interrupts */
248	tstl	SYMBOL_NAME(irq_stat)	| softirq_pending ?
249	jeq	SYMBOL_NAME(ret_from_exception)
250	pea	SYMBOL_NAME(ret_from_exception)
251	jra	SYMBOL_NAME(do_softirq)
252
253
254/* Handler for uninitialized and spurious interrupts */
255
256SYMBOL_NAME_LABEL(bad_interrupt)
257	addql	#1,SYMBOL_NAME(num_spurious)
258	rte
259
260ENTRY(sys_fork)
261	SAVE_SWITCH_STACK
262	pea	%sp@(SWITCH_STACK_SIZE)
263	jbsr	SYMBOL_NAME(m68k_fork)
264	addql	#4,%sp
265	RESTORE_SWITCH_STACK
266	rts
267
268ENTRY(sys_clone)
269	SAVE_SWITCH_STACK
270	pea	%sp@(SWITCH_STACK_SIZE)
271	jbsr	SYMBOL_NAME(m68k_clone)
272	addql	#4,%sp
273	RESTORE_SWITCH_STACK
274	rts
275
276ENTRY(sys_vfork)
277	SAVE_SWITCH_STACK
278	pea	%sp@(SWITCH_STACK_SIZE)
279	jbsr	SYMBOL_NAME(m68k_vfork)
280	addql	#4,%sp
281	RESTORE_SWITCH_STACK
282	rts
283
284ENTRY(sys_sigsuspend)
285	SAVE_SWITCH_STACK
286	pea	%sp@(SWITCH_STACK_SIZE)
287	jbsr	SYMBOL_NAME(do_sigsuspend)
288	addql	#4,%sp
289	RESTORE_SWITCH_STACK
290	rts
291
292ENTRY(sys_rt_sigsuspend)
293	SAVE_SWITCH_STACK
294	pea	%sp@(SWITCH_STACK_SIZE)
295	jbsr	SYMBOL_NAME(do_rt_sigsuspend)
296	addql	#4,%sp
297	RESTORE_SWITCH_STACK
298	rts
299
300ENTRY(sys_sigreturn)
301	SAVE_SWITCH_STACK
302	jbsr	SYMBOL_NAME(do_sigreturn)
303	RESTORE_SWITCH_STACK
304	rts
305
306ENTRY(sys_rt_sigreturn)
307	SAVE_SWITCH_STACK
308	jbsr	SYMBOL_NAME(do_rt_sigreturn)
309	RESTORE_SWITCH_STACK
310	rts
311
312SYMBOL_NAME_LABEL(resume)
313	/*
314	 * Beware - when entering resume, prev (the current task) is
315	 * in a0, next (the new task) is in a1,so don't change these
316	 * registers until their contents are no longer needed.
317	 */
318
319	/* save sr */
320	movew	%sr,%a0@(TASK_THREAD+THREAD_SR)
321
322	/* save fs (sfc,%dfc) (may be pointing to kernel memory) */
323	movec	%sfc,%d0
324	movew	%d0,%a0@(TASK_THREAD+THREAD_FS)
325
326	/* save usp */
327	/* it is better to use a movel here instead of a movew 8*) */
328	movec	%usp,%d0
329	movel	%d0,%a0@(TASK_THREAD+THREAD_USP)
330
331	/* save non-scratch registers on stack */
332	SAVE_SWITCH_STACK
333
334	/* save current kernel stack pointer */
335	movel	%sp,%a0@(TASK_THREAD+THREAD_KSP)
336
337	/* save floating point context */
338#ifndef CONFIG_M68KFPU_EMU_ONLY
339#ifdef CONFIG_M68KFPU_EMU
340	tstl	SYMBOL_NAME(m68k_fputype)
341	jeq	3f
342#endif
343	fsave	%a0@(TASK_THREAD+THREAD_FPSTATE)
344
345#if defined(CONFIG_M68060)
346#if !defined(CPU_M68060_ONLY)
347	btst	#3,SYMBOL_NAME(m68k_cputype)+3
348	beqs	1f
349#endif
350	/* The 060 FPU keeps status in bits 15-8 of the first longword */
351	tstb	%a0@(TASK_THREAD+THREAD_FPSTATE+2)
352	jeq	3f
353#if !defined(CPU_M68060_ONLY)
354	jra	2f
355#endif
356#endif /* CONFIG_M68060 */
357#if !defined(CPU_M68060_ONLY)
3581:	tstb	%a0@(TASK_THREAD+THREAD_FPSTATE)
359	jeq	3f
360#endif
3612:	fmovemx	%fp0-%fp7,%a0@(TASK_THREAD+THREAD_FPREG)
362	fmoveml	%fpcr/%fpsr/%fpiar,%a0@(TASK_THREAD+THREAD_FPCNTL)
3633:
364#endif	/* CONFIG_M68KFPU_EMU_ONLY */
365	/* Return previous task in %d1 */
366	movel	%curptr,%d1
367
368	/* switch to new task (a1 contains new task) */
369	movel	%a1,%curptr
370
371	/* restore floating point context */
372#ifndef CONFIG_M68KFPU_EMU_ONLY
373#ifdef CONFIG_M68KFPU_EMU
374	tstl	SYMBOL_NAME(m68k_fputype)
375	jeq	4f
376#endif
377#if defined(CONFIG_M68060)
378#if !defined(CPU_M68060_ONLY)
379	btst	#3,SYMBOL_NAME(m68k_cputype)+3
380	beqs	1f
381#endif
382	/* The 060 FPU keeps status in bits 15-8 of the first longword */
383	tstb	%a1@(TASK_THREAD+THREAD_FPSTATE+2)
384	jeq	3f
385#if !defined(CPU_M68060_ONLY)
386	jra	2f
387#endif
388#endif /* CONFIG_M68060 */
389#if !defined(CPU_M68060_ONLY)
3901:	tstb	%a1@(TASK_THREAD+THREAD_FPSTATE)
391	jeq	3f
392#endif
3932:	fmovemx	%a1@(TASK_THREAD+THREAD_FPREG),%fp0-%fp7
394	fmoveml	%a1@(TASK_THREAD+THREAD_FPCNTL),%fpcr/%fpsr/%fpiar
3953:	frestore %a1@(TASK_THREAD+THREAD_FPSTATE)
3964:
397#endif	/* CONFIG_M68KFPU_EMU_ONLY */
398
399	/* restore the kernel stack pointer */
400	movel	%a1@(TASK_THREAD+THREAD_KSP),%sp
401
402	/* restore non-scratch registers */
403	RESTORE_SWITCH_STACK
404
405	/* restore user stack pointer */
406	movel	%a1@(TASK_THREAD+THREAD_USP),%a0
407	movel	%a0,%usp
408
409	/* restore fs (sfc,%dfc) */
410	movew	%a1@(TASK_THREAD+THREAD_FS),%a0
411	movec	%a0,%sfc
412	movec	%a0,%dfc
413
414	/* restore status register */
415	movew	%a1@(TASK_THREAD+THREAD_SR),%sr
416
417	rts
418
419.data
420ALIGN
421SYMBOL_NAME_LABEL(sys_call_table)
422	.long SYMBOL_NAME(sys_ni_syscall)	/* 0  -  old "setup()" system call*/
423	.long SYMBOL_NAME(sys_exit)
424	.long SYMBOL_NAME(sys_fork)
425	.long SYMBOL_NAME(sys_read)
426	.long SYMBOL_NAME(sys_write)
427	.long SYMBOL_NAME(sys_open)		/* 5 */
428	.long SYMBOL_NAME(sys_close)
429	.long SYMBOL_NAME(sys_waitpid)
430	.long SYMBOL_NAME(sys_creat)
431	.long SYMBOL_NAME(sys_link)
432	.long SYMBOL_NAME(sys_unlink)		/* 10 */
433	.long SYMBOL_NAME(sys_execve)
434	.long SYMBOL_NAME(sys_chdir)
435	.long SYMBOL_NAME(sys_time)
436	.long SYMBOL_NAME(sys_mknod)
437	.long SYMBOL_NAME(sys_chmod)		/* 15 */
438	.long SYMBOL_NAME(sys_chown16)
439	.long SYMBOL_NAME(sys_ni_syscall)				/* old break syscall holder */
440	.long SYMBOL_NAME(sys_stat)
441	.long SYMBOL_NAME(sys_lseek)
442	.long SYMBOL_NAME(sys_getpid)		/* 20 */
443	.long SYMBOL_NAME(sys_mount)
444	.long SYMBOL_NAME(sys_oldumount)
445	.long SYMBOL_NAME(sys_setuid16)
446	.long SYMBOL_NAME(sys_getuid16)
447	.long SYMBOL_NAME(sys_stime)		/* 25 */
448	.long SYMBOL_NAME(sys_ptrace)
449	.long SYMBOL_NAME(sys_alarm)
450	.long SYMBOL_NAME(sys_fstat)
451	.long SYMBOL_NAME(sys_pause)
452	.long SYMBOL_NAME(sys_utime)		/* 30 */
453	.long SYMBOL_NAME(sys_ni_syscall)				/* old stty syscall holder */
454	.long SYMBOL_NAME(sys_ni_syscall)				/* old gtty syscall holder */
455	.long SYMBOL_NAME(sys_access)
456	.long SYMBOL_NAME(sys_nice)
457	.long SYMBOL_NAME(sys_ni_syscall)	/* 35 */		/* old ftime syscall holder */
458	.long SYMBOL_NAME(sys_sync)
459	.long SYMBOL_NAME(sys_kill)
460	.long SYMBOL_NAME(sys_rename)
461	.long SYMBOL_NAME(sys_mkdir)
462	.long SYMBOL_NAME(sys_rmdir)		/* 40 */
463	.long SYMBOL_NAME(sys_dup)
464	.long SYMBOL_NAME(sys_pipe)
465	.long SYMBOL_NAME(sys_times)
466	.long SYMBOL_NAME(sys_ni_syscall)				/* old prof syscall holder */
467	.long SYMBOL_NAME(sys_brk)		/* 45 */
468	.long SYMBOL_NAME(sys_setgid16)
469	.long SYMBOL_NAME(sys_getgid16)
470	.long SYMBOL_NAME(sys_signal)
471	.long SYMBOL_NAME(sys_geteuid16)
472	.long SYMBOL_NAME(sys_getegid16)	/* 50 */
473	.long SYMBOL_NAME(sys_acct)
474	.long SYMBOL_NAME(sys_umount)					/* recycled never used phys() */
475	.long SYMBOL_NAME(sys_ni_syscall)				/* old lock syscall holder */
476	.long SYMBOL_NAME(sys_ioctl)
477	.long SYMBOL_NAME(sys_fcntl)		/* 55 */
478	.long SYMBOL_NAME(sys_ni_syscall)				/* old mpx syscall holder */
479	.long SYMBOL_NAME(sys_setpgid)
480	.long SYMBOL_NAME(sys_ni_syscall)				/* old ulimit syscall holder */
481	.long SYMBOL_NAME(sys_ni_syscall)
482	.long SYMBOL_NAME(sys_umask)		/* 60 */
483	.long SYMBOL_NAME(sys_chroot)
484	.long SYMBOL_NAME(sys_ustat)
485	.long SYMBOL_NAME(sys_dup2)
486	.long SYMBOL_NAME(sys_getppid)
487	.long SYMBOL_NAME(sys_getpgrp)		/* 65 */
488	.long SYMBOL_NAME(sys_setsid)
489	.long SYMBOL_NAME(sys_sigaction)
490	.long SYMBOL_NAME(sys_sgetmask)
491	.long SYMBOL_NAME(sys_ssetmask)
492	.long SYMBOL_NAME(sys_setreuid16)	/* 70 */
493	.long SYMBOL_NAME(sys_setregid16)
494	.long SYMBOL_NAME(sys_sigsuspend)
495	.long SYMBOL_NAME(sys_sigpending)
496	.long SYMBOL_NAME(sys_sethostname)
497	.long SYMBOL_NAME(sys_setrlimit)	/* 75 */
498	.long SYMBOL_NAME(sys_old_getrlimit)
499	.long SYMBOL_NAME(sys_getrusage)
500	.long SYMBOL_NAME(sys_gettimeofday)
501	.long SYMBOL_NAME(sys_settimeofday)
502	.long SYMBOL_NAME(sys_getgroups16)	/* 80 */
503	.long SYMBOL_NAME(sys_setgroups16)
504	.long SYMBOL_NAME(old_select)
505	.long SYMBOL_NAME(sys_symlink)
506	.long SYMBOL_NAME(sys_lstat)
507	.long SYMBOL_NAME(sys_readlink)		/* 85 */
508	.long SYMBOL_NAME(sys_uselib)
509	.long SYMBOL_NAME(sys_swapon)
510	.long SYMBOL_NAME(sys_reboot)
511	.long SYMBOL_NAME(old_readdir)
512	.long SYMBOL_NAME(old_mmap)		/* 90 */
513	.long SYMBOL_NAME(sys_munmap)
514	.long SYMBOL_NAME(sys_truncate)
515	.long SYMBOL_NAME(sys_ftruncate)
516	.long SYMBOL_NAME(sys_fchmod)
517	.long SYMBOL_NAME(sys_fchown16)		/* 95 */
518	.long SYMBOL_NAME(sys_getpriority)
519	.long SYMBOL_NAME(sys_setpriority)
520	.long SYMBOL_NAME(sys_ni_syscall)				/* old profil syscall holder */
521	.long SYMBOL_NAME(sys_statfs)
522	.long SYMBOL_NAME(sys_fstatfs)		/* 100 */
523	.long SYMBOL_NAME(sys_ioperm)
524	.long SYMBOL_NAME(sys_socketcall)
525	.long SYMBOL_NAME(sys_syslog)
526	.long SYMBOL_NAME(sys_setitimer)
527	.long SYMBOL_NAME(sys_getitimer)	/* 105 */
528	.long SYMBOL_NAME(sys_newstat)
529	.long SYMBOL_NAME(sys_newlstat)
530	.long SYMBOL_NAME(sys_newfstat)
531	.long SYMBOL_NAME(sys_ni_syscall)
532	.long SYMBOL_NAME(sys_ni_syscall)	/* iopl for i386 */ /* 110 */
533	.long SYMBOL_NAME(sys_vhangup)
534	.long SYMBOL_NAME(sys_ni_syscall)	/* obsolete idle() syscall */
535	.long SYMBOL_NAME(sys_ni_syscall)	/* vm86old for i386 */
536	.long SYMBOL_NAME(sys_wait4)
537	.long SYMBOL_NAME(sys_swapoff)		/* 115 */
538	.long SYMBOL_NAME(sys_sysinfo)
539	.long SYMBOL_NAME(sys_ipc)
540	.long SYMBOL_NAME(sys_fsync)
541	.long SYMBOL_NAME(sys_sigreturn)
542	.long SYMBOL_NAME(sys_clone)		/* 120 */
543	.long SYMBOL_NAME(sys_setdomainname)
544	.long SYMBOL_NAME(sys_newuname)
545	.long SYMBOL_NAME(sys_cacheflush)	/* modify_ldt for i386 */
546	.long SYMBOL_NAME(sys_adjtimex)
547	.long SYMBOL_NAME(sys_mprotect)		/* 125 */
548	.long SYMBOL_NAME(sys_sigprocmask)
549	.long SYMBOL_NAME(sys_create_module)
550	.long SYMBOL_NAME(sys_init_module)
551	.long SYMBOL_NAME(sys_delete_module)
552	.long SYMBOL_NAME(sys_get_kernel_syms)	/* 130 */
553	.long SYMBOL_NAME(sys_quotactl)
554	.long SYMBOL_NAME(sys_getpgid)
555	.long SYMBOL_NAME(sys_fchdir)
556	.long SYMBOL_NAME(sys_bdflush)
557	.long SYMBOL_NAME(sys_sysfs)		/* 135 */
558	.long SYMBOL_NAME(sys_personality)
559	.long SYMBOL_NAME(sys_ni_syscall)	/* for afs_syscall */
560	.long SYMBOL_NAME(sys_setfsuid16)
561	.long SYMBOL_NAME(sys_setfsgid16)
562	.long SYMBOL_NAME(sys_llseek)		/* 140 */
563	.long SYMBOL_NAME(sys_getdents)
564	.long SYMBOL_NAME(sys_select)
565	.long SYMBOL_NAME(sys_flock)
566	.long SYMBOL_NAME(sys_msync)
567	.long SYMBOL_NAME(sys_readv)		/* 145 */
568	.long SYMBOL_NAME(sys_writev)
569	.long SYMBOL_NAME(sys_getsid)
570	.long SYMBOL_NAME(sys_fdatasync)
571	.long SYMBOL_NAME(sys_sysctl)
572	.long SYMBOL_NAME(sys_mlock)		/* 150 */
573	.long SYMBOL_NAME(sys_munlock)
574	.long SYMBOL_NAME(sys_mlockall)
575	.long SYMBOL_NAME(sys_munlockall)
576	.long SYMBOL_NAME(sys_sched_setparam)
577	.long SYMBOL_NAME(sys_sched_getparam)   /* 155 */
578	.long SYMBOL_NAME(sys_sched_setscheduler)
579	.long SYMBOL_NAME(sys_sched_getscheduler)
580	.long SYMBOL_NAME(sys_sched_yield)
581	.long SYMBOL_NAME(sys_sched_get_priority_max)
582	.long SYMBOL_NAME(sys_sched_get_priority_min)  /* 160 */
583	.long SYMBOL_NAME(sys_sched_rr_get_interval)
584	.long SYMBOL_NAME(sys_nanosleep)
585	.long SYMBOL_NAME(sys_mremap)
586	.long SYMBOL_NAME(sys_setresuid16)
587	.long SYMBOL_NAME(sys_getresuid16)	/* 165 */
588	.long SYMBOL_NAME(sys_getpagesize)
589	.long SYMBOL_NAME(sys_query_module)
590	.long SYMBOL_NAME(sys_poll)
591	.long SYMBOL_NAME(sys_nfsservctl)
592	.long SYMBOL_NAME(sys_setresgid16)	/* 170 */
593	.long SYMBOL_NAME(sys_getresgid16)
594	.long SYMBOL_NAME(sys_prctl)
595	.long SYMBOL_NAME(sys_rt_sigreturn)
596	.long SYMBOL_NAME(sys_rt_sigaction)
597	.long SYMBOL_NAME(sys_rt_sigprocmask)	/* 175 */
598	.long SYMBOL_NAME(sys_rt_sigpending)
599	.long SYMBOL_NAME(sys_rt_sigtimedwait)
600	.long SYMBOL_NAME(sys_rt_sigqueueinfo)
601	.long SYMBOL_NAME(sys_rt_sigsuspend)
602	.long SYMBOL_NAME(sys_pread)		/* 180 */
603	.long SYMBOL_NAME(sys_pwrite)
604	.long SYMBOL_NAME(sys_lchown16);
605	.long SYMBOL_NAME(sys_getcwd)
606	.long SYMBOL_NAME(sys_capget)
607	.long SYMBOL_NAME(sys_capset)           /* 185 */
608	.long SYMBOL_NAME(sys_sigaltstack)
609	.long SYMBOL_NAME(sys_sendfile)
610	.long SYMBOL_NAME(sys_ni_syscall)		/* streams1 */
611	.long SYMBOL_NAME(sys_ni_syscall)		/* streams2 */
612	.long SYMBOL_NAME(sys_vfork)            /* 190 */
613	.long SYMBOL_NAME(sys_getrlimit)
614	.long SYMBOL_NAME(sys_mmap2)
615	.long SYMBOL_NAME(sys_truncate64)
616	.long SYMBOL_NAME(sys_ftruncate64)
617	.long SYMBOL_NAME(sys_stat64)		/* 195 */
618	.long SYMBOL_NAME(sys_lstat64)
619	.long SYMBOL_NAME(sys_fstat64)
620	.long SYMBOL_NAME(sys_chown)
621	.long SYMBOL_NAME(sys_getuid)
622	.long SYMBOL_NAME(sys_getgid)		/* 200 */
623	.long SYMBOL_NAME(sys_geteuid)
624	.long SYMBOL_NAME(sys_getegid)
625	.long SYMBOL_NAME(sys_setreuid)
626	.long SYMBOL_NAME(sys_setregid)
627	.long SYMBOL_NAME(sys_getgroups)	/* 205 */
628	.long SYMBOL_NAME(sys_setgroups)
629	.long SYMBOL_NAME(sys_fchown)
630	.long SYMBOL_NAME(sys_setresuid)
631	.long SYMBOL_NAME(sys_getresuid)
632	.long SYMBOL_NAME(sys_setresgid)	/* 210 */
633	.long SYMBOL_NAME(sys_getresgid)
634	.long SYMBOL_NAME(sys_lchown)
635	.long SYMBOL_NAME(sys_setuid)
636	.long SYMBOL_NAME(sys_setgid)
637	.long SYMBOL_NAME(sys_setfsuid)		/* 215 */
638	.long SYMBOL_NAME(sys_setfsgid)
639	.long SYMBOL_NAME(sys_pivot_root)
640	.long SYMBOL_NAME(sys_ni_syscall)
641	.long SYMBOL_NAME(sys_ni_syscall)
642	.long SYMBOL_NAME(sys_getdents64)	/* 220 */
643	.long SYMBOL_NAME(sys_gettid)
644	.long SYMBOL_NAME(sys_tkill)
645	.long SYMBOL_NAME(sys_setxattr)
646	.long SYMBOL_NAME(sys_lsetxattr)
647	.long SYMBOL_NAME(sys_fsetxattr)	/* 225 */
648	.long SYMBOL_NAME(sys_getxattr)
649	.long SYMBOL_NAME(sys_lgetxattr)
650	.long SYMBOL_NAME(sys_fgetxattr)
651	.long SYMBOL_NAME(sys_listxattr)
652	.long SYMBOL_NAME(sys_llistxattr)	/* 230 */
653	.long SYMBOL_NAME(sys_flistxattr)
654	.long SYMBOL_NAME(sys_removexattr)
655	.long SYMBOL_NAME(sys_lremovexattr)
656	.long SYMBOL_NAME(sys_fremovexattr)
657
658	.rept NR_syscalls-(.-SYMBOL_NAME(sys_call_table))/4
659		.long SYMBOL_NAME(sys_ni_syscall)
660	.endr
661