blob: 4b3a7742fe472d18350b41875916d33a24d2dbb8 [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
112CF_MASK = 0x00000001
113TF_MASK = 0x00000100
114IF_MASK = 0x00000200
115DF_MASK = 0x00000400
116NT_MASK = 0x00004000
117VM_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
126ENTRY(ret_from_fork)
Hirokazu Takata41272722006-04-18 22:21:38 -0700127 pop r0
Linus Torvalds1da177e2005-04-16 15:20:36 -0700128 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
141ret_from_exception:
142 preempt_stop(r4)
143ret_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
151ENTRY(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
163ENTRY(resume_kernel)
164 GET_THREAD_INFO(r8)
165 ld r9, @(TI_PRE_COUNT, r8) ; non-zero preempt_count ?
166 bnez r9, restore_all
167need_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
185ENTRY(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
198syscall_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
205syscall_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
212restore_all:
213 RESTORE_ALL
214
215 # perform work that needs to be done immediately before resumption
Hirokazu Takata8e8ff022006-04-18 22:21:20 -0700216 # r9 : flags
Linus Torvalds1da177e2005-04-16 15:20:36 -0700217 ALIGN
218work_pending:
219 and3 r4, r9, #_TIF_NEED_RESCHED
220 beqz r4, work_notifysig
221work_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
233work_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
243syscall_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
261syscall_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
271syscall_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
279syscall_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 */
291ENTRY(ei_handler)
292#if defined(CONFIG_CHIP_M32700)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700293 ; WORKAROUND: force to clear SM bit and use the kernel stack (SPI).
Hirokazu Takata5171b102007-08-17 18:11:37 +0900294 SWITCH_TO_KERNEL_STACK
Linus Torvalds1da177e2005-04-16 15:20:36 -0700295#endif
296 SAVE_ALL
297 mv r1, sp ; arg1(regs)
Hirokazu Takata5171b102007-08-17 18:11:37 +0900298 ; GET_ICU_STATUS;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700299 seth r0, #shigh(M32R_ICU_ISTS_ADDR)
300 ld r0, @(low(M32R_ICU_ISTS_ADDR),r0)
Hirokazu Takata41272722006-04-18 22:21:38 -0700301 push r0
Linus Torvalds1da177e2005-04-16 15:20:36 -0700302#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. */
Hirokazu Takata5171b102007-08-17 18:11:37 +0900313 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
3190:
320#endif /* CONFIG_CHIP_M32700 */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700321 beqz r0, 1f ; if (!irq_num) goto exit
Linus Torvalds1da177e2005-04-16 15:20:36 -0700322 ;; 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
3341:
335 addi sp, #4
Hirokazu Takataabd0a782007-08-17 23:40:37 +0900336 bra restore_all
Linus Torvalds1da177e2005-04-16 15:20:36 -0700337 .fillinsn
3382:
339 srli r0, #2
Hirokazu Takata5171b102007-08-17 18:11:37 +0900340#else /* not CONFIG_SMP */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700341 srli r0, #22 ; r0(irq)
Hirokazu Takata5171b102007-08-17 18:11:37 +0900342#endif /* not CONFIG_SMP */
343
344#if defined(CONFIG_PLAT_HAS_INT1ICU)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700345 add3 r2, r0, #-(M32R_IRQ_INT1) ; INT1# interrupt
Hirokazu Takata5171b102007-08-17 18:11:37 +0900346 bnez r2, 3f
347 seth r0, #shigh(M32R_INT1ICU_ISTS)
348 lduh r0, @(low(M32R_INT1ICU_ISTS),r0) ; bit10-6 : ISN
Linus Torvalds1da177e2005-04-16 15:20:36 -0700349 slli r0, #21
350 srli r0, #27 ; ISN
Hirokazu Takata5171b102007-08-17 18:11:37 +0900351 addi r0, #(M32R_INT1ICU_IRQ_BASE)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700352 bra check_end
353 .fillinsn
Hirokazu Takata5171b102007-08-17 18:11:37 +09003543:
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
Linus Torvalds1da177e2005-04-16 15:20:36 -0700361 slli r0, #21
Hirokazu Takata5171b102007-08-17 18:11:37 +0900362 srli r0, #27 ; ISN
363 addi r0, #(M32R_INT0ICU_IRQ_BASE)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700364 bra check_end
365 .fillinsn
Hirokazu Takata5171b102007-08-17 18:11:37 +09003664:
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
Linus Torvalds1da177e2005-04-16 15:20:36 -0700373 slli r0, #21
Hirokazu Takata5171b102007-08-17 18:11:37 +0900374 srli r0, #27 ; ISN
375 addi r0, #(M32R_INT2ICU_IRQ_BASE)
376 ; bra check_end
Linus Torvalds1da177e2005-04-16 15:20:36 -0700377 .fillinsn
Hirokazu Takata5171b102007-08-17 18:11:37 +09003785:
379#endif /* CONFIG_PLAT_HAS_INT2ICU */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700380check_end:
Linus Torvalds1da177e2005-04-16 15:20:36 -0700381 bl do_IRQ
Hirokazu Takata41272722006-04-18 22:21:38 -0700382 pop r14
Linus Torvalds1da177e2005-04-16 15:20:36 -0700383 seth r0, #shigh(M32R_ICU_IMASK_ADDR)
384 st r14, @(low(M32R_ICU_IMASK_ADDR),r0)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700385 bra ret_from_intr
386
387/*
388 * Default EIT handler
389 */
390 ALIGN
391int_msg:
392 .asciz "Unknown interrupt\n"
393 .byte 0
394
395ENTRY(default_eit_handler)
396 push r0
397 mvfc r0, psw
398 push r1
399 push r2
400 push r3
401 push r0
402 LDIMM (r0, __KERNEL_DS)
403 mv r0, r1
404 mv r0, r2
405 LDIMM (r0, int_msg)
406 bl printk
407 pop r0
408 pop r3
409 pop r2
410 pop r1
411 mvtc r0, psw
412 pop r0
413infinit:
414 bra infinit
415
416#ifdef CONFIG_MMU
417/*
418 * Access Exception handler
419 */
420ENTRY(ace_handler)
421 SWITCH_TO_KERNEL_STACK
422 SAVE_ALL
423
424 seth r2, #shigh(MMU_REG_BASE) /* Check status register */
425 ld r4, @(low(MESTS_offset),r2)
426 st r4, @(low(MESTS_offset),r2)
427 srl3 r1, r4, #4
428#ifdef CONFIG_CHIP_M32700
429 and3 r1, r1, #0x0000ffff
430 ; WORKAROUND: ignore TME bit for the M32700(TS1).
431#endif /* CONFIG_CHIP_M32700 */
432 beqz r1, inst
433oprand:
434 ld r2, @(low(MDEVA_offset),r2) ; set address
Linus Torvalds1da177e2005-04-16 15:20:36 -0700435 srli r1, #1
436 bra 1f
437inst:
438 and3 r1, r4, #2
439 srli r1, #1
440 or3 r1, r1, #8
441 mvfc r2, bpc ; set address
442 .fillinsn
4431:
444 mvfc r3, psw
445 mv r0, sp
446 and3 r3, r3, 0x800
447 srli r3, #9
448 or r1, r3
449 /*
450 * do_page_fault():
451 * r0 : struct pt_regs *regs
452 * r1 : unsigned long error-code
453 * r2 : unsigned long address
454 * error-code:
455 * +------+------+------+------+
456 * | bit3 | bit2 | bit1 | bit0 |
457 * +------+------+------+------+
458 * bit 3 == 0:means data, 1:means instruction
459 * bit 2 == 0:means kernel, 1:means user-mode
460 * bit 1 == 0:means read, 1:means write
461 * bit 0 == 0:means no page found 1:means protection fault
462 *
463 */
464 bl do_page_fault
465 bra ret_from_intr
466#endif /* CONFIG_MMU */
467
468
469ENTRY(alignment_check)
470/* void alignment_check(int error_code) */
471 SWITCH_TO_KERNEL_STACK
472 SAVE_ALL
473 ldi r1, #0x30 ; error_code
474 mv r0, sp ; pt_regs
475 bl do_alignment_check
476error_code:
477 bra ret_from_exception
478
479ENTRY(rie_handler)
480/* void rie_handler(int error_code) */
481 SWITCH_TO_KERNEL_STACK
482 SAVE_ALL
Linus Torvalds1da177e2005-04-16 15:20:36 -0700483 ldi r1, #0x20 ; error_code
484 mv r0, sp ; pt_regs
485 bl do_rie_handler
486 bra error_code
487
488ENTRY(pie_handler)
489/* void pie_handler(int error_code) */
490 SWITCH_TO_KERNEL_STACK
491 SAVE_ALL
492 ldi r1, #0 ; error_code ; FIXME
493 mv r0, sp ; pt_regs
494 bl do_pie_handler
495 bra error_code
496
497ENTRY(debug_trap)
498 .global withdraw_debug_trap
499 /* void debug_trap(void) */
500 SWITCH_TO_KERNEL_STACK
501 SAVE_ALL
502 mv r0, sp ; pt_regs
503 bl withdraw_debug_trap
504 ldi r1, #0 ; error_code
505 mv r0, sp ; pt_regs
506 bl do_debug_trap
507 bra error_code
508
Hirokazu Takata9de11aa2005-10-11 08:29:09 -0700509ENTRY(ill_trap)
510 /* void ill_trap(void) */
511 SWITCH_TO_KERNEL_STACK
512 SAVE_ALL
513 ldi r1, #0 ; error_code ; FIXME
514 mv r0, sp ; pt_regs
515 bl do_ill_trap
516 bra error_code
517
Linus Torvalds1da177e2005-04-16 15:20:36 -0700518
519/* Cache flushing handler */
520ENTRY(cache_flushing_handler)
521 .global _flush_cache_all
522 /* void _flush_cache_all(void); */
523 SWITCH_TO_KERNEL_STACK
524 push r0
525 push r1
526 push r2
527 push r3
528 push r4
529 push r5
530 push r6
531 push r7
532 push lr
533 bl _flush_cache_all
534 pop lr
535 pop r7
536 pop r6
537 pop r5
538 pop r4
539 pop r3
540 pop r2
541 pop r1
542 pop r0
543 rte
544
545.data
546ENTRY(sys_call_table)
547 .long sys_restart_syscall /* 0 - old "setup()" system call*/
548 .long sys_exit
549 .long sys_fork
550 .long sys_read
551 .long sys_write
552 .long sys_open /* 5 */
553 .long sys_close
554 .long sys_waitpid
555 .long sys_creat
556 .long sys_link
557 .long sys_unlink /* 10 */
558 .long sys_execve
559 .long sys_chdir
560 .long sys_time
561 .long sys_mknod
562 .long sys_chmod /* 15 */
563 .long sys_ni_syscall /* lchown16 syscall holder */
564 .long sys_ni_syscall /* old break syscall holder */
565 .long sys_ni_syscall /* old stat syscall holder */
566 .long sys_lseek
567 .long sys_getpid /* 20 */
568 .long sys_mount
569 .long sys_oldumount
570 .long sys_ni_syscall /* setuid16 syscall holder */
571 .long sys_ni_syscall /* getuid16 syscall holder */
572 .long sys_stime /* 25 */
573 .long sys_ptrace
574 .long sys_alarm
575 .long sys_ni_syscall /* old fstat syscall holder */
576 .long sys_pause
577 .long sys_utime /* 30 */
578 .long sys_ni_syscall /* old stty syscall holder */
579 .long sys_cachectl /* for M32R */ /* old gtty syscall holder */
580 .long sys_access
581 .long sys_ni_syscall /* nice syscall holder */
582 .long sys_ni_syscall /* 35 - old ftime syscall holder */
583 .long sys_sync
584 .long sys_kill
585 .long sys_rename
586 .long sys_mkdir
587 .long sys_rmdir /* 40 */
588 .long sys_dup
589 .long sys_pipe
590 .long sys_times
591 .long sys_ni_syscall /* old prof syscall holder */
592 .long sys_brk /* 45 */
593 .long sys_ni_syscall /* setgid16 syscall holder */
594 .long sys_getgid /* will be unused */
595 .long sys_ni_syscall /* signal syscall holder */
596 .long sys_ni_syscall /* geteuid16 syscall holder */
597 .long sys_ni_syscall /* 50 - getegid16 syscall holder */
598 .long sys_acct
599 .long sys_umount /* recycled never used phys() */
600 .long sys_ni_syscall /* old lock syscall holder */
601 .long sys_ioctl
602 .long sys_fcntl /* 55 - will be unused */
603 .long sys_ni_syscall /* mpx syscall holder */
604 .long sys_setpgid
605 .long sys_ni_syscall /* old ulimit syscall holder */
606 .long sys_ni_syscall /* sys_olduname */
607 .long sys_umask /* 60 */
608 .long sys_chroot
609 .long sys_ustat
610 .long sys_dup2
611 .long sys_getppid
612 .long sys_getpgrp /* 65 */
613 .long sys_setsid
614 .long sys_ni_syscall /* sigaction syscall holder */
615 .long sys_ni_syscall /* sgetmask syscall holder */
616 .long sys_ni_syscall /* ssetmask syscall holder */
617 .long sys_ni_syscall /* 70 - setreuid16 syscall holder */
618 .long sys_ni_syscall /* setregid16 syscall holder */
619 .long sys_ni_syscall /* sigsuspend syscall holder */
620 .long sys_ni_syscall /* sigpending syscall holder */
621 .long sys_sethostname
622 .long sys_setrlimit /* 75 */
623 .long sys_getrlimit/*will be unused*/
624 .long sys_getrusage
625 .long sys_gettimeofday
626 .long sys_settimeofday
627 .long sys_ni_syscall /* 80 - getgroups16 syscall holder */
628 .long sys_ni_syscall /* setgroups16 syscall holder */
629 .long sys_ni_syscall /* sys_oldselect */
630 .long sys_symlink
631 .long sys_ni_syscall /* old lstat syscall holder */
632 .long sys_readlink /* 85 */
633 .long sys_uselib
634 .long sys_swapon
635 .long sys_reboot
636 .long sys_ni_syscall /* readdir syscall holder */
637 .long sys_ni_syscall /* 90 - old_mmap syscall holder */
638 .long sys_munmap
639 .long sys_truncate
640 .long sys_ftruncate
641 .long sys_fchmod
642 .long sys_ni_syscall /* 95 - fchwon16 syscall holder */
643 .long sys_getpriority
644 .long sys_setpriority
645 .long sys_ni_syscall /* old profil syscall holder */
646 .long sys_statfs
647 .long sys_fstatfs /* 100 */
648 .long sys_ni_syscall /* ioperm syscall holder */
649 .long sys_socketcall
650 .long sys_syslog
651 .long sys_setitimer
652 .long sys_getitimer /* 105 */
653 .long sys_newstat
654 .long sys_newlstat
655 .long sys_newfstat
656 .long sys_ni_syscall /* old uname syscall holder */
657 .long sys_ni_syscall /* 110 - iopl syscall holder */
658 .long sys_vhangup
659 .long sys_ni_syscall /* idle syscall holder */
660 .long sys_ni_syscall /* vm86old syscall holder */
661 .long sys_wait4
662 .long sys_swapoff /* 115 */
663 .long sys_sysinfo
664 .long sys_ipc
665 .long sys_fsync
666 .long sys_ni_syscall /* sigreturn syscall holder */
667 .long sys_clone /* 120 */
668 .long sys_setdomainname
669 .long sys_newuname
670 .long sys_ni_syscall /* modify_ldt syscall holder */
671 .long sys_adjtimex
672 .long sys_mprotect /* 125 */
673 .long sys_ni_syscall /* sigprocmask syscall holder */
674 .long sys_ni_syscall /* create_module syscall holder */
675 .long sys_init_module
676 .long sys_delete_module
677 .long sys_ni_syscall /* 130 - get_kernel_syms */
678 .long sys_quotactl
679 .long sys_getpgid
680 .long sys_fchdir
681 .long sys_bdflush
682 .long sys_sysfs /* 135 */
683 .long sys_personality
684 .long sys_ni_syscall /* afs_syscall syscall holder */
685 .long sys_ni_syscall /* setfsuid16 syscall holder */
686 .long sys_ni_syscall /* setfsgid16 syscall holder */
687 .long sys_llseek /* 140 */
688 .long sys_getdents
689 .long sys_select
690 .long sys_flock
691 .long sys_msync
692 .long sys_readv /* 145 */
693 .long sys_writev
694 .long sys_getsid
695 .long sys_fdatasync
696 .long sys_sysctl
697 .long sys_mlock /* 150 */
698 .long sys_munlock
699 .long sys_mlockall
700 .long sys_munlockall
701 .long sys_sched_setparam
702 .long sys_sched_getparam /* 155 */
703 .long sys_sched_setscheduler
704 .long sys_sched_getscheduler
705 .long sys_sched_yield
706 .long sys_sched_get_priority_max
707 .long sys_sched_get_priority_min /* 160 */
708 .long sys_sched_rr_get_interval
709 .long sys_nanosleep
710 .long sys_mremap
711 .long sys_ni_syscall /* setresuid16 syscall holder */
712 .long sys_ni_syscall /* 165 - getresuid16 syscall holder */
713 .long sys_tas /* vm86 syscall holder */
714 .long sys_ni_syscall /* query_module syscall holder */
715 .long sys_poll
716 .long sys_nfsservctl
717 .long sys_setresgid /* 170 */
718 .long sys_getresgid
719 .long sys_prctl
720 .long sys_rt_sigreturn
721 .long sys_rt_sigaction
722 .long sys_rt_sigprocmask /* 175 */
723 .long sys_rt_sigpending
724 .long sys_rt_sigtimedwait
725 .long sys_rt_sigqueueinfo
726 .long sys_rt_sigsuspend
727 .long sys_pread64 /* 180 */
728 .long sys_pwrite64
729 .long sys_ni_syscall /* chown16 syscall holder */
730 .long sys_getcwd
731 .long sys_capget
732 .long sys_capset /* 185 */
733 .long sys_sigaltstack
734 .long sys_sendfile
735 .long sys_ni_syscall /* streams1 */
736 .long sys_ni_syscall /* streams2 */
737 .long sys_vfork /* 190 */
738 .long sys_getrlimit
739 .long sys_mmap2
740 .long sys_truncate64
741 .long sys_ftruncate64
742 .long sys_stat64 /* 195 */
743 .long sys_lstat64
744 .long sys_fstat64
745 .long sys_lchown
746 .long sys_getuid
747 .long sys_getgid /* 200 */
748 .long sys_geteuid
749 .long sys_getegid
750 .long sys_setreuid
751 .long sys_setregid
752 .long sys_getgroups /* 205 */
753 .long sys_setgroups
754 .long sys_fchown
755 .long sys_setresuid
756 .long sys_getresuid
757 .long sys_setresgid /* 210 */
758 .long sys_getresgid
759 .long sys_chown
760 .long sys_setuid
761 .long sys_setgid
762 .long sys_setfsuid /* 215 */
763 .long sys_setfsgid
764 .long sys_pivot_root
765 .long sys_mincore
766 .long sys_madvise
767 .long sys_getdents64 /* 220 */
768 .long sys_fcntl64
769 .long sys_ni_syscall /* reserved for TUX */
770 .long sys_ni_syscall /* Reserved for Security */
771 .long sys_gettid
772 .long sys_readahead /* 225 */
773 .long sys_setxattr
774 .long sys_lsetxattr
775 .long sys_fsetxattr
776 .long sys_getxattr
777 .long sys_lgetxattr /* 230 */
778 .long sys_fgetxattr
779 .long sys_listxattr
780 .long sys_llistxattr
781 .long sys_flistxattr
782 .long sys_removexattr /* 235 */
783 .long sys_lremovexattr
784 .long sys_fremovexattr
785 .long sys_tkill
786 .long sys_sendfile64
787 .long sys_futex /* 240 */
788 .long sys_sched_setaffinity
789 .long sys_sched_getaffinity
790 .long sys_ni_syscall /* reserved for "set_thread_area" system call */
791 .long sys_ni_syscall /* reserved for "get_thread_area" system call */
792 .long sys_io_setup /* 245 */
793 .long sys_io_destroy
794 .long sys_io_getevents
795 .long sys_io_submit
796 .long sys_io_cancel
797 .long sys_fadvise64 /* 250 */
798 .long sys_ni_syscall
799 .long sys_exit_group
800 .long sys_lookup_dcookie
801 .long sys_epoll_create
802 .long sys_epoll_ctl /* 255 */
803 .long sys_epoll_wait
804 .long sys_remap_file_pages
805 .long sys_set_tid_address
806 .long sys_timer_create
807 .long sys_timer_settime /* 260 */
808 .long sys_timer_gettime
809 .long sys_timer_getoverrun
810 .long sys_timer_delete
811 .long sys_clock_settime
812 .long sys_clock_gettime /* 265 */
813 .long sys_clock_getres
814 .long sys_clock_nanosleep
815 .long sys_statfs64
816 .long sys_fstatfs64
817 .long sys_tgkill /* 270 */
818 .long sys_utimes
819 .long sys_fadvise64_64
820 .long sys_ni_syscall /* Reserved for sys_vserver */
821 .long sys_ni_syscall /* Reserved for sys_mbind */
822 .long sys_ni_syscall /* Reserved for sys_get_mempolicy */
823 .long sys_ni_syscall /* Reserved for sys_set_mempolicy */
824 .long sys_mq_open
825 .long sys_mq_unlink
826 .long sys_mq_timedsend
827 .long sys_mq_timedreceive /* 280 */
828 .long sys_mq_notify
829 .long sys_mq_getsetattr
830 .long sys_ni_syscall /* reserved for kexec */
831 .long sys_waitid
832
833syscall_table_size=(.-sys_call_table)