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