]> err.no Git - linux-2.6/blob - arch/m32r/kernel/entry.S
m32r: Cosmetic updates of arch/m32r/kernel/entry.S
[linux-2.6] / arch / m32r / kernel / entry.S
1 /*
2  *  linux/arch/m32r/kernel/entry.S
3  *
4  *  Copyright (c) 2001, 2002  Hirokazu Takata, Hitoshi Yamamoto, H. Kondo
5  *  Copyright (c) 2003  Hitoshi Yamamoto
6  *  Copyright (c) 2004  Hirokazu Takata <takata at linux-m32r.org>
7  *
8  *  Taken from i386 version.
9  *    Copyright (C) 1991, 1992  Linus Torvalds
10  */
11
12 /*
13  * entry.S contains the system-call and fault low-level handling routines.
14  * This also contains the timer-interrupt handler, as well as all interrupts
15  * and faults that can result in a task-switch.
16  *
17  * NOTE: This code handles signal-recognition, which happens every time
18  * after a timer-interrupt and after each system call.
19  *
20  * Stack layout in 'ret_from_system_call':
21  *      ptrace needs to have all regs on the stack.
22  *      if the order here is changed, it needs to be
23  *      updated in fork.c:copy_thread, signal.c:do_signal,
24  *      ptrace.c and ptrace.h
25  *
26  * M32R/M32Rx/M32R2
27  *       @(sp)      - r4
28  *       @(0x04,sp) - r5
29  *       @(0x08,sp) - r6
30  *       @(0x0c,sp) - *pt_regs
31  *       @(0x10,sp) - r0
32  *       @(0x14,sp) - r1
33  *       @(0x18,sp) - r2
34  *       @(0x1c,sp) - r3
35  *       @(0x20,sp) - r7
36  *       @(0x24,sp) - r8
37  *       @(0x28,sp) - r9
38  *       @(0x2c,sp) - r10
39  *       @(0x30,sp) - r11
40  *       @(0x34,sp) - r12
41  *       @(0x38,sp) - syscall_nr
42  *       @(0x3c,sp) - acc0h
43  *       @(0x40,sp) - acc0l
44  *       @(0x44,sp) - acc1h             ; ISA_DSP_LEVEL2 only
45  *       @(0x48,sp) - acc1l             ; ISA_DSP_LEVEL2 only
46  *       @(0x4c,sp) - psw
47  *       @(0x50,sp) - bpc
48  *       @(0x54,sp) - bbpsw
49  *       @(0x58,sp) - bbpc
50  *       @(0x5c,sp) - spu (cr3)
51  *       @(0x60,sp) - fp (r13)
52  *       @(0x64,sp) - lr (r14)
53  *       @(0x68,sp) - spi (cr2)
54  *       @(0x6c,sp) - orig_r0
55  */
56
57 #include <linux/linkage.h>
58 #include <asm/irq.h>
59 #include <asm/unistd.h>
60 #include <asm/assembler.h>
61 #include <asm/thread_info.h>
62 #include <asm/errno.h>
63 #include <asm/segment.h>
64 #include <asm/smp.h>
65 #include <asm/page.h>
66 #include <asm/m32r.h>
67 #include <asm/mmu_context.h>
68
69 #if !defined(CONFIG_MMU)
70 #define sys_madvise             sys_ni_syscall
71 #define sys_readahead           sys_ni_syscall
72 #define sys_mprotect            sys_ni_syscall
73 #define sys_msync               sys_ni_syscall
74 #define sys_mlock               sys_ni_syscall
75 #define sys_munlock             sys_ni_syscall
76 #define sys_mlockall            sys_ni_syscall
77 #define sys_munlockall          sys_ni_syscall
78 #define sys_mremap              sys_ni_syscall
79 #define sys_mincore             sys_ni_syscall
80 #define sys_remap_file_pages    sys_ni_syscall
81 #endif /* CONFIG_MMU */
82
83 #define R4(reg)                 @reg
84 #define R5(reg)                 @(0x04,reg)
85 #define R6(reg)                 @(0x08,reg)
86 #define PTREGS(reg)             @(0x0C,reg)
87 #define R0(reg)                 @(0x10,reg)
88 #define R1(reg)                 @(0x14,reg)
89 #define R2(reg)                 @(0x18,reg)
90 #define R3(reg)                 @(0x1C,reg)
91 #define R7(reg)                 @(0x20,reg)
92 #define R8(reg)                 @(0x24,reg)
93 #define R9(reg)                 @(0x28,reg)
94 #define R10(reg)                @(0x2C,reg)
95 #define R11(reg)                @(0x30,reg)
96 #define R12(reg)                @(0x34,reg)
97 #define SYSCALL_NR(reg)         @(0x38,reg)
98 #define ACC0H(reg)              @(0x3C,reg)
99 #define ACC0L(reg)              @(0x40,reg)
100 #define ACC1H(reg)              @(0x44,reg)
101 #define ACC1L(reg)              @(0x48,reg)
102 #define PSW(reg)                @(0x4C,reg)
103 #define BPC(reg)                @(0x50,reg)
104 #define BBPSW(reg)              @(0x54,reg)
105 #define BBPC(reg)               @(0x58,reg)
106 #define SPU(reg)                @(0x5C,reg)
107 #define FP(reg)                 @(0x60,reg)  /* FP = R13 */
108 #define LR(reg)                 @(0x64,reg)
109 #define SP(reg)                 @(0x68,reg)
110 #define ORIG_R0(reg)            @(0x6C,reg)
111
112 #ifdef CONFIG_PREEMPT
113 #define preempt_stop(x)         CLI(x)
114 #else
115 #define preempt_stop(x)
116 #define resume_kernel           restore_all
117 #endif
118
119 ENTRY(ret_from_fork)
120         pop     r0
121         bl      schedule_tail
122         GET_THREAD_INFO(r8)
123         bra     syscall_exit
124
125 /*
126  * Return to user mode is not as complex as all this looks,
127  * but we want the default path for a system call return to
128  * go as quickly as possible which is why some of this is
129  * less clear than it otherwise should be.
130  */
131
132         ; userspace resumption stub bypassing syscall exit tracing
133         ALIGN
134 ret_from_exception:
135         preempt_stop(r4)
136 ret_from_intr:
137         ld      r4, PSW(sp)
138 #ifdef CONFIG_ISA_M32R2
139         and3    r4, r4, #0x8800         ; check BSM and BPM bits
140 #else
141         and3    r4, r4, #0x8000         ; check BSM bit
142 #endif
143         beqz    r4, resume_kernel
144 ENTRY(resume_userspace)
145         CLI(r4)                         ; make sure we don't miss an interrupt
146                                         ; setting need_resched or sigpending
147                                         ; between sampling and the iret
148         GET_THREAD_INFO(r8)
149         ld      r9, @(TI_FLAGS, r8)
150         and3    r4, r9, #_TIF_WORK_MASK ; is there any work to be done on
151                                         ; int/exception return?
152         bnez    r4, work_pending
153         bra     restore_all
154
155 #ifdef CONFIG_PREEMPT
156 ENTRY(resume_kernel)
157         GET_THREAD_INFO(r8)
158         ld      r9, @(TI_PRE_COUNT, r8) ; non-zero preempt_count ?
159         bnez    r9, restore_all
160 need_resched:
161         ld      r9, @(TI_FLAGS, r8)     ; need_resched set ?
162         and3    r4, r9, #_TIF_NEED_RESCHED
163         beqz    r4, restore_all
164         ld      r4, PSW(sp)             ; interrupts off (exception path) ?
165         and3    r4, r4, #0x4000
166         beqz    r4, restore_all
167         LDIMM   (r4, PREEMPT_ACTIVE)
168         st      r4, @(TI_PRE_COUNT, r8)
169         STI(r4)
170         bl      schedule
171         ldi     r4, #0
172         st      r4, @(TI_PRE_COUNT, r8)
173         CLI(r4)
174         bra     need_resched
175 #endif
176
177         ; system call handler stub
178 ENTRY(system_call)
179         SWITCH_TO_KERNEL_STACK
180         SAVE_ALL
181         STI(r4)                         ; Enable interrupt
182         st      sp, PTREGS(sp)          ; implicit pt_regs parameter
183         cmpui   r7, #NR_syscalls
184         bnc     syscall_badsys
185         st      r7, SYSCALL_NR(sp)      ; syscall_nr
186                                         ; system call tracing in operation
187         GET_THREAD_INFO(r8)
188         ld      r9, @(TI_FLAGS, r8)
189         and3    r4, r9, #_TIF_SYSCALL_TRACE
190         bnez    r4, syscall_trace_entry
191 syscall_call:
192         slli    r7, #2                  ; table jump for the system call
193         LDIMM   (r4, sys_call_table)
194         add     r7, r4
195         ld      r7, @r7
196         jl      r7                      ; execute system call
197         st      r0, R0(sp)              ; save the return value
198 syscall_exit:
199         CLI(r4)                         ; make sure we don't miss an interrupt
200                                         ; setting need_resched or sigpending
201                                         ; between sampling and the iret
202         ld      r9, @(TI_FLAGS, r8)
203         and3    r4, r9, #_TIF_ALLWORK_MASK      ; current->work
204         bnez    r4, syscall_exit_work
205 restore_all:
206         RESTORE_ALL
207
208         # perform work that needs to be done immediately before resumption
209         # r9 : flags
210         ALIGN
211 work_pending:
212         and3    r4, r9, #_TIF_NEED_RESCHED
213         beqz    r4, work_notifysig
214 work_resched:
215         bl      schedule
216         CLI(r4)                         ; make sure we don't miss an interrupt
217                                         ; setting need_resched or sigpending
218                                         ; between sampling and the iret
219         ld      r9, @(TI_FLAGS, r8)
220         and3    r4, r9, #_TIF_WORK_MASK ; is there any work to be done other
221                                         ; than syscall tracing?
222         beqz    r4, restore_all
223         and3    r4, r4, #_TIF_NEED_RESCHED
224         bnez    r4, work_resched
225
226 work_notifysig:                         ; deal with pending signals and
227                                         ; notify-resume requests
228         mv      r0, sp                  ; arg1 : struct pt_regs *regs
229         ldi     r1, #0                  ; arg2 : sigset_t *oldset
230         mv      r2, r9                  ; arg3 : __u32 thread_info_flags
231         bl      do_notify_resume
232         bra     restore_all
233
234         ; perform syscall exit tracing
235         ALIGN
236 syscall_trace_entry:
237         ldi     r4, #-ENOSYS
238         st      r4, R0(sp)
239         bl      do_syscall_trace
240         ld      r0, ORIG_R0(sp)
241         ld      r1, R1(sp)
242         ld      r2, R2(sp)
243         ld      r3, R3(sp)
244         ld      r4, R4(sp)
245         ld      r5, R5(sp)
246         ld      r6, R6(sp)
247         ld      r7, SYSCALL_NR(sp)
248         cmpui   r7, #NR_syscalls
249         bc      syscall_call
250         bra     syscall_exit
251
252         ; perform syscall exit tracing
253         ALIGN
254 syscall_exit_work:
255         ld      r9, @(TI_FLAGS, r8)
256         and3    r4, r9, #_TIF_SYSCALL_TRACE
257         beqz    r4, work_pending
258         STI(r4)                         ; could let do_syscall_trace() call
259                                         ; schedule() instead
260         bl      do_syscall_trace
261         bra     resume_userspace
262
263         ALIGN
264 syscall_fault:
265         SAVE_ALL
266         GET_THREAD_INFO(r8)
267         ldi     r4, #-EFAULT
268         st      r4, R0(sp)
269         bra     resume_userspace
270
271         ALIGN
272 syscall_badsys:
273         ldi     r4, #-ENOSYS
274         st      r4, R0(sp)
275         bra     resume_userspace
276
277         .global eit_vector
278
279         .equ ei_vec_table, eit_vector + 0x0200
280
281 /*
282  * EI handler routine
283  */
284 ENTRY(ei_handler)
285 #if defined(CONFIG_CHIP_M32700)
286         ; WORKAROUND: force to clear SM bit and use the kernel stack (SPI).
287         SWITCH_TO_KERNEL_STACK
288 #endif
289         SAVE_ALL
290         mv      r1, sp                  ; arg1(regs)
291         ; get ICU status
292         seth    r0, #shigh(M32R_ICU_ISTS_ADDR)
293         ld      r0, @(low(M32R_ICU_ISTS_ADDR),r0)
294         push    r0
295 #if defined(CONFIG_SMP)
296         /*
297          * If IRQ == 0      --> Nothing to do,  Not write IMASK
298          * If IRQ == IPI    --> Do IPI handler, Not write IMASK
299          * If IRQ != 0, IPI --> Do do_IRQ(),    Write IMASK
300          */
301         slli    r0, #4
302         srli    r0, #24                 ; r0(irq_num<<2)
303         ;; IRQ exist check
304 #if defined(CONFIG_CHIP_M32700)
305         /* WORKAROUND: IMASK bug M32700-TS1, TS2 chip. */
306         bnez    r0, 0f
307         ld24    r14, #0x00070000
308         seth    r0, #shigh(M32R_ICU_IMASK_ADDR)
309         st      r14, @(low(M32R_ICU_IMASK_ADDR),r0)
310         bra     1f
311         .fillinsn
312 0:
313 #endif /* CONFIG_CHIP_M32700 */
314         beqz    r0, 1f                  ; if (!irq_num) goto exit
315         ;; IPI check
316         cmpi    r0, #(M32R_IRQ_IPI0<<2) ; ISN < IPI0 check
317         bc      2f
318         cmpi    r0, #((M32R_IRQ_IPI7+1)<<2)     ; ISN > IPI7 check
319         bnc     2f
320         LDIMM   (r2, ei_vec_table)
321         add     r2, r0
322         ld      r2, @r2
323         beqz    r2, 1f                  ; if (no IPI handler) goto exit
324         mv      r0, r1                  ; arg0(regs)
325         jl      r2
326         .fillinsn
327 1:
328         addi    sp, #4
329         bra     restore_all
330         .fillinsn
331 2:
332         srli    r0, #2
333 #else /* not CONFIG_SMP */
334         srli    r0, #22                 ; r0(irq)
335 #endif /* not CONFIG_SMP */
336
337 #if defined(CONFIG_PLAT_HAS_INT1ICU)
338         add3    r2, r0, #-(M32R_IRQ_INT1)       ; INT1# interrupt
339         bnez    r2, 3f
340         seth    r0, #shigh(M32R_INT1ICU_ISTS)
341         lduh    r0, @(low(M32R_INT1ICU_ISTS),r0)        ; bit10-6 : ISN
342         slli    r0, #21
343         srli    r0, #27                         ; ISN
344         addi    r0, #(M32R_INT1ICU_IRQ_BASE)
345         bra     check_end
346         .fillinsn
347 3:
348 #endif /* CONFIG_PLAT_HAS_INT1ICU */
349 #if defined(CONFIG_PLAT_HAS_INT0ICU)
350         add3    r2, r0, #-(M32R_IRQ_INT0)       ; INT0# interrupt
351         bnez    r2, 4f
352         seth    r0, #shigh(M32R_INT0ICU_ISTS)
353         lduh    r0, @(low(M32R_INT0ICU_ISTS),r0)        ; bit10-6 : ISN
354         slli    r0, #21
355         srli    r0, #27                         ; ISN
356         addi    r0, #(M32R_INT0ICU_IRQ_BASE)
357         bra     check_end
358         .fillinsn
359 4:
360 #endif /* CONFIG_PLAT_HAS_INT0ICU */
361 #if defined(CONFIG_PLAT_HAS_INT2ICU)
362         add3    r2, r0, #-(M32R_IRQ_INT2)       ; INT2# interrupt
363         bnez    r2, 5f
364         seth    r0, #shigh(M32R_INT2ICU_ISTS)
365         lduh    r0, @(low(M32R_INT2ICU_ISTS),r0)        ; bit10-6 : ISN
366         slli    r0, #21
367         srli    r0, #27                         ; ISN
368         addi    r0, #(M32R_INT2ICU_IRQ_BASE)
369         ; bra   check_end
370         .fillinsn
371 5:
372 #endif /* CONFIG_PLAT_HAS_INT2ICU */
373
374 check_end:
375         bl      do_IRQ
376         pop     r14
377         seth    r0, #shigh(M32R_ICU_IMASK_ADDR)
378         st      r14, @(low(M32R_ICU_IMASK_ADDR),r0)
379         bra  ret_from_intr
380
381 /*
382  * Default EIT handler
383  */
384         ALIGN
385 int_msg:
386         .asciz  "Unknown interrupt\n"
387         .byte   0
388
389 ENTRY(default_eit_handler)
390         push    r0
391         mvfc    r0, psw
392         push    r1
393         push    r2
394         push    r3
395         push    r0
396         LDIMM   (r0, __KERNEL_DS)
397         mv      r0, r1
398         mv      r0, r2
399         LDIMM   (r0, int_msg)
400         bl      printk
401         pop     r0
402         pop     r3
403         pop     r2
404         pop     r1
405         mvtc    r0, psw
406         pop     r0
407 infinit:
408         bra     infinit
409
410 #ifdef CONFIG_MMU
411 /*
412  * Access Exception handler
413  */
414 ENTRY(ace_handler)
415         SWITCH_TO_KERNEL_STACK
416         SAVE_ALL
417
418         seth    r2, #shigh(MMU_REG_BASE)        /* Check status register */
419         ld      r4, @(low(MESTS_offset),r2)
420         st      r4, @(low(MESTS_offset),r2)
421         srl3    r1, r4, #4
422 #ifdef CONFIG_CHIP_M32700
423         and3    r1, r1, #0x0000ffff
424         ; WORKAROUND: ignore TME bit for the M32700(TS1).
425 #endif /* CONFIG_CHIP_M32700 */
426         beqz    r1, inst
427 oprand:
428         ld      r2, @(low(MDEVA_offset),r2)     ; set address
429         srli    r1, #1
430         bra     1f
431 inst:
432         and3    r1, r4, #2
433         srli    r1, #1
434         or3     r1, r1, #8
435         mvfc    r2, bpc                         ; set address
436         .fillinsn
437 1:
438         mvfc    r3, psw
439         mv      r0, sp
440         and3    r3, r3, 0x800
441         srli    r3, #9
442         or      r1, r3
443         /*
444          * do_page_fault():
445          *    r0 : struct pt_regs *regs
446          *    r1 : unsigned long error-code
447          *    r2 : unsigned long address
448          * error-code:
449          *    +------+------+------+------+
450          *    | bit3 | bit2 | bit1 | bit0 |
451          *    +------+------+------+------+
452          *    bit 3 == 0:means data,          1:means instruction
453          *    bit 2 == 0:means kernel,        1:means user-mode
454          *    bit 1 == 0:means read,          1:means write
455          *    bit 0 == 0:means no page found  1:means protection fault
456          *
457          */
458         bl      do_page_fault
459         bra     ret_from_intr
460 #endif  /* CONFIG_MMU */
461
462
463 ENTRY(alignment_check)
464         /* void alignment_check(int error_code) */
465         SWITCH_TO_KERNEL_STACK
466         SAVE_ALL
467         ldi     r1, #0x30                       ; error_code
468         mv      r0, sp                          ; pt_regs
469         bl      do_alignment_check
470 error_code:
471         bra     ret_from_exception
472
473 ENTRY(rie_handler)
474         /* void rie_handler(int error_code) */
475         SWITCH_TO_KERNEL_STACK
476         SAVE_ALL
477         ldi     r1, #0x20                       ; error_code
478         mv      r0, sp                          ; pt_regs
479         bl      do_rie_handler
480         bra     error_code
481
482 ENTRY(pie_handler)
483         /* void pie_handler(int error_code) */
484         SWITCH_TO_KERNEL_STACK
485         SAVE_ALL
486         ldi     r1, #0                          ; error_code ; FIXME
487         mv      r0, sp                          ; pt_regs
488         bl      do_pie_handler
489         bra     error_code
490
491 ENTRY(debug_trap)
492         /* void debug_trap(void) */
493         .global withdraw_debug_trap
494         SWITCH_TO_KERNEL_STACK
495         SAVE_ALL
496         mv      r0, sp                          ; pt_regs
497         bl      withdraw_debug_trap
498         ldi     r1, #0                          ; error_code
499         mv      r0, sp                          ; pt_regs
500         bl      do_debug_trap
501         bra     error_code
502
503 ENTRY(ill_trap)
504         /* void ill_trap(void) */
505         SWITCH_TO_KERNEL_STACK
506         SAVE_ALL
507         ldi     r1, #0                          ; error_code ; FIXME
508         mv      r0, sp                          ; pt_regs
509         bl      do_ill_trap
510         bra     error_code
511
512 ENTRY(cache_flushing_handler)
513         /* void _flush_cache_all(void); */
514         .global _flush_cache_all
515         SWITCH_TO_KERNEL_STACK
516         push    r0
517         push    r1
518         push    r2
519         push    r3
520         push    r4
521         push    r5
522         push    r6
523         push    r7
524         push    lr
525         bl      _flush_cache_all
526         pop     lr
527         pop     r7
528         pop     r6
529         pop     r5
530         pop     r4
531         pop     r3
532         pop     r2
533         pop     r1
534         pop     r0
535         rte
536
537 .data
538 ENTRY(sys_call_table)
539         .long sys_restart_syscall       /* 0  -  old "setup()" system call*/
540         .long sys_exit
541         .long sys_fork
542         .long sys_read
543         .long sys_write
544         .long sys_open                  /* 5 */
545         .long sys_close
546         .long sys_waitpid
547         .long sys_creat
548         .long sys_link
549         .long sys_unlink                /* 10 */
550         .long sys_execve
551         .long sys_chdir
552         .long sys_time
553         .long sys_mknod
554         .long sys_chmod                 /* 15 */
555         .long sys_ni_syscall            /* lchown16 syscall holder */
556         .long sys_ni_syscall            /* old break syscall holder */
557         .long sys_ni_syscall            /* old stat syscall holder */
558         .long sys_lseek
559         .long sys_getpid                /* 20 */
560         .long sys_mount
561         .long sys_oldumount
562         .long sys_ni_syscall            /* setuid16 syscall holder */
563         .long sys_ni_syscall            /* getuid16 syscall holder */
564         .long sys_stime                 /* 25 */
565         .long sys_ptrace
566         .long sys_alarm
567         .long sys_ni_syscall            /* old fstat syscall holder */
568         .long sys_pause
569         .long sys_utime                 /* 30 */
570         .long sys_ni_syscall            /* old stty syscall holder */
571         .long sys_cachectl              /* for M32R */ /* old gtty syscall holder */
572         .long sys_access
573         .long sys_ni_syscall            /* nice syscall holder */
574         .long sys_ni_syscall            /* 35  -  old ftime syscall holder */
575         .long sys_sync
576         .long sys_kill
577         .long sys_rename
578         .long sys_mkdir
579         .long sys_rmdir                 /* 40 */
580         .long sys_dup
581         .long sys_pipe
582         .long sys_times
583         .long sys_ni_syscall            /* old prof syscall holder */
584         .long sys_brk                   /* 45 */
585         .long sys_ni_syscall            /* setgid16 syscall holder */
586         .long sys_getgid                /* will be unused */
587         .long sys_ni_syscall            /* signal syscall holder */
588         .long sys_ni_syscall            /* geteuid16  syscall holder */
589         .long sys_ni_syscall            /* 50 - getegid16 syscall holder */
590         .long sys_acct
591         .long sys_umount                /* recycled never used phys() */
592         .long sys_ni_syscall            /* old lock syscall holder */
593         .long sys_ioctl
594         .long sys_fcntl                 /* 55 - will be unused */
595         .long sys_ni_syscall            /* mpx syscall holder */
596         .long sys_setpgid
597         .long sys_ni_syscall            /* old ulimit syscall holder */
598         .long sys_ni_syscall            /* sys_olduname */
599         .long sys_umask                 /* 60 */
600         .long sys_chroot
601         .long sys_ustat
602         .long sys_dup2
603         .long sys_getppid
604         .long sys_getpgrp               /* 65 */
605         .long sys_setsid
606         .long sys_ni_syscall            /* sigaction syscall holder */
607         .long sys_ni_syscall            /* sgetmask syscall holder */
608         .long sys_ni_syscall            /* ssetmask syscall holder */
609         .long sys_ni_syscall            /* 70 - setreuid16 syscall holder */
610         .long sys_ni_syscall            /* setregid16 syscall holder */
611         .long sys_ni_syscall            /* sigsuspend syscall holder */
612         .long sys_ni_syscall            /* sigpending syscall holder */
613         .long sys_sethostname
614         .long sys_setrlimit             /* 75 */
615         .long sys_getrlimit/*will be unused*/
616         .long sys_getrusage
617         .long sys_gettimeofday
618         .long sys_settimeofday
619         .long sys_ni_syscall            /* 80 - getgroups16 syscall holder */
620         .long sys_ni_syscall            /* setgroups16 syscall holder */
621         .long sys_ni_syscall            /* sys_oldselect */
622         .long sys_symlink
623         .long sys_ni_syscall            /* old lstat syscall holder */
624         .long sys_readlink              /* 85 */
625         .long sys_uselib
626         .long sys_swapon
627         .long sys_reboot
628         .long sys_ni_syscall            /* readdir syscall holder */
629         .long sys_ni_syscall            /* 90 - old_mmap syscall holder */
630         .long sys_munmap
631         .long sys_truncate
632         .long sys_ftruncate
633         .long sys_fchmod
634         .long sys_ni_syscall            /* 95 - fchwon16  syscall holder */
635         .long sys_getpriority
636         .long sys_setpriority
637         .long sys_ni_syscall            /* old profil syscall holder */
638         .long sys_statfs
639         .long sys_fstatfs               /* 100 */
640         .long sys_ni_syscall            /* ioperm syscall holder */
641         .long sys_socketcall
642         .long sys_syslog
643         .long sys_setitimer
644         .long sys_getitimer             /* 105 */
645         .long sys_newstat
646         .long sys_newlstat
647         .long sys_newfstat
648         .long sys_ni_syscall            /* old uname syscall holder */
649         .long sys_ni_syscall            /* 110  -  iopl syscall holder */
650         .long sys_vhangup
651         .long sys_ni_syscall            /* idle syscall holder */
652         .long sys_ni_syscall            /* vm86old syscall holder */
653         .long sys_wait4
654         .long sys_swapoff               /* 115 */
655         .long sys_sysinfo
656         .long sys_ipc
657         .long sys_fsync
658         .long sys_ni_syscall            /* sigreturn syscall holder */
659         .long sys_clone                 /* 120 */
660         .long sys_setdomainname
661         .long sys_newuname
662         .long sys_ni_syscall            /* modify_ldt syscall holder */
663         .long sys_adjtimex
664         .long sys_mprotect              /* 125 */
665         .long sys_ni_syscall            /* sigprocmask syscall holder */
666         .long sys_ni_syscall            /* create_module syscall holder */
667         .long sys_init_module
668         .long sys_delete_module
669         .long sys_ni_syscall            /* 130 - get_kernel_syms */
670         .long sys_quotactl
671         .long sys_getpgid
672         .long sys_fchdir
673         .long sys_bdflush
674         .long sys_sysfs                 /* 135 */
675         .long sys_personality
676         .long sys_ni_syscall            /* afs_syscall syscall holder */
677         .long sys_ni_syscall            /* setfsuid16 syscall holder */
678         .long sys_ni_syscall            /* setfsgid16 syscall holder */
679         .long sys_llseek                /* 140 */
680         .long sys_getdents
681         .long sys_select
682         .long sys_flock
683         .long sys_msync
684         .long sys_readv                 /* 145 */
685         .long sys_writev
686         .long sys_getsid
687         .long sys_fdatasync
688         .long sys_sysctl
689         .long sys_mlock                 /* 150 */
690         .long sys_munlock
691         .long sys_mlockall
692         .long sys_munlockall
693         .long sys_sched_setparam
694         .long sys_sched_getparam        /* 155 */
695         .long sys_sched_setscheduler
696         .long sys_sched_getscheduler
697         .long sys_sched_yield
698         .long sys_sched_get_priority_max
699         .long sys_sched_get_priority_min        /* 160 */
700         .long sys_sched_rr_get_interval
701         .long sys_nanosleep
702         .long sys_mremap
703         .long sys_ni_syscall            /* setresuid16 syscall holder */
704         .long sys_ni_syscall            /* 165 - getresuid16 syscall holder */
705         .long sys_tas                   /* vm86 syscall holder */
706         .long sys_ni_syscall            /* query_module syscall holder */
707         .long sys_poll
708         .long sys_nfsservctl
709         .long sys_setresgid             /* 170 */
710         .long sys_getresgid
711         .long sys_prctl
712         .long sys_rt_sigreturn
713         .long sys_rt_sigaction
714         .long sys_rt_sigprocmask        /* 175 */
715         .long sys_rt_sigpending
716         .long sys_rt_sigtimedwait
717         .long sys_rt_sigqueueinfo
718         .long sys_rt_sigsuspend
719         .long sys_pread64               /* 180 */
720         .long sys_pwrite64
721         .long sys_ni_syscall            /* chown16 syscall holder */
722         .long sys_getcwd
723         .long sys_capget
724         .long sys_capset                /* 185 */
725         .long sys_sigaltstack
726         .long sys_sendfile
727         .long sys_ni_syscall            /* streams1 */
728         .long sys_ni_syscall            /* streams2 */
729         .long sys_vfork                 /* 190 */
730         .long sys_getrlimit
731         .long sys_mmap2
732         .long sys_truncate64
733         .long sys_ftruncate64
734         .long sys_stat64                /* 195 */
735         .long sys_lstat64
736         .long sys_fstat64
737         .long sys_lchown
738         .long sys_getuid
739         .long sys_getgid                /* 200 */
740         .long sys_geteuid
741         .long sys_getegid
742         .long sys_setreuid
743         .long sys_setregid
744         .long sys_getgroups             /* 205 */
745         .long sys_setgroups
746         .long sys_fchown
747         .long sys_setresuid
748         .long sys_getresuid
749         .long sys_setresgid             /* 210 */
750         .long sys_getresgid
751         .long sys_chown
752         .long sys_setuid
753         .long sys_setgid
754         .long sys_setfsuid              /* 215 */
755         .long sys_setfsgid
756         .long sys_pivot_root
757         .long sys_mincore
758         .long sys_madvise
759         .long sys_getdents64            /* 220 */
760         .long sys_fcntl64
761         .long sys_ni_syscall            /* reserved for TUX */
762         .long sys_ni_syscall            /* Reserved for Security */
763         .long sys_gettid
764         .long sys_readahead             /* 225 */
765         .long sys_setxattr
766         .long sys_lsetxattr
767         .long sys_fsetxattr
768         .long sys_getxattr
769         .long sys_lgetxattr             /* 230 */
770         .long sys_fgetxattr
771         .long sys_listxattr
772         .long sys_llistxattr
773         .long sys_flistxattr
774         .long sys_removexattr           /* 235 */
775         .long sys_lremovexattr
776         .long sys_fremovexattr
777         .long sys_tkill
778         .long sys_sendfile64
779         .long sys_futex                 /* 240 */
780         .long sys_sched_setaffinity
781         .long sys_sched_getaffinity
782         .long sys_ni_syscall            /* reserved for "set_thread_area" system call */
783         .long sys_ni_syscall            /* reserved for "get_thread_area" system call */
784         .long sys_io_setup              /* 245 */
785         .long sys_io_destroy
786         .long sys_io_getevents
787         .long sys_io_submit
788         .long sys_io_cancel
789         .long sys_fadvise64             /* 250 */
790         .long sys_ni_syscall
791         .long sys_exit_group
792         .long sys_lookup_dcookie
793         .long sys_epoll_create
794         .long sys_epoll_ctl             /* 255 */
795         .long sys_epoll_wait
796         .long sys_remap_file_pages
797         .long sys_set_tid_address
798         .long sys_timer_create
799         .long sys_timer_settime         /* 260 */
800         .long sys_timer_gettime
801         .long sys_timer_getoverrun
802         .long sys_timer_delete
803         .long sys_clock_settime
804         .long sys_clock_gettime         /* 265 */
805         .long sys_clock_getres
806         .long sys_clock_nanosleep
807         .long sys_statfs64
808         .long sys_fstatfs64
809         .long sys_tgkill                /* 270 */
810         .long sys_utimes
811         .long sys_fadvise64_64
812         .long sys_ni_syscall            /* Reserved for sys_vserver */
813         .long sys_ni_syscall            /* Reserved for sys_mbind */
814         .long sys_ni_syscall            /* Reserved for sys_get_mempolicy */
815         .long sys_ni_syscall            /* Reserved for sys_set_mempolicy */
816         .long sys_mq_open
817         .long sys_mq_unlink
818         .long sys_mq_timedsend
819         .long sys_mq_timedreceive       /* 280 */
820         .long sys_mq_notify
821         .long sys_mq_getsetattr
822         .long sys_ni_syscall            /* reserved for kexec */
823         .long sys_waitid
824
825 syscall_table_size=(.-sys_call_table)