blob: 450b106ee613248db4facfc77ccbb219b8a17cb3 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
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
Hirokazu Takata8e8ff022006-04-18 22:21:20 -070023 * updated in fork.c:copy_thread, signal.c:do_signal,
Linus Torvalds1da177e2005-04-16 15:20:36 -070024 * ptrace.c and ptrace.h
25 *
Hirokazu Takata8b03a632006-12-08 02:35:54 -080026 * 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
Linus Torvalds1da177e2005-04-16 15:20:36 -070055 */
56
Linus Torvalds1da177e2005-04-16 15:20:36 -070057#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)
Linus Torvalds1da177e2005-04-16 15:20:36 -070098#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)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700111
Linus Torvalds1da177e2005-04-16 15:20:36 -0700112#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
119ENTRY(ret_from_fork)
Hirokazu Takata41272722006-04-18 22:21:38 -0700120 pop r0
Linus Torvalds1da177e2005-04-16 15:20:36 -0700121 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
134ret_from_exception:
135 preempt_stop(r4)
136ret_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
144ENTRY(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
156ENTRY(resume_kernel)
157 GET_THREAD_INFO(r8)
158 ld r9, @(TI_PRE_COUNT, r8) ; non-zero preempt_count ?
159 bnez r9, restore_all
160need_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
178ENTRY(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
191syscall_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
198syscall_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
205restore_all:
206 RESTORE_ALL
207
208 # perform work that needs to be done immediately before resumption
Hirokazu Takata8e8ff022006-04-18 22:21:20 -0700209 # r9 : flags
Linus Torvalds1da177e2005-04-16 15:20:36 -0700210 ALIGN
211work_pending:
212 and3 r4, r9, #_TIF_NEED_RESCHED
213 beqz r4, work_notifysig
214work_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
226work_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
236syscall_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
254syscall_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
264syscall_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
272syscall_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 */
284ENTRY(ei_handler)
285#if defined(CONFIG_CHIP_M32700)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700286 ; WORKAROUND: force to clear SM bit and use the kernel stack (SPI).
Hirokazu Takata5171b102007-08-17 18:11:37 +0900287 SWITCH_TO_KERNEL_STACK
Linus Torvalds1da177e2005-04-16 15:20:36 -0700288#endif
289 SAVE_ALL
290 mv r1, sp ; arg1(regs)
Hirokazu Takatade2232e2007-08-18 00:10:18 +0900291 ; get ICU status
Linus Torvalds1da177e2005-04-16 15:20:36 -0700292 seth r0, #shigh(M32R_ICU_ISTS_ADDR)
293 ld r0, @(low(M32R_ICU_ISTS_ADDR),r0)
Hirokazu Takata41272722006-04-18 22:21:38 -0700294 push r0
Linus Torvalds1da177e2005-04-16 15:20:36 -0700295#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. */
Hirokazu Takata5171b102007-08-17 18:11:37 +0900306 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
3120:
313#endif /* CONFIG_CHIP_M32700 */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700314 beqz r0, 1f ; if (!irq_num) goto exit
Linus Torvalds1da177e2005-04-16 15:20:36 -0700315 ;; 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
3271:
328 addi sp, #4
Hirokazu Takataabd0a782007-08-17 23:40:37 +0900329 bra restore_all
Linus Torvalds1da177e2005-04-16 15:20:36 -0700330 .fillinsn
3312:
332 srli r0, #2
Hirokazu Takata5171b102007-08-17 18:11:37 +0900333#else /* not CONFIG_SMP */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700334 srli r0, #22 ; r0(irq)
Hirokazu Takata5171b102007-08-17 18:11:37 +0900335#endif /* not CONFIG_SMP */
336
337#if defined(CONFIG_PLAT_HAS_INT1ICU)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700338 add3 r2, r0, #-(M32R_IRQ_INT1) ; INT1# interrupt
Hirokazu Takata5171b102007-08-17 18:11:37 +0900339 bnez r2, 3f
340 seth r0, #shigh(M32R_INT1ICU_ISTS)
341 lduh r0, @(low(M32R_INT1ICU_ISTS),r0) ; bit10-6 : ISN
Linus Torvalds1da177e2005-04-16 15:20:36 -0700342 slli r0, #21
343 srli r0, #27 ; ISN
Hirokazu Takata5171b102007-08-17 18:11:37 +0900344 addi r0, #(M32R_INT1ICU_IRQ_BASE)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700345 bra check_end
346 .fillinsn
Hirokazu Takata5171b102007-08-17 18:11:37 +09003473:
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
Linus Torvalds1da177e2005-04-16 15:20:36 -0700354 slli r0, #21
Hirokazu Takata5171b102007-08-17 18:11:37 +0900355 srli r0, #27 ; ISN
356 addi r0, #(M32R_INT0ICU_IRQ_BASE)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700357 bra check_end
358 .fillinsn
Hirokazu Takata5171b102007-08-17 18:11:37 +09003594:
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
Linus Torvalds1da177e2005-04-16 15:20:36 -0700366 slli r0, #21
Hirokazu Takata5171b102007-08-17 18:11:37 +0900367 srli r0, #27 ; ISN
368 addi r0, #(M32R_INT2ICU_IRQ_BASE)
369 ; bra check_end
Linus Torvalds1da177e2005-04-16 15:20:36 -0700370 .fillinsn
Hirokazu Takata5171b102007-08-17 18:11:37 +09003715:
372#endif /* CONFIG_PLAT_HAS_INT2ICU */
Hirokazu Takatade2232e2007-08-18 00:10:18 +0900373
Linus Torvalds1da177e2005-04-16 15:20:36 -0700374check_end:
Linus Torvalds1da177e2005-04-16 15:20:36 -0700375 bl do_IRQ
Hirokazu Takata41272722006-04-18 22:21:38 -0700376 pop r14
Linus Torvalds1da177e2005-04-16 15:20:36 -0700377 seth r0, #shigh(M32R_ICU_IMASK_ADDR)
378 st r14, @(low(M32R_ICU_IMASK_ADDR),r0)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700379 bra ret_from_intr
380
381/*
382 * Default EIT handler
383 */
384 ALIGN
385int_msg:
386 .asciz "Unknown interrupt\n"
387 .byte 0
388
389ENTRY(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
407infinit:
408 bra infinit
409
410#ifdef CONFIG_MMU
411/*
412 * Access Exception handler
413 */
414ENTRY(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
427oprand:
428 ld r2, @(low(MDEVA_offset),r2) ; set address
Linus Torvalds1da177e2005-04-16 15:20:36 -0700429 srli r1, #1
430 bra 1f
431inst:
432 and3 r1, r4, #2
433 srli r1, #1
434 or3 r1, r1, #8
435 mvfc r2, bpc ; set address
436 .fillinsn
4371:
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
463ENTRY(alignment_check)
Hirokazu Takatade2232e2007-08-18 00:10:18 +0900464 /* void alignment_check(int error_code) */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700465 SWITCH_TO_KERNEL_STACK
466 SAVE_ALL
467 ldi r1, #0x30 ; error_code
468 mv r0, sp ; pt_regs
469 bl do_alignment_check
470error_code:
471 bra ret_from_exception
472
473ENTRY(rie_handler)
Hirokazu Takatade2232e2007-08-18 00:10:18 +0900474 /* void rie_handler(int error_code) */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700475 SWITCH_TO_KERNEL_STACK
476 SAVE_ALL
Linus Torvalds1da177e2005-04-16 15:20:36 -0700477 ldi r1, #0x20 ; error_code
478 mv r0, sp ; pt_regs
479 bl do_rie_handler
480 bra error_code
481
482ENTRY(pie_handler)
Hirokazu Takatade2232e2007-08-18 00:10:18 +0900483 /* void pie_handler(int error_code) */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700484 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
491ENTRY(debug_trap)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700492 /* void debug_trap(void) */
Hirokazu Takatade2232e2007-08-18 00:10:18 +0900493 .global withdraw_debug_trap
Linus Torvalds1da177e2005-04-16 15:20:36 -0700494 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
Hirokazu Takata9de11aa2005-10-11 08:29:09 -0700503ENTRY(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
Linus Torvalds1da177e2005-04-16 15:20:36 -0700512ENTRY(cache_flushing_handler)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700513 /* void _flush_cache_all(void); */
Hirokazu Takatade2232e2007-08-18 00:10:18 +0900514 .global _flush_cache_all
Linus Torvalds1da177e2005-04-16 15:20:36 -0700515 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
538ENTRY(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
825syscall_table_size=(.-sys_call_table)