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