[arch-split]
[opensuse:kernel.git] / arch / i386 / kernel / entry.S
1 /*
2  *  linux/arch/i386/entry.S
3  *
4  *  Copyright (C) 1991, 1992  Linus Torvalds
5  */
6
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_from_system_call':
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  */
42
43 #include <linux/config.h>
44 #include <linux/sys.h>
45 #include <linux/linkage.h>
46 #include <asm/thread_info.h>
47 #include <asm/errno.h>
48 #include <asm/segment.h>
49 #include <asm/smp.h>
50 #include "irq_vectors.h"
51
52 EBX             = 0x00
53 ECX             = 0x04
54 EDX             = 0x08
55 ESI             = 0x0C
56 EDI             = 0x10
57 EBP             = 0x14
58 EAX             = 0x18
59 DS              = 0x1C
60 ES              = 0x20
61 ORIG_EAX        = 0x24
62 EIP             = 0x28
63 CS              = 0x2C
64 EFLAGS          = 0x30
65 OLDESP          = 0x34
66 OLDSS           = 0x38
67
68 CF_MASK         = 0x00000001
69 IF_MASK         = 0x00000200
70 NT_MASK         = 0x00004000
71 VM_MASK         = 0x00020000
72
73 /*
74  * These are offsets into the irq_stat structure
75  * There is one per cpu and it is aligned to 32
76  * byte boundry (we put that here as a shift count)
77  */
78 irq_array_shift = CONFIG_X86_L1_CACHE_SHIFT
79 local_irq_count = 4
80 local_bh_count  = 8
81
82 #ifdef CONFIG_SMP
83 #define GET_CPU_IDX \
84                 movl TI_CPU(%ebx), %eax;  \
85                 shll $irq_array_shift, %eax
86 #define GET_CURRENT_CPU_IDX \
87                 GET_THREAD_INFO(%ebx); \
88                 GET_CPU_IDX
89 #define CPU_IDX (,%eax)
90 #else
91 #define GET_CPU_IDX
92 #define GET_CURRENT_CPU_IDX GET_THREAD_INFO(%ebx)
93 #define CPU_IDX
94 #endif
95
96 #ifdef CONFIG_PREEMPT
97 #define preempt_stop cli
98 #define INC_PRE_COUNT(reg) incl TI_PRE_COUNT(reg);
99 #define DEC_PRE_COUNT(reg) decl TI_PRE_COUNT(reg);
100 #else
101 #define preempt_stop
102 #define INC_PRE_COUNT(reg)
103 #define DEC_PRE_COUNT(reg)
104 #define resume_kernel restore_all
105 #endif
106
107 #define SAVE_ALL \
108         cld; \
109         pushl %es; \
110         pushl %ds; \
111         pushl %eax; \
112         pushl %ebp; \
113         pushl %edi; \
114         pushl %esi; \
115         pushl %edx; \
116         pushl %ecx; \
117         pushl %ebx; \
118         movl $(__KERNEL_DS), %edx; \
119         movl %edx, %ds; \
120         movl %edx, %es;
121
122 #define RESTORE_ALL     \
123         popl %ebx;      \
124         popl %ecx;      \
125         popl %edx;      \
126         popl %esi;      \
127         popl %edi;      \
128         popl %ebp;      \
129         popl %eax;      \
130 1:      popl %ds;       \
131 2:      popl %es;       \
132         addl $4, %esp;  \
133 3:      iret;           \
134 .section .fixup,"ax";   \
135 4:      movl $0,(%esp); \
136         jmp 1b;         \
137 5:      movl $0,(%esp); \
138         jmp 2b;         \
139 6:      pushl %ss;      \
140         popl %ds;       \
141         pushl %ss;      \
142         popl %es;       \
143         pushl $11;      \
144         call do_exit;   \
145 .previous;              \
146 .section __ex_table,"a";\
147         .align 4;       \
148         .long 1b,4b;    \
149         .long 2b,5b;    \
150         .long 3b,6b;    \
151 .previous
152
153 ENTRY(lcall7)
154         pushfl                  # We get a different stack layout with call
155                                 # gates, which has to be cleaned up later..
156         pushl %eax
157         SAVE_ALL
158         movl EIP(%esp), %eax    # due to call gates, this is eflags, not eip..
159         movl CS(%esp), %edx     # this is eip..
160         movl EFLAGS(%esp), %ecx # and this is cs..
161         movl %eax,EFLAGS(%esp)  #
162         movl %edx,EIP(%esp)     # Now we move them to their "normal" places
163         movl %ecx,CS(%esp)      #
164         movl %esp, %ebx
165         pushl %ebx
166         andl $-8192, %ebx       # GET_THREAD_INFO
167         movl TI_EXEC_DOMAIN(%ebx), %edx # Get the execution domain
168         movl 4(%edx), %edx      # Get the lcall7 handler for the domain
169         pushl $0x7
170         call *%edx
171         addl $4, %esp
172         popl %eax
173         jmp resume_userspace
174
175 ENTRY(lcall27)
176         pushfl                  # We get a different stack layout with call
177                                 # gates, which has to be cleaned up later..
178         pushl %eax
179         SAVE_ALL
180         movl EIP(%esp), %eax    # due to call gates, this is eflags, not eip..
181         movl CS(%esp), %edx     # this is eip..
182         movl EFLAGS(%esp), %ecx # and this is cs..
183         movl %eax,EFLAGS(%esp)  #
184         movl %edx,EIP(%esp)     # Now we move them to their "normal" places
185         movl %ecx,CS(%esp)      #
186         movl %esp, %ebx
187         pushl %ebx
188         andl $-8192, %ebx       # GET_THREAD_INFO
189         movl TI_EXEC_DOMAIN(%ebx), %edx # Get the execution domain
190         movl 4(%edx), %edx      # Get the lcall7 handler for the domain
191         pushl $0x27
192         call *%edx
193         addl $4, %esp
194         popl %eax
195         jmp resume_userspace
196
197
198 ENTRY(ret_from_fork)
199 #if CONFIG_SMP || CONFIG_PREEMPT
200         call SYMBOL_NAME(schedule_tail)
201 #endif
202         GET_THREAD_INFO(%ebx)
203         jmp syscall_exit
204
205 /*
206  * Return to user mode is not as complex as all this looks,
207  * but we want the default path for a system call return to
208  * go as quickly as possible which is why some of this is
209  * less clear than it otherwise should be.
210  */
211
212         # userspace resumption stub bypassing syscall exit tracing
213         ALIGN
214 ret_from_intr:
215         preempt_stop
216         DEC_PRE_COUNT(%ebx)
217 ret_from_exception:
218         movl EFLAGS(%esp), %eax         # mix EFLAGS and CS
219         movb CS(%esp), %al
220         testl $(VM_MASK | 3), %eax
221         jz resume_kernel                # returning to kernel or vm86-space
222 ENTRY(resume_userspace)
223         cli                             # make sure we don't miss an interrupt
224                                         # setting need_resched or sigpending
225                                         # between sampling and the iret
226         movl TI_FLAGS(%ebx), %ecx
227         andl $_TIF_WORK_MASK, %ecx      # is there any work to be done on
228                                         # int/exception return?
229         jne work_pending
230         jmp restore_all
231
232 #ifdef CONFIG_PREEMPT
233 ENTRY(resume_kernel)
234         cmpl $0,TI_PRE_COUNT(%ebx)
235         jnz restore_all
236         movl TI_FLAGS(%ebx), %ecx
237         testb $_TIF_NEED_RESCHED, %cl
238         jz restore_all
239         movl SYMBOL_NAME(irq_stat)+local_bh_count CPU_IDX, %ecx
240         addl SYMBOL_NAME(irq_stat)+local_irq_count CPU_IDX, %ecx
241         jnz restore_all
242         movl $PREEMPT_ACTIVE,TI_PRE_COUNT(%ebx)
243         sti
244         call SYMBOL_NAME(schedule)
245         movl $0,TI_PRE_COUNT(%ebx) 
246         jmp restore_all
247 #endif
248
249         # system call handler stub
250         ALIGN
251 ENTRY(system_call)
252         pushl %eax                      # save orig_eax
253         SAVE_ALL
254         GET_THREAD_INFO(%ebx)
255         cmpl $(NR_syscalls), %eax
256         jae syscall_badsys
257                                         # system call tracing in operation
258         testb $_TIF_SYSCALL_TRACE,TI_FLAGS(%ebx)
259         jnz syscall_trace_entry
260 syscall_call:
261         call *SYMBOL_NAME(sys_call_table)(,%eax,4)
262         movl %eax,EAX(%esp)             # store the return value
263 syscall_exit:
264         cli                             # make sure we don't miss an interrupt
265                                         # setting need_resched or sigpending
266                                         # between sampling and the iret
267         movl TI_FLAGS(%ebx), %ecx
268         testw $_TIF_ALLWORK_MASK, %cx   # current->work
269         jne syscall_exit_work
270 restore_all:
271         RESTORE_ALL
272
273         # perform work that needs to be done immediately before resumption
274         ALIGN
275 work_pending:
276         testb $_TIF_NEED_RESCHED, %cl
277         jz work_notifysig
278 work_resched:
279         call SYMBOL_NAME(schedule)
280         cli                             # make sure we don't miss an interrupt
281                                         # setting need_resched or sigpending
282                                         # between sampling and the iret
283         movl TI_FLAGS(%ebx), %ecx
284         andl $_TIF_WORK_MASK, %ecx      # is there any work to be done other
285                                         # than syscall tracing?
286         jz restore_all
287         testb $_TIF_NEED_RESCHED, %cl
288         jnz work_resched
289
290 work_notifysig:                         # deal with pending signals and
291                                         # notify-resume requests
292         testl $(VM_MASK),EFLAGS(%esp)
293         movl %esp, %eax
294         jne work_notifysig_v86          # returning to kernel-space or
295                                         # vm86-space
296         xorl %edx, %edx
297         call SYMBOL_NAME(do_notify_resume)
298         jmp restore_all
299
300         ALIGN
301 work_notifysig_v86:
302         pushl %ecx
303         call SYMBOL_NAME(save_v86_state)
304         popl %ecx
305         movl %eax, %esp
306         xorl %edx, %edx
307         call SYMBOL_NAME(do_notify_resume)
308         jmp restore_all
309
310         # perform syscall exit tracing
311         ALIGN
312 syscall_trace_entry:
313         movl $-ENOSYS,EAX(%esp)
314         movl %esp, %eax
315         xorl %edx,%edx
316         call SYMBOL_NAME(do_syscall_trace)
317         movl ORIG_EAX(%esp), %eax
318         cmpl $(NR_syscalls), %eax
319         jnae syscall_call
320         jmp syscall_exit
321
322         # perform syscall exit tracing
323         ALIGN
324 syscall_exit_work:
325         testb $_TIF_SYSCALL_TRACE, %cl
326         jz work_pending
327         sti                             # could let do_syscall_trace() call
328                                         # schedule() instead
329         movl %esp, %eax
330         movl $1, %edx
331         call SYMBOL_NAME(do_syscall_trace)
332         jmp resume_userspace
333
334         ALIGN
335 syscall_badsys:
336         movl $-ENOSYS,EAX(%esp)
337         jmp resume_userspace
338
339 /*
340  * Build the entry stubs and pointer table with
341  * some assembler magic.
342  */
343 .data
344 ENTRY(interrupt)
345 .text
346
347 vector=0
348 ENTRY(irq_entries_start)
349 .rept NR_IRQS
350         ALIGN
351 1:      pushl $vector-256
352         jmp common_interrupt
353 .data
354         .long 1b
355 .text
356 vector=vector+1
357 .endr
358
359         ALIGN
360 common_interrupt:
361         SAVE_ALL
362         GET_THREAD_INFO(%ebx)
363         INC_PRE_COUNT(%ebx)
364         call SYMBOL_NAME(do_IRQ)
365         jmp ret_from_intr
366
367 #define BUILD_INTERRUPT(name, nr)       \
368 ENTRY(name)                             \
369         pushl $nr-256;                  \
370         SAVE_ALL                        \
371         GET_THREAD_INFO(%ebx);          \
372         INC_PRE_COUNT(%ebx)             \
373         call SYMBOL_NAME(smp_/**/name); \
374         jmp ret_from_intr;
375
376 /* The include is where all of the SMP etc. interrupts come from */
377 #include "entry_arch.h"
378
379 ENTRY(divide_error)
380         pushl $0                        # no error code
381         pushl $ SYMBOL_NAME(do_divide_error)
382         ALIGN
383 error_code:
384         pushl %ds
385         pushl %eax
386         xorl %eax, %eax
387         pushl %ebp
388         pushl %edi
389         pushl %esi
390         pushl %edx
391         decl %eax                       # eax = -1
392         pushl %ecx
393         pushl %ebx
394         cld
395         movl %es, %ecx
396         movl ORIG_EAX(%esp), %esi       # get the error code
397         movl ES(%esp), %edi             # get the function address
398         movl %eax, ORIG_EAX(%esp)
399         movl %ecx, ES(%esp)
400         movl %esp, %edx
401         pushl %esi                      # push the error code
402         pushl %edx                      # push the pt_regs pointer
403         movl $(__KERNEL_DS), %edx
404         movl %edx, %ds
405         movl %edx, %es
406         GET_THREAD_INFO(%ebx)
407         call *%edi
408         addl $8, %esp
409         preempt_stop
410         jmp ret_from_exception
411
412 ENTRY(coprocessor_error)
413         pushl $0
414         pushl $ SYMBOL_NAME(do_coprocessor_error)
415         jmp error_code
416
417 ENTRY(simd_coprocessor_error)
418         pushl $0
419         pushl $ SYMBOL_NAME(do_simd_coprocessor_error)
420         jmp error_code
421
422 ENTRY(device_not_available)
423         pushl $-1                       # mark this as an int
424         SAVE_ALL
425         GET_THREAD_INFO(%ebx)
426         movl %cr0, %eax
427         testl $0x4, %eax                # EM (math emulation bit)
428         jne device_not_available_emulate
429         preempt_stop
430         call SYMBOL_NAME(math_state_restore)
431         jmp ret_from_exception
432 device_not_available_emulate:
433         pushl $0                        # temporary storage for ORIG_EIP
434         call  SYMBOL_NAME(math_emulate)
435         addl $4, %esp
436         preempt_stop
437         jmp ret_from_exception
438
439 ENTRY(debug)
440         pushl $0
441         pushl $ SYMBOL_NAME(do_debug)
442         jmp error_code
443
444 ENTRY(nmi)
445         pushl %eax
446         SAVE_ALL
447         movl %esp, %edx
448         pushl $0
449         pushl %edx
450         call SYMBOL_NAME(do_nmi)
451         addl $8, %esp
452         RESTORE_ALL
453
454 ENTRY(int3)
455         pushl $0
456         pushl $ SYMBOL_NAME(do_int3)
457         jmp error_code
458
459 ENTRY(overflow)
460         pushl $0
461         pushl $ SYMBOL_NAME(do_overflow)
462         jmp error_code
463
464 ENTRY(bounds)
465         pushl $0
466         pushl $ SYMBOL_NAME(do_bounds)
467         jmp error_code
468
469 ENTRY(invalid_op)
470         pushl $0
471         pushl $ SYMBOL_NAME(do_invalid_op)
472         jmp error_code
473
474 ENTRY(coprocessor_segment_overrun)
475         pushl $0
476         pushl $ SYMBOL_NAME(do_coprocessor_segment_overrun)
477         jmp error_code
478
479 ENTRY(double_fault)
480         pushl $ SYMBOL_NAME(do_double_fault)
481         jmp error_code
482
483 ENTRY(invalid_TSS)
484         pushl $ SYMBOL_NAME(do_invalid_TSS)
485         jmp error_code
486
487 ENTRY(segment_not_present)
488         pushl $ SYMBOL_NAME(do_segment_not_present)
489         jmp error_code
490
491 ENTRY(stack_segment)
492         pushl $ SYMBOL_NAME(do_stack_segment)
493         jmp error_code
494
495 ENTRY(general_protection)
496         pushl $ SYMBOL_NAME(do_general_protection)
497         jmp error_code
498
499 ENTRY(alignment_check)
500         pushl $ SYMBOL_NAME(do_alignment_check)
501         jmp error_code
502
503 ENTRY(page_fault)
504         pushl $ SYMBOL_NAME(do_page_fault)
505         jmp error_code
506
507 ENTRY(machine_check)
508         pushl $0
509         pushl $ SYMBOL_NAME(do_machine_check)
510         jmp error_code
511
512 ENTRY(spurious_interrupt_bug)
513         pushl $0
514         pushl $ SYMBOL_NAME(do_spurious_interrupt_bug)
515         jmp error_code
516
517 .data
518 ENTRY(sys_call_table)
519         .long SYMBOL_NAME(sys_ni_syscall)       /* 0  -  old "setup()" system call*/
520         .long SYMBOL_NAME(sys_exit)
521         .long SYMBOL_NAME(sys_fork)
522         .long SYMBOL_NAME(sys_read)
523         .long SYMBOL_NAME(sys_write)
524         .long SYMBOL_NAME(sys_open)             /* 5 */
525         .long SYMBOL_NAME(sys_close)
526         .long SYMBOL_NAME(sys_waitpid)
527         .long SYMBOL_NAME(sys_creat)
528         .long SYMBOL_NAME(sys_link)
529         .long SYMBOL_NAME(sys_unlink)           /* 10 */
530         .long SYMBOL_NAME(sys_execve)
531         .long SYMBOL_NAME(sys_chdir)
532         .long SYMBOL_NAME(sys_time)
533         .long SYMBOL_NAME(sys_mknod)
534         .long SYMBOL_NAME(sys_chmod)            /* 15 */
535         .long SYMBOL_NAME(sys_lchown16)
536         .long SYMBOL_NAME(sys_ni_syscall)       /* old break syscall holder */
537         .long SYMBOL_NAME(sys_stat)
538         .long SYMBOL_NAME(sys_lseek)
539         .long SYMBOL_NAME(sys_getpid)           /* 20 */
540         .long SYMBOL_NAME(sys_mount)
541         .long SYMBOL_NAME(sys_oldumount)
542         .long SYMBOL_NAME(sys_setuid16)
543         .long SYMBOL_NAME(sys_getuid16)
544         .long SYMBOL_NAME(sys_stime)            /* 25 */
545         .long SYMBOL_NAME(sys_ptrace)
546         .long SYMBOL_NAME(sys_alarm)
547         .long SYMBOL_NAME(sys_fstat)
548         .long SYMBOL_NAME(sys_pause)
549         .long SYMBOL_NAME(sys_utime)            /* 30 */
550         .long SYMBOL_NAME(sys_ni_syscall)       /* old stty syscall holder */
551         .long SYMBOL_NAME(sys_ni_syscall)       /* old gtty syscall holder */
552         .long SYMBOL_NAME(sys_access)
553         .long SYMBOL_NAME(sys_nice)
554         .long SYMBOL_NAME(sys_ni_syscall)       /* 35 */
555                                                 /* old ftime syscall holder */
556         .long SYMBOL_NAME(sys_sync)
557         .long SYMBOL_NAME(sys_kill)
558         .long SYMBOL_NAME(sys_rename)
559         .long SYMBOL_NAME(sys_mkdir)
560         .long SYMBOL_NAME(sys_rmdir)            /* 40 */
561         .long SYMBOL_NAME(sys_dup)
562         .long SYMBOL_NAME(sys_pipe)
563         .long SYMBOL_NAME(sys_times)
564         .long SYMBOL_NAME(sys_ni_syscall)       /* old prof syscall holder */
565         .long SYMBOL_NAME(sys_brk)              /* 45 */
566         .long SYMBOL_NAME(sys_setgid16)
567         .long SYMBOL_NAME(sys_getgid16)
568         .long SYMBOL_NAME(sys_signal)
569         .long SYMBOL_NAME(sys_geteuid16)
570         .long SYMBOL_NAME(sys_getegid16)        /* 50 */
571         .long SYMBOL_NAME(sys_acct)
572         .long SYMBOL_NAME(sys_umount)           /* recycled never used phys() */
573         .long SYMBOL_NAME(sys_ni_syscall)       /* old lock syscall holder */
574         .long SYMBOL_NAME(sys_ioctl)
575         .long SYMBOL_NAME(sys_fcntl)            /* 55 */
576         .long SYMBOL_NAME(sys_ni_syscall)       /* old mpx syscall holder */
577         .long SYMBOL_NAME(sys_setpgid)
578         .long SYMBOL_NAME(sys_ni_syscall)       /* old ulimit syscall holder */
579         .long SYMBOL_NAME(sys_olduname)
580         .long SYMBOL_NAME(sys_umask)            /* 60 */
581         .long SYMBOL_NAME(sys_chroot)
582         .long SYMBOL_NAME(sys_ustat)
583         .long SYMBOL_NAME(sys_dup2)
584         .long SYMBOL_NAME(sys_getppid)
585         .long SYMBOL_NAME(sys_getpgrp)          /* 65 */
586         .long SYMBOL_NAME(sys_setsid)
587         .long SYMBOL_NAME(sys_sigaction)
588         .long SYMBOL_NAME(sys_sgetmask)
589         .long SYMBOL_NAME(sys_ssetmask)
590         .long SYMBOL_NAME(sys_setreuid16)       /* 70 */
591         .long SYMBOL_NAME(sys_setregid16)
592         .long SYMBOL_NAME(sys_sigsuspend)
593         .long SYMBOL_NAME(sys_sigpending)
594         .long SYMBOL_NAME(sys_sethostname)
595         .long SYMBOL_NAME(sys_setrlimit)        /* 75 */
596         .long SYMBOL_NAME(sys_old_getrlimit)
597         .long SYMBOL_NAME(sys_getrusage)
598         .long SYMBOL_NAME(sys_gettimeofday)
599         .long SYMBOL_NAME(sys_settimeofday)
600         .long SYMBOL_NAME(sys_getgroups16)      /* 80 */
601         .long SYMBOL_NAME(sys_setgroups16)
602         .long SYMBOL_NAME(old_select)
603         .long SYMBOL_NAME(sys_symlink)
604         .long SYMBOL_NAME(sys_lstat)
605         .long SYMBOL_NAME(sys_readlink)         /* 85 */
606         .long SYMBOL_NAME(sys_uselib)
607         .long SYMBOL_NAME(sys_swapon)
608         .long SYMBOL_NAME(sys_reboot)
609         .long SYMBOL_NAME(old_readdir)
610         .long SYMBOL_NAME(old_mmap)             /* 90 */
611         .long SYMBOL_NAME(sys_munmap)
612         .long SYMBOL_NAME(sys_truncate)
613         .long SYMBOL_NAME(sys_ftruncate)
614         .long SYMBOL_NAME(sys_fchmod)
615         .long SYMBOL_NAME(sys_fchown16)         /* 95 */
616         .long SYMBOL_NAME(sys_getpriority)
617         .long SYMBOL_NAME(sys_setpriority)
618         .long SYMBOL_NAME(sys_ni_syscall)       /* old profil syscall holder */
619         .long SYMBOL_NAME(sys_statfs)
620         .long SYMBOL_NAME(sys_fstatfs)          /* 100 */
621         .long SYMBOL_NAME(sys_ioperm)
622         .long SYMBOL_NAME(sys_socketcall)
623         .long SYMBOL_NAME(sys_syslog)
624         .long SYMBOL_NAME(sys_setitimer)
625         .long SYMBOL_NAME(sys_getitimer)        /* 105 */
626         .long SYMBOL_NAME(sys_newstat)
627         .long SYMBOL_NAME(sys_newlstat)
628         .long SYMBOL_NAME(sys_newfstat)
629         .long SYMBOL_NAME(sys_uname)
630         .long SYMBOL_NAME(sys_iopl)             /* 110 */
631         .long SYMBOL_NAME(sys_vhangup)
632         .long SYMBOL_NAME(sys_ni_syscall)       /* old "idle" system call */
633         .long SYMBOL_NAME(sys_vm86old)
634         .long SYMBOL_NAME(sys_wait4)
635         .long SYMBOL_NAME(sys_swapoff)          /* 115 */
636         .long SYMBOL_NAME(sys_sysinfo)
637         .long SYMBOL_NAME(sys_ipc)
638         .long SYMBOL_NAME(sys_fsync)
639         .long SYMBOL_NAME(sys_sigreturn)
640         .long SYMBOL_NAME(sys_clone)            /* 120 */
641         .long SYMBOL_NAME(sys_setdomainname)
642         .long SYMBOL_NAME(sys_newuname)
643         .long SYMBOL_NAME(sys_modify_ldt)
644         .long SYMBOL_NAME(sys_adjtimex)
645         .long SYMBOL_NAME(sys_mprotect)         /* 125 */
646         .long SYMBOL_NAME(sys_sigprocmask)
647         .long SYMBOL_NAME(sys_create_module)
648         .long SYMBOL_NAME(sys_init_module)
649         .long SYMBOL_NAME(sys_delete_module)
650         .long SYMBOL_NAME(sys_get_kernel_syms)  /* 130 */
651         .long SYMBOL_NAME(sys_quotactl)
652         .long SYMBOL_NAME(sys_getpgid)
653         .long SYMBOL_NAME(sys_fchdir)
654         .long SYMBOL_NAME(sys_bdflush)
655         .long SYMBOL_NAME(sys_sysfs)            /* 135 */
656         .long SYMBOL_NAME(sys_personality)
657         .long SYMBOL_NAME(sys_ni_syscall)       /* for afs_syscall */
658         .long SYMBOL_NAME(sys_setfsuid16)
659         .long SYMBOL_NAME(sys_setfsgid16)
660         .long SYMBOL_NAME(sys_llseek)           /* 140 */
661         .long SYMBOL_NAME(sys_getdents)
662         .long SYMBOL_NAME(sys_select)
663         .long SYMBOL_NAME(sys_flock)
664         .long SYMBOL_NAME(sys_msync)
665         .long SYMBOL_NAME(sys_readv)            /* 145 */
666         .long SYMBOL_NAME(sys_writev)
667         .long SYMBOL_NAME(sys_getsid)
668         .long SYMBOL_NAME(sys_fdatasync)
669         .long SYMBOL_NAME(sys_sysctl)
670         .long SYMBOL_NAME(sys_mlock)            /* 150 */
671         .long SYMBOL_NAME(sys_munlock)
672         .long SYMBOL_NAME(sys_mlockall)
673         .long SYMBOL_NAME(sys_munlockall)
674         .long SYMBOL_NAME(sys_sched_setparam)
675         .long SYMBOL_NAME(sys_sched_getparam)   /* 155 */
676         .long SYMBOL_NAME(sys_sched_setscheduler)
677         .long SYMBOL_NAME(sys_sched_getscheduler)
678         .long SYMBOL_NAME(sys_sched_yield)
679         .long SYMBOL_NAME(sys_sched_get_priority_max)
680         .long SYMBOL_NAME(sys_sched_get_priority_min)  /* 160 */
681         .long SYMBOL_NAME(sys_sched_rr_get_interval)
682         .long SYMBOL_NAME(sys_nanosleep)
683         .long SYMBOL_NAME(sys_mremap)
684         .long SYMBOL_NAME(sys_setresuid16)
685         .long SYMBOL_NAME(sys_getresuid16)      /* 165 */
686         .long SYMBOL_NAME(sys_vm86)
687         .long SYMBOL_NAME(sys_query_module)
688         .long SYMBOL_NAME(sys_poll)
689         .long SYMBOL_NAME(sys_nfsservctl)
690         .long SYMBOL_NAME(sys_setresgid16)      /* 170 */
691         .long SYMBOL_NAME(sys_getresgid16)
692         .long SYMBOL_NAME(sys_prctl)
693         .long SYMBOL_NAME(sys_rt_sigreturn)
694         .long SYMBOL_NAME(sys_rt_sigaction)
695         .long SYMBOL_NAME(sys_rt_sigprocmask)   /* 175 */
696         .long SYMBOL_NAME(sys_rt_sigpending)
697         .long SYMBOL_NAME(sys_rt_sigtimedwait)
698         .long SYMBOL_NAME(sys_rt_sigqueueinfo)
699         .long SYMBOL_NAME(sys_rt_sigsuspend)
700         .long SYMBOL_NAME(sys_pread)            /* 180 */
701         .long SYMBOL_NAME(sys_pwrite)
702         .long SYMBOL_NAME(sys_chown16)
703         .long SYMBOL_NAME(sys_getcwd)
704         .long SYMBOL_NAME(sys_capget)
705         .long SYMBOL_NAME(sys_capset)           /* 185 */
706         .long SYMBOL_NAME(sys_sigaltstack)
707         .long SYMBOL_NAME(sys_sendfile)
708         .long SYMBOL_NAME(sys_ni_syscall)       /* streams1 */
709         .long SYMBOL_NAME(sys_ni_syscall)       /* streams2 */
710         .long SYMBOL_NAME(sys_vfork)            /* 190 */
711         .long SYMBOL_NAME(sys_getrlimit)
712         .long SYMBOL_NAME(sys_mmap2)
713         .long SYMBOL_NAME(sys_truncate64)
714         .long SYMBOL_NAME(sys_ftruncate64)
715         .long SYMBOL_NAME(sys_stat64)           /* 195 */
716         .long SYMBOL_NAME(sys_lstat64)
717         .long SYMBOL_NAME(sys_fstat64)
718         .long SYMBOL_NAME(sys_lchown)
719         .long SYMBOL_NAME(sys_getuid)
720         .long SYMBOL_NAME(sys_getgid)           /* 200 */
721         .long SYMBOL_NAME(sys_geteuid)
722         .long SYMBOL_NAME(sys_getegid)
723         .long SYMBOL_NAME(sys_setreuid)
724         .long SYMBOL_NAME(sys_setregid)
725         .long SYMBOL_NAME(sys_getgroups)        /* 205 */
726         .long SYMBOL_NAME(sys_setgroups)
727         .long SYMBOL_NAME(sys_fchown)
728         .long SYMBOL_NAME(sys_setresuid)
729         .long SYMBOL_NAME(sys_getresuid)
730         .long SYMBOL_NAME(sys_setresgid)        /* 210 */
731         .long SYMBOL_NAME(sys_getresgid)
732         .long SYMBOL_NAME(sys_chown)
733         .long SYMBOL_NAME(sys_setuid)
734         .long SYMBOL_NAME(sys_setgid)
735         .long SYMBOL_NAME(sys_setfsuid)         /* 215 */
736         .long SYMBOL_NAME(sys_setfsgid)
737         .long SYMBOL_NAME(sys_pivot_root)
738         .long SYMBOL_NAME(sys_mincore)
739         .long SYMBOL_NAME(sys_madvise)
740         .long SYMBOL_NAME(sys_getdents64)       /* 220 */
741         .long SYMBOL_NAME(sys_fcntl64)
742         .long SYMBOL_NAME(sys_ni_syscall)       /* reserved for TUX */
743         .long SYMBOL_NAME(sys_ni_syscall)       /* Reserved for Security */
744         .long SYMBOL_NAME(sys_gettid)
745         .long SYMBOL_NAME(sys_readahead)        /* 225 */
746         .long SYMBOL_NAME(sys_setxattr)
747         .long SYMBOL_NAME(sys_lsetxattr)
748         .long SYMBOL_NAME(sys_fsetxattr)
749         .long SYMBOL_NAME(sys_getxattr)
750         .long SYMBOL_NAME(sys_lgetxattr)        /* 230 */
751         .long SYMBOL_NAME(sys_fgetxattr)
752         .long SYMBOL_NAME(sys_listxattr)
753         .long SYMBOL_NAME(sys_llistxattr)
754         .long SYMBOL_NAME(sys_flistxattr)
755         .long SYMBOL_NAME(sys_removexattr)      /* 235 */
756         .long SYMBOL_NAME(sys_lremovexattr)
757         .long SYMBOL_NAME(sys_fremovexattr)
758         .long SYMBOL_NAME(sys_tkill)
759         .long SYMBOL_NAME(sys_sendfile64)
760         .long SYMBOL_NAME(sys_futex)            /* 240 */
761         .long SYMBOL_NAME(sys_sched_setaffinity)
762         .long SYMBOL_NAME(sys_sched_getaffinity)
763
764         .rept NR_syscalls-(.-sys_call_table)/4
765                 .long SYMBOL_NAME(sys_ni_syscall)
766         .endr