ia64/xen-unstable

view linux-2.4.27-xen-sparse/arch/xen/kernel/entry.S @ 2621:9402048e2325

bitkeeper revision 1.1159.1.218 (416a8128OiHXHyk_Sy8FsA0YUQcEnA)

Merge freefall.cl.cam.ac.uk:/auto/groups/xeno/users/cl349/BK/xeno.bk-26dom0
into freefall.cl.cam.ac.uk:/local/scratch/cl349/xeno.bk-26dom0
author cl349@freefall.cl.cam.ac.uk
date Mon Oct 11 12:48:40 2004 +0000 (2004-10-11)
parents 869c20f2977b
children 4c4ec1d8c1f1 f0fe276ae088
line source
1 /*
2 * linux/arch/i386/entry.S
3 *
4 * Copyright (C) 1991, 1992 Linus Torvalds
5 */
7 /*
8 * entry.S contains the system-call and fault low-level handling routines.
9 * This also contains the timer-interrupt handler, as well as all interrupts
10 * and faults that can result in a task-switch.
11 *
12 * NOTE: This code handles signal-recognition, which happens every time
13 * after a timer-interrupt and after each system call.
14 *
15 * I changed all the .align's to 4 (16 byte alignment), as that's faster
16 * on a 486.
17 *
18 * Stack layout in 'ret_to_user':
19 * ptrace needs to have all regs on the stack.
20 * if the order here is changed, it needs to be
21 * updated in fork.c:copy_process, signal.c:do_signal,
22 * ptrace.c and ptrace.h
23 *
24 * 0(%esp) - %ebx
25 * 4(%esp) - %ecx
26 * 8(%esp) - %edx
27 * C(%esp) - %esi
28 * 10(%esp) - %edi
29 * 14(%esp) - %ebp
30 * 18(%esp) - %eax
31 * 1C(%esp) - %ds
32 * 20(%esp) - %es
33 * 24(%esp) - orig_eax
34 * 28(%esp) - %eip
35 * 2C(%esp) - %cs
36 * 30(%esp) - %eflags
37 * 34(%esp) - %oldesp
38 * 38(%esp) - %oldss
39 *
40 * "current" is in register %ebx during any slow entries.
41 */
43 #include <linux/config.h>
44 #include <linux/sys.h>
45 #include <linux/linkage.h>
46 #include <asm/segment.h>
47 #include <asm/smp.h>
49 EBX = 0x00
50 ECX = 0x04
51 EDX = 0x08
52 ESI = 0x0C
53 EDI = 0x10
54 EBP = 0x14
55 EAX = 0x18
56 DS = 0x1C
57 ES = 0x20
58 ORIG_EAX = 0x24
59 EIP = 0x28
60 CS = 0x2C
61 EFLAGS = 0x30
62 OLDESP = 0x34
63 OLDSS = 0x38
65 CF_MASK = 0x00000001
66 TF_MASK = 0x00000100
67 IF_MASK = 0x00000200
68 DF_MASK = 0x00000400
69 NT_MASK = 0x00004000
71 /* Offsets into task_struct. */
72 state = 0
73 flags = 4
74 sigpending = 8
75 addr_limit = 12
76 exec_domain = 16
77 need_resched = 20
78 tsk_ptrace = 24
79 processor = 52
81 /* Offsets into shared_info_t. */
82 #define evtchn_upcall_pending /* 0 */
83 #define evtchn_upcall_mask 1
85 ENOSYS = 38
88 #define SAVE_ALL \
89 cld; \
90 pushl %es; \
91 pushl %ds; \
92 pushl %eax; \
93 pushl %ebp; \
94 pushl %edi; \
95 pushl %esi; \
96 pushl %edx; \
97 pushl %ecx; \
98 pushl %ebx; \
99 movl $(__KERNEL_DS),%edx; \
100 movl %edx,%ds; \
101 movl %edx,%es;
103 #define RESTORE_ALL \
104 popl %ebx; \
105 popl %ecx; \
106 popl %edx; \
107 popl %esi; \
108 popl %edi; \
109 popl %ebp; \
110 popl %eax; \
111 1: popl %ds; \
112 2: popl %es; \
113 addl $4,%esp; \
114 3: iret; \
115 .section .fixup,"ax"; \
116 4: movl $0,(%esp); \
117 jmp 1b; \
118 5: movl $0,(%esp); \
119 jmp 2b; \
120 6: pushl %ss; \
121 popl %ds; \
122 pushl %ss; \
123 popl %es; \
124 pushl $11; \
125 call do_exit; \
126 .previous; \
127 .section __ex_table,"a";\
128 .align 4; \
129 .long 1b,4b; \
130 .long 2b,5b; \
131 .long 3b,6b; \
132 .previous
134 #define GET_CURRENT(reg) \
135 movl $-8192, reg; \
136 andl %esp, reg
138 ENTRY(lcall7)
139 pushfl # We get a different stack layout with call
140 pushl %eax # gates, which has to be cleaned up later..
141 SAVE_ALL
142 movl EIP(%esp),%eax # due to call gates, this is eflags, not eip..
143 movl CS(%esp),%edx # this is eip..
144 movl EFLAGS(%esp),%ecx # and this is cs..
145 movl %eax,EFLAGS(%esp) #
146 andl $~(NT_MASK|TF_MASK|DF_MASK), %eax
147 pushl %eax
148 popfl
149 movl %edx,EIP(%esp) # Now we move them to their "normal" places
150 movl %ecx,CS(%esp) #
151 movl %esp,%ebx
152 pushl %ebx
153 andl $-8192,%ebx # GET_CURRENT
154 movl exec_domain(%ebx),%edx # Get the execution domain
155 movl 4(%edx),%edx # Get the lcall7 handler for the domain
156 pushl $0x7
157 call *%edx
158 addl $4, %esp
159 popl %eax
160 jmp ret_to_user
162 ENTRY(lcall27)
163 pushfl # We get a different stack layout with call
164 pushl %eax # gates, which has to be cleaned up later..
165 SAVE_ALL
166 movl EIP(%esp),%eax # due to call gates, this is eflags, not eip..
167 movl CS(%esp),%edx # this is eip..
168 movl EFLAGS(%esp),%ecx # and this is cs..
169 movl %eax,EFLAGS(%esp) #
170 andl $~(NT_MASK|TF_MASK|DF_MASK), %eax
171 pushl %eax
172 popfl
173 movl %edx,EIP(%esp) # Now we move them to their "normal" places
174 movl %ecx,CS(%esp) #
175 movl %esp,%ebx
176 pushl %ebx
177 andl $-8192,%ebx # GET_CURRENT
178 movl exec_domain(%ebx),%edx # Get the execution domain
179 movl 4(%edx),%edx # Get the lcall7 handler for the domain
180 pushl $0x27
181 call *%edx
182 addl $4, %esp
183 popl %eax
184 jmp ret_to_user
186 ENTRY(ret_from_fork)
187 pushl %ebx
188 call SYMBOL_NAME(schedule_tail)
189 addl $4, %esp
190 GET_CURRENT(%ebx)
191 testb $0x02,tsk_ptrace(%ebx) # PT_TRACESYS
192 jne tracesys_exit
193 jmp ret_to_user
195 /*
196 * Return to user mode is not as complex as all this looks,
197 * but we want the default path for a system call return to
198 * go as quickly as possible which is why some of this is
199 * less clear than it otherwise should be.
200 */
201 ENTRY(system_call)
202 pushl %eax # save orig_eax
203 SAVE_ALL
204 GET_CURRENT(%ebx)
205 testb $0x02,tsk_ptrace(%ebx) # PT_TRACESYS
206 jne tracesys
207 cmpl $(NR_syscalls),%eax
208 jae badsys
209 call *SYMBOL_NAME(sys_call_table)(,%eax,4)
210 movl %eax,EAX(%esp) # save the return value
211 ret_to_user:
212 movl SYMBOL_NAME(HYPERVISOR_shared_info),%esi
213 movb $1,evtchn_upcall_mask(%esi) # make tests atomic
214 ret_to_user_nocli:
215 cmpl $0,need_resched(%ebx)
216 jne reschedule
217 cmpl $0,sigpending(%ebx)
218 je safesti # ensure need_resched updates are seen
219 /*signal_return:*/
220 movb $0,evtchn_upcall_mask(%esi) # reenable event callbacks
221 movl %esp,%eax
222 xorl %edx,%edx
223 call SYMBOL_NAME(do_signal)
224 jmp safesti
226 ALIGN
227 restore_all:
228 RESTORE_ALL
230 ALIGN
231 tracesys:
232 movl $-ENOSYS,EAX(%esp)
233 call SYMBOL_NAME(syscall_trace)
234 movl ORIG_EAX(%esp),%eax
235 cmpl $(NR_syscalls),%eax
236 jae tracesys_exit
237 call *SYMBOL_NAME(sys_call_table)(,%eax,4)
238 movl %eax,EAX(%esp) # save the return value
239 tracesys_exit:
240 call SYMBOL_NAME(syscall_trace)
241 jmp ret_to_user
242 badsys:
243 movl $-ENOSYS,EAX(%esp)
244 jmp ret_to_user
246 ALIGN
247 ENTRY(ret_from_intr)
248 GET_CURRENT(%ebx)
249 ret_from_exception:
250 movb CS(%esp),%al
251 testl $2,%eax
252 jne ret_to_user
253 jmp restore_all
255 ALIGN
256 reschedule:
257 movb $0,evtchn_upcall_mask(%esi) # reenable event callbacks
258 call SYMBOL_NAME(schedule) # test
259 jmp ret_to_user
261 ENTRY(divide_error)
262 pushl $0 # no error code
263 pushl $ SYMBOL_NAME(do_divide_error)
264 ALIGN
265 error_code:
266 pushl %ds
267 pushl %eax
268 xorl %eax,%eax
269 pushl %ebp
270 pushl %edi
271 pushl %esi
272 pushl %edx
273 decl %eax # eax = -1
274 pushl %ecx
275 pushl %ebx
276 GET_CURRENT(%ebx)
277 cld
278 movl %es,%ecx
279 movl ORIG_EAX(%esp), %esi # get the error code
280 movl ES(%esp), %edi # get the function address
281 movl %eax, ORIG_EAX(%esp)
282 movl %ecx, ES(%esp)
283 movl %esp,%edx
284 pushl %esi # push the error code
285 pushl %edx # push the pt_regs pointer
286 movl $(__KERNEL_DS),%edx
287 movl %edx,%ds
288 movl %edx,%es
289 call *%edi
290 addl $8,%esp
291 jmp ret_from_exception
293 # A note on the "critical region" in our callback handler.
294 # We want to avoid stacking callback handlers due to events occurring
295 # during handling of the last event. To do this, we keep events disabled
296 # until we've done all processing. HOWEVER, we must enable events before
297 # popping the stack frame (can't be done atomically) and so it would still
298 # be possible to get enough handler activations to overflow the stack.
299 # Although unlikely, bugs of that kind are hard to track down, so we'd
300 # like to avoid the possibility.
301 # So, on entry to the handler we detect whether we interrupted an
302 # existing activation in its critical region -- if so, we pop the current
303 # activation and restart the handler using the previous one.
304 ENTRY(hypervisor_callback)
305 pushl %eax
306 SAVE_ALL
307 GET_CURRENT(%ebx)
308 movl EIP(%esp),%eax
309 cmpl $scrit,%eax
310 jb 11f
311 cmpl $ecrit,%eax
312 jb critical_region_fixup
313 11: push %esp
314 call evtchn_do_upcall
315 add $4,%esp
316 movl SYMBOL_NAME(HYPERVISOR_shared_info),%esi
317 movb CS(%esp),%cl
318 test $2,%cl # slow return to ring 2 or 3
319 jne ret_to_user_nocli
320 safesti:movb $0,evtchn_upcall_mask(%esi) # reenable event callbacks
321 scrit: /**** START OF CRITICAL REGION ****/
322 testb $0xFF,evtchn_upcall_pending(%esi)
323 jnz 14f # process more events if necessary...
324 RESTORE_ALL
325 14: movb $1,evtchn_upcall_mask(%esi)
326 jmp 11b
327 ecrit: /**** END OF CRITICAL REGION ****/
328 # [How we do the fixup]. We want to merge the current stack frame with the
329 # just-interrupted frame. How we do this depends on where in the critical
330 # region the interrupted handler was executing, and so how many saved
331 # registers are in each frame. We do this quickly using the lookup table
332 # 'critical_fixup_table'. For each byte offset in the critical region, it
333 # provides the number of bytes which have already been popped from the
334 # interrupted stack frame.
335 critical_region_fixup:
336 addl $critical_fixup_table-scrit,%eax
337 movzbl (%eax),%eax # %eax contains num bytes popped
338 mov %esp,%esi
339 add %eax,%esi # %esi points at end of src region
340 mov %esp,%edi
341 add $0x34,%edi # %edi points at end of dst region
342 mov %eax,%ecx
343 shr $2,%ecx # convert words to bytes
344 je 16f # skip loop if nothing to copy
345 15: subl $4,%esi # pre-decrementing copy loop
346 subl $4,%edi
347 movl (%esi),%eax
348 movl %eax,(%edi)
349 loop 15b
350 16: movl %edi,%esp # final %edi is top of merged stack
351 jmp 11b
353 critical_fixup_table:
354 .byte 0x00,0x00,0x00 # testb $0xFF,(%esi)
355 .byte 0x00,0x00 # jnz 14f
356 .byte 0x00 # pop %ebx
357 .byte 0x04 # pop %ecx
358 .byte 0x08 # pop %edx
359 .byte 0x0c # pop %esi
360 .byte 0x10 # pop %edi
361 .byte 0x14 # pop %ebp
362 .byte 0x18 # pop %eax
363 .byte 0x1c # pop %ds
364 .byte 0x20 # pop %es
365 .byte 0x24,0x24,0x24 # add $4,%esp
366 .byte 0x28 # iret
367 .byte 0x00,0x00,0x00,0x00 # movb $1,4(%esi)
368 .byte 0x00,0x00 # jmp 11b
370 # Hypervisor uses this for application faults while it executes.
371 ENTRY(failsafe_callback)
372 pushal
373 call SYMBOL_NAME(install_safe_pf_handler)
374 movl 32(%esp),%ebx
375 1: movl %ebx,%ds
376 movl 36(%esp),%ebx
377 2: movl %ebx,%es
378 movl 40(%esp),%ebx
379 3: movl %ebx,%fs
380 movl 44(%esp),%ebx
381 4: movl %ebx,%gs
382 call SYMBOL_NAME(install_normal_pf_handler)
383 popal
384 addl $16,%esp
385 5: iret
386 .section .fixup,"ax"; \
387 6: xorl %ebx,%ebx; \
388 jmp 1b; \
389 7: xorl %ebx,%ebx; \
390 jmp 2b; \
391 8: xorl %ebx,%ebx; \
392 jmp 3b; \
393 9: xorl %ebx,%ebx; \
394 jmp 4b; \
395 10: pushl %ss; \
396 popl %ds; \
397 pushl %ss; \
398 popl %es; \
399 pushl $11; \
400 call do_exit; \
401 .previous; \
402 .section __ex_table,"a";\
403 .align 4; \
404 .long 1b,6b; \
405 .long 2b,7b; \
406 .long 3b,8b; \
407 .long 4b,9b; \
408 .long 5b,10b; \
409 .previous
411 ENTRY(coprocessor_error)
412 pushl $0
413 pushl $ SYMBOL_NAME(do_coprocessor_error)
414 jmp error_code
416 ENTRY(simd_coprocessor_error)
417 pushl $0
418 pushl $ SYMBOL_NAME(do_simd_coprocessor_error)
419 jmp error_code
421 ENTRY(device_not_available)
422 pushl $-1 # mark this as an int
423 SAVE_ALL
424 GET_CURRENT(%ebx)
425 call SYMBOL_NAME(math_state_restore)
426 jmp ret_from_exception
428 ENTRY(debug)
429 pushl $0
430 pushl $ SYMBOL_NAME(do_debug)
431 jmp error_code
433 ENTRY(int3)
434 pushl $0
435 pushl $ SYMBOL_NAME(do_int3)
436 jmp error_code
438 ENTRY(overflow)
439 pushl $0
440 pushl $ SYMBOL_NAME(do_overflow)
441 jmp error_code
443 ENTRY(bounds)
444 pushl $0
445 pushl $ SYMBOL_NAME(do_bounds)
446 jmp error_code
448 ENTRY(invalid_op)
449 pushl $0
450 pushl $ SYMBOL_NAME(do_invalid_op)
451 jmp error_code
453 ENTRY(coprocessor_segment_overrun)
454 pushl $0
455 pushl $ SYMBOL_NAME(do_coprocessor_segment_overrun)
456 jmp error_code
458 ENTRY(double_fault)
459 pushl $ SYMBOL_NAME(do_double_fault)
460 jmp error_code
462 ENTRY(invalid_TSS)
463 pushl $ SYMBOL_NAME(do_invalid_TSS)
464 jmp error_code
466 ENTRY(segment_not_present)
467 pushl $ SYMBOL_NAME(do_segment_not_present)
468 jmp error_code
470 ENTRY(stack_segment)
471 pushl $ SYMBOL_NAME(do_stack_segment)
472 jmp error_code
474 ENTRY(general_protection)
475 pushl $ SYMBOL_NAME(do_general_protection)
476 jmp error_code
478 ENTRY(alignment_check)
479 pushl $ SYMBOL_NAME(do_alignment_check)
480 jmp error_code
482 # This handler is special, because it gets an extra value on its stack,
483 # which is the linear faulting address.
484 #define PAGE_FAULT_STUB(_name1, _name2) \
485 ENTRY(_name1) \
486 pushl %ds ; \
487 pushl %eax ; \
488 xorl %eax,%eax ; \
489 pushl %ebp ; \
490 pushl %edi ; \
491 pushl %esi ; \
492 pushl %edx ; \
493 decl %eax /* eax = -1 */ ; \
494 pushl %ecx ; \
495 pushl %ebx ; \
496 GET_CURRENT(%ebx) ; \
497 cld ; \
498 movl %es,%ecx ; \
499 movl ORIG_EAX(%esp), %esi /* get the error code */ ; \
500 movl ES(%esp), %edi /* get the faulting address */ ; \
501 movl %eax, ORIG_EAX(%esp) ; \
502 movl %ecx, ES(%esp) ; \
503 movl %esp,%edx ; \
504 pushl %edi /* push the faulting address */ ; \
505 pushl %esi /* push the error code */ ; \
506 pushl %edx /* push the pt_regs pointer */ ; \
507 movl $(__KERNEL_DS),%edx ; \
508 movl %edx,%ds ; \
509 movl %edx,%es ; \
510 call SYMBOL_NAME(_name2) ; \
511 addl $12,%esp ; \
512 jmp ret_from_exception ;
513 PAGE_FAULT_STUB(page_fault, do_page_fault)
514 PAGE_FAULT_STUB(safe_page_fault, do_safe_page_fault)
516 ENTRY(machine_check)
517 pushl $0
518 pushl $ SYMBOL_NAME(do_machine_check)
519 jmp error_code
521 ENTRY(fixup_4gb_segment)
522 pushl $ SYMBOL_NAME(do_fixup_4gb_segment)
523 jmp error_code
525 .data
526 ENTRY(sys_call_table)
527 .long SYMBOL_NAME(sys_ni_syscall) /* 0 - old "setup()" system call*/
528 .long SYMBOL_NAME(sys_exit)
529 .long SYMBOL_NAME(sys_fork)
530 .long SYMBOL_NAME(sys_read)
531 .long SYMBOL_NAME(sys_write)
532 .long SYMBOL_NAME(sys_open) /* 5 */
533 .long SYMBOL_NAME(sys_close)
534 .long SYMBOL_NAME(sys_waitpid)
535 .long SYMBOL_NAME(sys_creat)
536 .long SYMBOL_NAME(sys_link)
537 .long SYMBOL_NAME(sys_unlink) /* 10 */
538 .long SYMBOL_NAME(sys_execve)
539 .long SYMBOL_NAME(sys_chdir)
540 .long SYMBOL_NAME(sys_time)
541 .long SYMBOL_NAME(sys_mknod)
542 .long SYMBOL_NAME(sys_chmod) /* 15 */
543 .long SYMBOL_NAME(sys_lchown16)
544 .long SYMBOL_NAME(sys_ni_syscall) /* old break syscall holder */
545 .long SYMBOL_NAME(sys_stat)
546 .long SYMBOL_NAME(sys_lseek)
547 .long SYMBOL_NAME(sys_getpid) /* 20 */
548 .long SYMBOL_NAME(sys_mount)
549 .long SYMBOL_NAME(sys_oldumount)
550 .long SYMBOL_NAME(sys_setuid16)
551 .long SYMBOL_NAME(sys_getuid16)
552 .long SYMBOL_NAME(sys_stime) /* 25 */
553 .long SYMBOL_NAME(sys_ptrace)
554 .long SYMBOL_NAME(sys_alarm)
555 .long SYMBOL_NAME(sys_fstat)
556 .long SYMBOL_NAME(sys_pause)
557 .long SYMBOL_NAME(sys_utime) /* 30 */
558 .long SYMBOL_NAME(sys_ni_syscall) /* old stty syscall holder */
559 .long SYMBOL_NAME(sys_ni_syscall) /* old gtty syscall holder */
560 .long SYMBOL_NAME(sys_access)
561 .long SYMBOL_NAME(sys_nice)
562 .long SYMBOL_NAME(sys_ni_syscall) /* 35 */ /* old ftime syscall holder */
563 .long SYMBOL_NAME(sys_sync)
564 .long SYMBOL_NAME(sys_kill)
565 .long SYMBOL_NAME(sys_rename)
566 .long SYMBOL_NAME(sys_mkdir)
567 .long SYMBOL_NAME(sys_rmdir) /* 40 */
568 .long SYMBOL_NAME(sys_dup)
569 .long SYMBOL_NAME(sys_pipe)
570 .long SYMBOL_NAME(sys_times)
571 .long SYMBOL_NAME(sys_ni_syscall) /* old prof syscall holder */
572 .long SYMBOL_NAME(sys_brk) /* 45 */
573 .long SYMBOL_NAME(sys_setgid16)
574 .long SYMBOL_NAME(sys_getgid16)
575 .long SYMBOL_NAME(sys_signal)
576 .long SYMBOL_NAME(sys_geteuid16)
577 .long SYMBOL_NAME(sys_getegid16) /* 50 */
578 .long SYMBOL_NAME(sys_acct)
579 .long SYMBOL_NAME(sys_umount) /* recycled never used phys() */
580 .long SYMBOL_NAME(sys_ni_syscall) /* old lock syscall holder */
581 .long SYMBOL_NAME(sys_ioctl)
582 .long SYMBOL_NAME(sys_fcntl) /* 55 */
583 .long SYMBOL_NAME(sys_ni_syscall) /* old mpx syscall holder */
584 .long SYMBOL_NAME(sys_setpgid)
585 .long SYMBOL_NAME(sys_ni_syscall) /* old ulimit syscall holder */
586 .long SYMBOL_NAME(sys_olduname)
587 .long SYMBOL_NAME(sys_umask) /* 60 */
588 .long SYMBOL_NAME(sys_chroot)
589 .long SYMBOL_NAME(sys_ustat)
590 .long SYMBOL_NAME(sys_dup2)
591 .long SYMBOL_NAME(sys_getppid)
592 .long SYMBOL_NAME(sys_getpgrp) /* 65 */
593 .long SYMBOL_NAME(sys_setsid)
594 .long SYMBOL_NAME(sys_sigaction)
595 .long SYMBOL_NAME(sys_sgetmask)
596 .long SYMBOL_NAME(sys_ssetmask)
597 .long SYMBOL_NAME(sys_setreuid16) /* 70 */
598 .long SYMBOL_NAME(sys_setregid16)
599 .long SYMBOL_NAME(sys_sigsuspend)
600 .long SYMBOL_NAME(sys_sigpending)
601 .long SYMBOL_NAME(sys_sethostname)
602 .long SYMBOL_NAME(sys_setrlimit) /* 75 */
603 .long SYMBOL_NAME(sys_old_getrlimit)
604 .long SYMBOL_NAME(sys_getrusage)
605 .long SYMBOL_NAME(sys_gettimeofday)
606 .long SYMBOL_NAME(sys_settimeofday)
607 .long SYMBOL_NAME(sys_getgroups16) /* 80 */
608 .long SYMBOL_NAME(sys_setgroups16)
609 .long SYMBOL_NAME(old_select)
610 .long SYMBOL_NAME(sys_symlink)
611 .long SYMBOL_NAME(sys_lstat)
612 .long SYMBOL_NAME(sys_readlink) /* 85 */
613 .long SYMBOL_NAME(sys_uselib)
614 .long SYMBOL_NAME(sys_swapon)
615 .long SYMBOL_NAME(sys_reboot)
616 .long SYMBOL_NAME(old_readdir)
617 .long SYMBOL_NAME(old_mmap) /* 90 */
618 .long SYMBOL_NAME(sys_munmap)
619 .long SYMBOL_NAME(sys_truncate)
620 .long SYMBOL_NAME(sys_ftruncate)
621 .long SYMBOL_NAME(sys_fchmod)
622 .long SYMBOL_NAME(sys_fchown16) /* 95 */
623 .long SYMBOL_NAME(sys_getpriority)
624 .long SYMBOL_NAME(sys_setpriority)
625 .long SYMBOL_NAME(sys_ni_syscall) /* old profil syscall holder */
626 .long SYMBOL_NAME(sys_statfs)
627 .long SYMBOL_NAME(sys_fstatfs) /* 100 */
628 .long SYMBOL_NAME(sys_ioperm)
629 .long SYMBOL_NAME(sys_socketcall)
630 .long SYMBOL_NAME(sys_syslog)
631 .long SYMBOL_NAME(sys_setitimer)
632 .long SYMBOL_NAME(sys_getitimer) /* 105 */
633 .long SYMBOL_NAME(sys_newstat)
634 .long SYMBOL_NAME(sys_newlstat)
635 .long SYMBOL_NAME(sys_newfstat)
636 .long SYMBOL_NAME(sys_uname)
637 .long SYMBOL_NAME(sys_iopl) /* 110 */
638 .long SYMBOL_NAME(sys_vhangup)
639 .long SYMBOL_NAME(sys_ni_syscall) /* old "idle" system call */
640 .long SYMBOL_NAME(sys_ni_syscall) /* was VM86 */
641 .long SYMBOL_NAME(sys_wait4)
642 .long SYMBOL_NAME(sys_swapoff) /* 115 */
643 .long SYMBOL_NAME(sys_sysinfo)
644 .long SYMBOL_NAME(sys_ipc)
645 .long SYMBOL_NAME(sys_fsync)
646 .long SYMBOL_NAME(sys_sigreturn)
647 .long SYMBOL_NAME(sys_clone) /* 120 */
648 .long SYMBOL_NAME(sys_setdomainname)
649 .long SYMBOL_NAME(sys_newuname)
650 .long SYMBOL_NAME(sys_modify_ldt)
651 .long SYMBOL_NAME(sys_adjtimex)
652 .long SYMBOL_NAME(sys_mprotect) /* 125 */
653 .long SYMBOL_NAME(sys_sigprocmask)
654 .long SYMBOL_NAME(sys_create_module)
655 .long SYMBOL_NAME(sys_init_module)
656 .long SYMBOL_NAME(sys_delete_module)
657 .long SYMBOL_NAME(sys_get_kernel_syms) /* 130 */
658 .long SYMBOL_NAME(sys_quotactl)
659 .long SYMBOL_NAME(sys_getpgid)
660 .long SYMBOL_NAME(sys_fchdir)
661 .long SYMBOL_NAME(sys_bdflush)
662 .long SYMBOL_NAME(sys_sysfs) /* 135 */
663 .long SYMBOL_NAME(sys_personality)
664 .long SYMBOL_NAME(sys_ni_syscall) /* for afs_syscall */
665 .long SYMBOL_NAME(sys_setfsuid16)
666 .long SYMBOL_NAME(sys_setfsgid16)
667 .long SYMBOL_NAME(sys_llseek) /* 140 */
668 .long SYMBOL_NAME(sys_getdents)
669 .long SYMBOL_NAME(sys_select)
670 .long SYMBOL_NAME(sys_flock)
671 .long SYMBOL_NAME(sys_msync)
672 .long SYMBOL_NAME(sys_readv) /* 145 */
673 .long SYMBOL_NAME(sys_writev)
674 .long SYMBOL_NAME(sys_getsid)
675 .long SYMBOL_NAME(sys_fdatasync)
676 .long SYMBOL_NAME(sys_sysctl)
677 .long SYMBOL_NAME(sys_mlock) /* 150 */
678 .long SYMBOL_NAME(sys_munlock)
679 .long SYMBOL_NAME(sys_mlockall)
680 .long SYMBOL_NAME(sys_munlockall)
681 .long SYMBOL_NAME(sys_sched_setparam)
682 .long SYMBOL_NAME(sys_sched_getparam) /* 155 */
683 .long SYMBOL_NAME(sys_sched_setscheduler)
684 .long SYMBOL_NAME(sys_sched_getscheduler)
685 .long SYMBOL_NAME(sys_sched_yield)
686 .long SYMBOL_NAME(sys_sched_get_priority_max)
687 .long SYMBOL_NAME(sys_sched_get_priority_min) /* 160 */
688 .long SYMBOL_NAME(sys_sched_rr_get_interval)
689 .long SYMBOL_NAME(sys_nanosleep)
690 .long SYMBOL_NAME(sys_mremap)
691 .long SYMBOL_NAME(sys_setresuid16)
692 .long SYMBOL_NAME(sys_getresuid16) /* 165 */
693 .long SYMBOL_NAME(sys_ni_syscall) /* was VM86 */
694 .long SYMBOL_NAME(sys_query_module)
695 .long SYMBOL_NAME(sys_poll)
696 .long SYMBOL_NAME(sys_nfsservctl)
697 .long SYMBOL_NAME(sys_setresgid16) /* 170 */
698 .long SYMBOL_NAME(sys_getresgid16)
699 .long SYMBOL_NAME(sys_prctl)
700 .long SYMBOL_NAME(sys_rt_sigreturn)
701 .long SYMBOL_NAME(sys_rt_sigaction)
702 .long SYMBOL_NAME(sys_rt_sigprocmask) /* 175 */
703 .long SYMBOL_NAME(sys_rt_sigpending)
704 .long SYMBOL_NAME(sys_rt_sigtimedwait)
705 .long SYMBOL_NAME(sys_rt_sigqueueinfo)
706 .long SYMBOL_NAME(sys_rt_sigsuspend)
707 .long SYMBOL_NAME(sys_pread) /* 180 */
708 .long SYMBOL_NAME(sys_pwrite)
709 .long SYMBOL_NAME(sys_chown16)
710 .long SYMBOL_NAME(sys_getcwd)
711 .long SYMBOL_NAME(sys_capget)
712 .long SYMBOL_NAME(sys_capset) /* 185 */
713 .long SYMBOL_NAME(sys_sigaltstack)
714 .long SYMBOL_NAME(sys_sendfile)
715 .long SYMBOL_NAME(sys_ni_syscall) /* streams1 */
716 .long SYMBOL_NAME(sys_ni_syscall) /* streams2 */
717 .long SYMBOL_NAME(sys_vfork) /* 190 */
718 .long SYMBOL_NAME(sys_getrlimit)
719 .long SYMBOL_NAME(sys_mmap2)
720 .long SYMBOL_NAME(sys_truncate64)
721 .long SYMBOL_NAME(sys_ftruncate64)
722 .long SYMBOL_NAME(sys_stat64) /* 195 */
723 .long SYMBOL_NAME(sys_lstat64)
724 .long SYMBOL_NAME(sys_fstat64)
725 .long SYMBOL_NAME(sys_lchown)
726 .long SYMBOL_NAME(sys_getuid)
727 .long SYMBOL_NAME(sys_getgid) /* 200 */
728 .long SYMBOL_NAME(sys_geteuid)
729 .long SYMBOL_NAME(sys_getegid)
730 .long SYMBOL_NAME(sys_setreuid)
731 .long SYMBOL_NAME(sys_setregid)
732 .long SYMBOL_NAME(sys_getgroups) /* 205 */
733 .long SYMBOL_NAME(sys_setgroups)
734 .long SYMBOL_NAME(sys_fchown)
735 .long SYMBOL_NAME(sys_setresuid)
736 .long SYMBOL_NAME(sys_getresuid)
737 .long SYMBOL_NAME(sys_setresgid) /* 210 */
738 .long SYMBOL_NAME(sys_getresgid)
739 .long SYMBOL_NAME(sys_chown)
740 .long SYMBOL_NAME(sys_setuid)
741 .long SYMBOL_NAME(sys_setgid)
742 .long SYMBOL_NAME(sys_setfsuid) /* 215 */
743 .long SYMBOL_NAME(sys_setfsgid)
744 .long SYMBOL_NAME(sys_pivot_root)
745 .long SYMBOL_NAME(sys_mincore)
746 .long SYMBOL_NAME(sys_madvise)
747 .long SYMBOL_NAME(sys_getdents64) /* 220 */
748 .long SYMBOL_NAME(sys_fcntl64)
749 .long SYMBOL_NAME(sys_ni_syscall) /* reserved for TUX */
750 .long SYMBOL_NAME(sys_ni_syscall) /* Reserved for Security */
751 .long SYMBOL_NAME(sys_gettid)
752 .long SYMBOL_NAME(sys_readahead) /* 225 */
753 .long SYMBOL_NAME(sys_setxattr)
754 .long SYMBOL_NAME(sys_lsetxattr)
755 .long SYMBOL_NAME(sys_fsetxattr)
756 .long SYMBOL_NAME(sys_getxattr)
757 .long SYMBOL_NAME(sys_lgetxattr) /* 230 */
758 .long SYMBOL_NAME(sys_fgetxattr)
759 .long SYMBOL_NAME(sys_listxattr)
760 .long SYMBOL_NAME(sys_llistxattr)
761 .long SYMBOL_NAME(sys_flistxattr)
762 .long SYMBOL_NAME(sys_removexattr) /* 235 */
763 .long SYMBOL_NAME(sys_lremovexattr)
764 .long SYMBOL_NAME(sys_fremovexattr)
765 .long SYMBOL_NAME(sys_tkill)
766 .long SYMBOL_NAME(sys_sendfile64)
767 .long SYMBOL_NAME(sys_ni_syscall) /* 240 reserved for futex */
768 .long SYMBOL_NAME(sys_ni_syscall) /* reserved for sched_setaffinity */
769 .long SYMBOL_NAME(sys_ni_syscall) /* reserved for sched_getaffinity */
770 .long SYMBOL_NAME(sys_ni_syscall) /* sys_set_thread_area */
771 .long SYMBOL_NAME(sys_ni_syscall) /* sys_get_thread_area */
772 .long SYMBOL_NAME(sys_ni_syscall) /* 245 sys_io_setup */
773 .long SYMBOL_NAME(sys_ni_syscall) /* sys_io_destroy */
774 .long SYMBOL_NAME(sys_ni_syscall) /* sys_io_getevents */
775 .long SYMBOL_NAME(sys_ni_syscall) /* sys_io_submit */
776 .long SYMBOL_NAME(sys_ni_syscall) /* sys_io_cancel */
777 .long SYMBOL_NAME(sys_ni_syscall) /* 250 sys_alloc_hugepages */
778 .long SYMBOL_NAME(sys_ni_syscall) /* sys_free_hugepages */
779 .long SYMBOL_NAME(sys_ni_syscall) /* sys_exit_group */
780 .long SYMBOL_NAME(sys_ni_syscall) /* sys_lookup_dcookie */
781 .long SYMBOL_NAME(sys_ni_syscall) /* sys_epoll_create */
782 .long SYMBOL_NAME(sys_ni_syscall) /* sys_epoll_ctl 255 */
783 .long SYMBOL_NAME(sys_ni_syscall) /* sys_epoll_wait */
784 .long SYMBOL_NAME(sys_ni_syscall) /* sys_remap_file_pages */
785 .long SYMBOL_NAME(sys_ni_syscall) /* sys_set_tid_address */
787 .rept NR_syscalls-(.-sys_call_table)/4
788 .long SYMBOL_NAME(sys_ni_syscall)
789 .endr