more changes on original files
[linux-2.4.git] / arch / m68k / kernel / entry.S
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
55 ENTRY(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
63 ENTRY(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
71 ENTRY(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...
82 ENTRY(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
88 badsys:
89         movel   #-ENOSYS,%sp@(PT_D0)
90         jra     SYMBOL_NAME(ret_from_exception)
91
92 do_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)
104 1:      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
109 SYMBOL_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
120 1:      
121 #endif  
122         jra     SYMBOL_NAME(ret_from_exception)
123
124 ENTRY(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
138 SYMBOL_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
154 5:
155         tstl    %curptr@(TASK_STATE)    | state
156         jne     SYMBOL_NAME(reschedule)
157
158         tstl    %curptr@(TASK_SIGPENDING)
159         jne     Lsignal_return
160 2:      RESTORE_ALL
161
162 Lsignal_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
173 do_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
186 SYMBOL_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
208 ENTRY(nmi_handler)
209         rte
210 #endif
211 #endif
212
213 /*
214 ** This is the main interrupt handler, responsible for calling process_int()
215 */
216 SYMBOL_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
232 1:
233 #endif          
234         jbsr    SYMBOL_NAME(process_int)|  process the IRQ
235 3:      addql   #8,%sp                  |  pop parameters off stack
236
237 SYMBOL_NAME_LABEL(ret_from_interrupt)
238         subql   #1,SYMBOL_NAME(irq_stat)+4      | local_irq_count
239         jeq     1f
240 2:
241         RESTORE_ALL
242 1:
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
256 SYMBOL_NAME_LABEL(bad_interrupt)
257         addql   #1,SYMBOL_NAME(num_spurious)
258         rte
259
260 ENTRY(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
268 ENTRY(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
276 ENTRY(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
284 ENTRY(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
292 ENTRY(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
300 ENTRY(sys_sigreturn)
301         SAVE_SWITCH_STACK
302         jbsr    SYMBOL_NAME(do_sigreturn)
303         RESTORE_SWITCH_STACK
304         rts
305
306 ENTRY(sys_rt_sigreturn)
307         SAVE_SWITCH_STACK
308         jbsr    SYMBOL_NAME(do_rt_sigreturn)
309         RESTORE_SWITCH_STACK
310         rts
311
312 SYMBOL_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)
358 1:      tstb    %a0@(TASK_THREAD+THREAD_FPSTATE)
359         jeq     3f
360 #endif
361 2:      fmovemx %fp0-%fp7,%a0@(TASK_THREAD+THREAD_FPREG)
362         fmoveml %fpcr/%fpsr/%fpiar,%a0@(TASK_THREAD+THREAD_FPCNTL)
363 3:
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)
390 1:      tstb    %a1@(TASK_THREAD+THREAD_FPSTATE)
391         jeq     3f
392 #endif  
393 2:      fmovemx %a1@(TASK_THREAD+THREAD_FPREG),%fp0-%fp7
394         fmoveml %a1@(TASK_THREAD+THREAD_FPCNTL),%fpcr/%fpsr/%fpiar
395 3:      frestore %a1@(TASK_THREAD+THREAD_FPSTATE)
396 4:
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
420 ALIGN
421 SYMBOL_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