| /* |
| * linux/arch/i386/entry.S |
| * |
| * Copyright (C) 1991, 1992 Linus Torvalds |
| */ |
| |
| /* |
| * entry.S contains the system-call and fault low-level handling routines. |
| * This also contains the timer-interrupt handler, as well as all interrupts |
| * and faults that can result in a task-switch. |
| * |
| * NOTE: This code handles signal-recognition, which happens every time |
| * after a timer-interrupt and after each system call. |
| * |
| * I changed all the .align's to 4 (16 byte alignment), as that's faster |
| * on a 486. |
| * |
| * Stack layout in 'ret_from_system_call': |
| * ptrace needs to have all regs on the stack. |
| * if the order here is changed, it needs to be |
| * updated in fork.c:copy_process, signal.c:do_signal, |
| * ptrace.c and ptrace.h |
| * |
| * 0(%esp) - %ebx |
| * 4(%esp) - %ecx |
| * 8(%esp) - %edx |
| * C(%esp) - %esi |
| * 10(%esp) - %edi |
| * 14(%esp) - %ebp |
| * 18(%esp) - %eax |
| * 1C(%esp) - %ds |
| * 20(%esp) - %es |
| * 24(%esp) - orig_eax |
| * 28(%esp) - %eip |
| * 2C(%esp) - %cs |
| * 30(%esp) - %eflags |
| * 34(%esp) - %oldesp |
| * 38(%esp) - %oldss |
| * |
| * "current" is in register %ebx during any slow entries. |
| */ |
| |
| #include <linux/config.h> |
| #include <linux/sys.h> |
| #include <linux/linkage.h> |
| #include <asm/thread_info.h> |
| #include <asm/errno.h> |
| #include <asm/segment.h> |
| #include <asm/smp.h> |
| |
| EBX = 0x00 |
| ECX = 0x04 |
| EDX = 0x08 |
| ESI = 0x0C |
| EDI = 0x10 |
| EBP = 0x14 |
| EAX = 0x18 |
| DS = 0x1C |
| ES = 0x20 |
| ORIG_EAX = 0x24 |
| EIP = 0x28 |
| CS = 0x2C |
| EFLAGS = 0x30 |
| OLDESP = 0x34 |
| OLDSS = 0x38 |
| |
| CF_MASK = 0x00000001 |
| IF_MASK = 0x00000200 |
| NT_MASK = 0x00004000 |
| VM_MASK = 0x00020000 |
| |
| #define SAVE_ALL \ |
| cld; \ |
| pushl %es; \ |
| pushl %ds; \ |
| pushl %eax; \ |
| pushl %ebp; \ |
| pushl %edi; \ |
| pushl %esi; \ |
| pushl %edx; \ |
| pushl %ecx; \ |
| pushl %ebx; \ |
| movl $(__KERNEL_DS),%edx; \ |
| movl %edx,%ds; \ |
| movl %edx,%es; |
| |
| #define RESTORE_ALL \ |
| popl %ebx; \ |
| popl %ecx; \ |
| popl %edx; \ |
| popl %esi; \ |
| popl %edi; \ |
| popl %ebp; \ |
| popl %eax; \ |
| 1: popl %ds; \ |
| 2: popl %es; \ |
| addl $4,%esp; \ |
| 3: iret; \ |
| .section .fixup,"ax"; \ |
| 4: movl $0,(%esp); \ |
| jmp 1b; \ |
| 5: movl $0,(%esp); \ |
| jmp 2b; \ |
| 6: pushl %ss; \ |
| popl %ds; \ |
| pushl %ss; \ |
| popl %es; \ |
| pushl $11; \ |
| call do_exit; \ |
| .previous; \ |
| .section __ex_table,"a";\ |
| .align 4; \ |
| .long 1b,4b; \ |
| .long 2b,5b; \ |
| .long 3b,6b; \ |
| .previous |
| |
| ENTRY(lcall7) |
| pushfl # We get a different stack layout with call gates, |
| pushl %eax # which has to be cleaned up later.. |
| SAVE_ALL |
| movl EIP(%esp),%eax # due to call gates, this is eflags, not eip.. |
| movl CS(%esp),%edx # this is eip.. |
| movl EFLAGS(%esp),%ecx # and this is cs.. |
| movl %eax,EFLAGS(%esp) # |
| movl %edx,EIP(%esp) # Now we move them to their "normal" places |
| movl %ecx,CS(%esp) # |
| movl %esp,%ebx |
| pushl %ebx |
| andl $-8192,%ebx # GET_THREAD_INFO |
| movl TI_EXEC_DOMAIN(%ebx),%edx # Get the execution domain |
| movl 4(%edx),%edx # Get the lcall7 handler for the domain |
| pushl $0x7 |
| call *%edx |
| addl $4, %esp |
| popl %eax |
| jmp resume_userspace |
| |
| ENTRY(lcall27) |
| pushfl # We get a different stack layout with call gates, |
| pushl %eax # which has to be cleaned up later.. |
| SAVE_ALL |
| movl EIP(%esp),%eax # due to call gates, this is eflags, not eip.. |
| movl CS(%esp),%edx # this is eip.. |
| movl EFLAGS(%esp),%ecx # and this is cs.. |
| movl %eax,EFLAGS(%esp) # |
| movl %edx,EIP(%esp) # Now we move them to their "normal" places |
| movl %ecx,CS(%esp) # |
| movl %esp,%ebx |
| pushl %ebx |
| andl $-8192,%ebx # GET_THREAD_INFO |
| movl TI_EXEC_DOMAIN(%ebx),%edx # Get the execution domain |
| movl 4(%edx),%edx # Get the lcall7 handler for the domain |
| pushl $0x27 |
| call *%edx |
| addl $4, %esp |
| popl %eax |
| jmp resume_userspace |
| |
| |
| ENTRY(ret_from_fork) |
| pushl %ebx |
| call SYMBOL_NAME(schedule_tail) |
| addl $4, %esp |
| GET_THREAD_INFO(%ebx) |
| jmp syscall_exit |
| |
| /* |
| * Return to user mode is not as complex as all this looks, |
| * but we want the default path for a system call return to |
| * go as quickly as possible which is why some of this is |
| * less clear than it otherwise should be. |
| */ |
| |
| # userspace resumption stub bypassing syscall exit tracing |
| ALIGN |
| ENTRY(ret_from_intr) |
| GET_THREAD_INFO(%ebx) |
| ret_from_exception: |
| movl EFLAGS(%esp),%eax # mix EFLAGS and CS |
| movb CS(%esp),%al |
| testl $(VM_MASK | 3),%eax |
| jz restore_all # returning to kernel-space or vm86-space |
| ENTRY(resume_userspace) |
| cli # make sure we don't miss an interrupt setting need_resched |
| # or sigpending between sampling and the iret |
| movl TI_FLAGS(%ebx),%ecx |
| andl $_TIF_WORK_MASK,%ecx # is there any work to be done on int/excp return? |
| jne work_pending |
| jmp restore_all |
| |
| # system call handler stub |
| ALIGN |
| ENTRY(system_call) |
| pushl %eax # save orig_eax |
| SAVE_ALL |
| GET_THREAD_INFO(%ebx) |
| cmpl $(NR_syscalls),%eax |
| jae syscall_badsys |
| testb $_TIF_SYSCALL_TRACE,TI_FLAGS(%ebx) # system call tracing in operation |
| jnz syscall_trace_entry |
| syscall_call: |
| call *SYMBOL_NAME(sys_call_table)(,%eax,4) |
| movl %eax,EAX(%esp) # store the return value |
| syscall_exit: |
| cli # make sure we don't miss an interrupt setting need_resched |
| # or sigpending between sampling and the iret |
| movl TI_FLAGS(%ebx),%ecx |
| testw $_TIF_ALLWORK_MASK,%cx # current->work |
| jne syscall_exit_work |
| restore_all: |
| RESTORE_ALL |
| |
| # perform work that needs to be done immediately before resumption |
| ALIGN |
| work_pending: |
| testb $_TIF_NEED_RESCHED,%cl |
| jz work_notifysig |
| work_resched: |
| call SYMBOL_NAME(schedule) |
| cli # make sure we don't miss an interrupt setting need_resched |
| # or sigpending between sampling and the iret |
| movl TI_FLAGS(%ebx),%ecx |
| andl $_TIF_WORK_MASK,%ecx # is there any work to be done other than syscall tracing? |
| jz restore_all |
| testb $_TIF_NEED_RESCHED,%cl |
| jnz work_resched |
| |
| work_notifysig: # deal with pending signals and notify-resume requests |
| testl $(VM_MASK),EFLAGS(%esp) |
| movl %esp,%eax |
| jne work_notifysig_v86 # returning to kernel-space or vm86-space |
| xorl %edx,%edx |
| call SYMBOL_NAME(do_notify_resume) |
| jmp restore_all |
| |
| ALIGN |
| work_notifysig_v86: |
| pushl %ecx |
| call SYMBOL_NAME(save_v86_state) |
| popl %ecx |
| movl %eax,%esp |
| xorl %edx,%edx |
| call SYMBOL_NAME(do_notify_resume) |
| jmp restore_all |
| |
| # perform syscall exit tracing |
| ALIGN |
| syscall_trace_entry: |
| movl $-ENOSYS,EAX(%esp) |
| movl %esp,%eax |
| xorl %edx,%edx |
| call SYMBOL_NAME(do_syscall_trace) |
| movl ORIG_EAX(%esp),%eax |
| cmpl $(NR_syscalls),%eax |
| jnae syscall_call |
| jmp syscall_exit |
| |
| # perform syscall exit tracing |
| ALIGN |
| syscall_exit_work: |
| testb $_TIF_SYSCALL_TRACE,%cl |
| jz work_pending |
| sti # could let do_syscall_trace() call schedule() instead |
| movl %esp,%eax |
| movl $1,%edx |
| call SYMBOL_NAME(do_syscall_trace) |
| jmp resume_userspace |
| |
| ALIGN |
| syscall_badsys: |
| movl $-ENOSYS,EAX(%esp) |
| jmp resume_userspace |
| |
| ENTRY(divide_error) |
| pushl $0 # no error code |
| pushl $ SYMBOL_NAME(do_divide_error) |
| ALIGN |
| error_code: |
| pushl %ds |
| pushl %eax |
| xorl %eax,%eax |
| pushl %ebp |
| pushl %edi |
| pushl %esi |
| pushl %edx |
| decl %eax # eax = -1 |
| pushl %ecx |
| pushl %ebx |
| cld |
| movl %es,%ecx |
| movl ORIG_EAX(%esp), %esi # get the error code |
| movl ES(%esp), %edi # get the function address |
| movl %eax, ORIG_EAX(%esp) |
| movl %ecx, ES(%esp) |
| movl %esp,%edx |
| pushl %esi # push the error code |
| pushl %edx # push the pt_regs pointer |
| movl $(__KERNEL_DS),%edx |
| movl %edx,%ds |
| movl %edx,%es |
| GET_THREAD_INFO(%ebx) |
| call *%edi |
| addl $8,%esp |
| jmp ret_from_exception |
| |
| ENTRY(coprocessor_error) |
| pushl $0 |
| pushl $ SYMBOL_NAME(do_coprocessor_error) |
| jmp error_code |
| |
| ENTRY(simd_coprocessor_error) |
| pushl $0 |
| pushl $ SYMBOL_NAME(do_simd_coprocessor_error) |
| jmp error_code |
| |
| ENTRY(device_not_available) |
| pushl $-1 # mark this as an int |
| SAVE_ALL |
| GET_THREAD_INFO(%ebx) |
| movl %cr0,%eax |
| testl $0x4,%eax # EM (math emulation bit) |
| jne device_not_available_emulate |
| call SYMBOL_NAME(math_state_restore) |
| jmp ret_from_exception |
| device_not_available_emulate: |
| pushl $0 # temporary storage for ORIG_EIP |
| call SYMBOL_NAME(math_emulate) |
| addl $4,%esp |
| jmp ret_from_exception |
| |
| ENTRY(debug) |
| pushl $0 |
| pushl $ SYMBOL_NAME(do_debug) |
| jmp error_code |
| |
| ENTRY(nmi) |
| pushl %eax |
| SAVE_ALL |
| movl %esp,%edx |
| pushl $0 |
| pushl %edx |
| call SYMBOL_NAME(do_nmi) |
| addl $8,%esp |
| RESTORE_ALL |
| |
| ENTRY(int3) |
| pushl $0 |
| pushl $ SYMBOL_NAME(do_int3) |
| jmp error_code |
| |
| ENTRY(overflow) |
| pushl $0 |
| pushl $ SYMBOL_NAME(do_overflow) |
| jmp error_code |
| |
| ENTRY(bounds) |
| pushl $0 |
| pushl $ SYMBOL_NAME(do_bounds) |
| jmp error_code |
| |
| ENTRY(invalid_op) |
| pushl $0 |
| pushl $ SYMBOL_NAME(do_invalid_op) |
| jmp error_code |
| |
| ENTRY(coprocessor_segment_overrun) |
| pushl $0 |
| pushl $ SYMBOL_NAME(do_coprocessor_segment_overrun) |
| jmp error_code |
| |
| ENTRY(double_fault) |
| pushl $ SYMBOL_NAME(do_double_fault) |
| jmp error_code |
| |
| ENTRY(invalid_TSS) |
| pushl $ SYMBOL_NAME(do_invalid_TSS) |
| jmp error_code |
| |
| ENTRY(segment_not_present) |
| pushl $ SYMBOL_NAME(do_segment_not_present) |
| jmp error_code |
| |
| ENTRY(stack_segment) |
| pushl $ SYMBOL_NAME(do_stack_segment) |
| jmp error_code |
| |
| ENTRY(general_protection) |
| pushl $ SYMBOL_NAME(do_general_protection) |
| jmp error_code |
| |
| ENTRY(alignment_check) |
| pushl $ SYMBOL_NAME(do_alignment_check) |
| jmp error_code |
| |
| ENTRY(page_fault) |
| pushl $ SYMBOL_NAME(do_page_fault) |
| jmp error_code |
| |
| ENTRY(machine_check) |
| pushl $0 |
| pushl $ SYMBOL_NAME(do_machine_check) |
| jmp error_code |
| |
| ENTRY(spurious_interrupt_bug) |
| pushl $0 |
| pushl $ SYMBOL_NAME(do_spurious_interrupt_bug) |
| jmp error_code |
| |
| .data |
| ENTRY(sys_call_table) |
| .long SYMBOL_NAME(sys_ni_syscall) /* 0 - old "setup()" system call*/ |
| .long SYMBOL_NAME(sys_exit) |
| .long SYMBOL_NAME(sys_fork) |
| .long SYMBOL_NAME(sys_read) |
| .long SYMBOL_NAME(sys_write) |
| .long SYMBOL_NAME(sys_open) /* 5 */ |
| .long SYMBOL_NAME(sys_close) |
| .long SYMBOL_NAME(sys_waitpid) |
| .long SYMBOL_NAME(sys_creat) |
| .long SYMBOL_NAME(sys_link) |
| .long SYMBOL_NAME(sys_unlink) /* 10 */ |
| .long SYMBOL_NAME(sys_execve) |
| .long SYMBOL_NAME(sys_chdir) |
| .long SYMBOL_NAME(sys_time) |
| .long SYMBOL_NAME(sys_mknod) |
| .long SYMBOL_NAME(sys_chmod) /* 15 */ |
| .long SYMBOL_NAME(sys_lchown16) |
| .long SYMBOL_NAME(sys_ni_syscall) /* old break syscall holder */ |
| .long SYMBOL_NAME(sys_stat) |
| .long SYMBOL_NAME(sys_lseek) |
| .long SYMBOL_NAME(sys_getpid) /* 20 */ |
| .long SYMBOL_NAME(sys_mount) |
| .long SYMBOL_NAME(sys_oldumount) |
| .long SYMBOL_NAME(sys_setuid16) |
| .long SYMBOL_NAME(sys_getuid16) |
| .long SYMBOL_NAME(sys_stime) /* 25 */ |
| .long SYMBOL_NAME(sys_ptrace) |
| .long SYMBOL_NAME(sys_alarm) |
| .long SYMBOL_NAME(sys_fstat) |
| .long SYMBOL_NAME(sys_pause) |
| .long SYMBOL_NAME(sys_utime) /* 30 */ |
| .long SYMBOL_NAME(sys_ni_syscall) /* old stty syscall holder */ |
| .long SYMBOL_NAME(sys_ni_syscall) /* old gtty syscall holder */ |
| .long SYMBOL_NAME(sys_access) |
| .long SYMBOL_NAME(sys_nice) |
| .long SYMBOL_NAME(sys_ni_syscall) /* 35 */ /* old ftime syscall holder */ |
| .long SYMBOL_NAME(sys_sync) |
| .long SYMBOL_NAME(sys_kill) |
| .long SYMBOL_NAME(sys_rename) |
| .long SYMBOL_NAME(sys_mkdir) |
| .long SYMBOL_NAME(sys_rmdir) /* 40 */ |
| .long SYMBOL_NAME(sys_dup) |
| .long SYMBOL_NAME(sys_pipe) |
| .long SYMBOL_NAME(sys_times) |
| .long SYMBOL_NAME(sys_ni_syscall) /* old prof syscall holder */ |
| .long SYMBOL_NAME(sys_brk) /* 45 */ |
| .long SYMBOL_NAME(sys_setgid16) |
| .long SYMBOL_NAME(sys_getgid16) |
| .long SYMBOL_NAME(sys_signal) |
| .long SYMBOL_NAME(sys_geteuid16) |
| .long SYMBOL_NAME(sys_getegid16) /* 50 */ |
| .long SYMBOL_NAME(sys_acct) |
| .long SYMBOL_NAME(sys_umount) /* recycled never used phys() */ |
| .long SYMBOL_NAME(sys_ni_syscall) /* old lock syscall holder */ |
| .long SYMBOL_NAME(sys_ioctl) |
| .long SYMBOL_NAME(sys_fcntl) /* 55 */ |
| .long SYMBOL_NAME(sys_ni_syscall) /* old mpx syscall holder */ |
| .long SYMBOL_NAME(sys_setpgid) |
| .long SYMBOL_NAME(sys_ni_syscall) /* old ulimit syscall holder */ |
| .long SYMBOL_NAME(sys_olduname) |
| .long SYMBOL_NAME(sys_umask) /* 60 */ |
| .long SYMBOL_NAME(sys_chroot) |
| .long SYMBOL_NAME(sys_ustat) |
| .long SYMBOL_NAME(sys_dup2) |
| .long SYMBOL_NAME(sys_getppid) |
| .long SYMBOL_NAME(sys_getpgrp) /* 65 */ |
| .long SYMBOL_NAME(sys_setsid) |
| .long SYMBOL_NAME(sys_sigaction) |
| .long SYMBOL_NAME(sys_sgetmask) |
| .long SYMBOL_NAME(sys_ssetmask) |
| .long SYMBOL_NAME(sys_setreuid16) /* 70 */ |
| .long SYMBOL_NAME(sys_setregid16) |
| .long SYMBOL_NAME(sys_sigsuspend) |
| .long SYMBOL_NAME(sys_sigpending) |
| .long SYMBOL_NAME(sys_sethostname) |
| .long SYMBOL_NAME(sys_setrlimit) /* 75 */ |
| .long SYMBOL_NAME(sys_old_getrlimit) |
| .long SYMBOL_NAME(sys_getrusage) |
| .long SYMBOL_NAME(sys_gettimeofday) |
| .long SYMBOL_NAME(sys_settimeofday) |
| .long SYMBOL_NAME(sys_getgroups16) /* 80 */ |
| .long SYMBOL_NAME(sys_setgroups16) |
| .long SYMBOL_NAME(old_select) |
| .long SYMBOL_NAME(sys_symlink) |
| .long SYMBOL_NAME(sys_lstat) |
| .long SYMBOL_NAME(sys_readlink) /* 85 */ |
| .long SYMBOL_NAME(sys_uselib) |
| .long SYMBOL_NAME(sys_swapon) |
| .long SYMBOL_NAME(sys_reboot) |
| .long SYMBOL_NAME(old_readdir) |
| .long SYMBOL_NAME(old_mmap) /* 90 */ |
| .long SYMBOL_NAME(sys_munmap) |
| .long SYMBOL_NAME(sys_truncate) |
| .long SYMBOL_NAME(sys_ftruncate) |
| .long SYMBOL_NAME(sys_fchmod) |
| .long SYMBOL_NAME(sys_fchown16) /* 95 */ |
| .long SYMBOL_NAME(sys_getpriority) |
| .long SYMBOL_NAME(sys_setpriority) |
| .long SYMBOL_NAME(sys_ni_syscall) /* old profil syscall holder */ |
| .long SYMBOL_NAME(sys_statfs) |
| .long SYMBOL_NAME(sys_fstatfs) /* 100 */ |
| .long SYMBOL_NAME(sys_ioperm) |
| .long SYMBOL_NAME(sys_socketcall) |
| .long SYMBOL_NAME(sys_syslog) |
| .long SYMBOL_NAME(sys_setitimer) |
| .long SYMBOL_NAME(sys_getitimer) /* 105 */ |
| .long SYMBOL_NAME(sys_newstat) |
| .long SYMBOL_NAME(sys_newlstat) |
| .long SYMBOL_NAME(sys_newfstat) |
| .long SYMBOL_NAME(sys_uname) |
| .long SYMBOL_NAME(sys_iopl) /* 110 */ |
| .long SYMBOL_NAME(sys_vhangup) |
| .long SYMBOL_NAME(sys_ni_syscall) /* old "idle" system call */ |
| .long SYMBOL_NAME(sys_vm86old) |
| .long SYMBOL_NAME(sys_wait4) |
| .long SYMBOL_NAME(sys_swapoff) /* 115 */ |
| .long SYMBOL_NAME(sys_sysinfo) |
| .long SYMBOL_NAME(sys_ipc) |
| .long SYMBOL_NAME(sys_fsync) |
| .long SYMBOL_NAME(sys_sigreturn) |
| .long SYMBOL_NAME(sys_clone) /* 120 */ |
| .long SYMBOL_NAME(sys_setdomainname) |
| .long SYMBOL_NAME(sys_newuname) |
| .long SYMBOL_NAME(sys_modify_ldt) |
| .long SYMBOL_NAME(sys_adjtimex) |
| .long SYMBOL_NAME(sys_mprotect) /* 125 */ |
| .long SYMBOL_NAME(sys_sigprocmask) |
| .long SYMBOL_NAME(sys_create_module) |
| .long SYMBOL_NAME(sys_init_module) |
| .long SYMBOL_NAME(sys_delete_module) |
| .long SYMBOL_NAME(sys_get_kernel_syms) /* 130 */ |
| .long SYMBOL_NAME(sys_quotactl) |
| .long SYMBOL_NAME(sys_getpgid) |
| .long SYMBOL_NAME(sys_fchdir) |
| .long SYMBOL_NAME(sys_bdflush) |
| .long SYMBOL_NAME(sys_sysfs) /* 135 */ |
| .long SYMBOL_NAME(sys_personality) |
| .long SYMBOL_NAME(sys_ni_syscall) /* for afs_syscall */ |
| .long SYMBOL_NAME(sys_setfsuid16) |
| .long SYMBOL_NAME(sys_setfsgid16) |
| .long SYMBOL_NAME(sys_llseek) /* 140 */ |
| .long SYMBOL_NAME(sys_getdents) |
| .long SYMBOL_NAME(sys_select) |
| .long SYMBOL_NAME(sys_flock) |
| .long SYMBOL_NAME(sys_msync) |
| .long SYMBOL_NAME(sys_readv) /* 145 */ |
| .long SYMBOL_NAME(sys_writev) |
| .long SYMBOL_NAME(sys_getsid) |
| .long SYMBOL_NAME(sys_fdatasync) |
| .long SYMBOL_NAME(sys_sysctl) |
| .long SYMBOL_NAME(sys_mlock) /* 150 */ |
| .long SYMBOL_NAME(sys_munlock) |
| .long SYMBOL_NAME(sys_mlockall) |
| .long SYMBOL_NAME(sys_munlockall) |
| .long SYMBOL_NAME(sys_sched_setparam) |
| .long SYMBOL_NAME(sys_sched_getparam) /* 155 */ |
| .long SYMBOL_NAME(sys_sched_setscheduler) |
| .long SYMBOL_NAME(sys_sched_getscheduler) |
| .long SYMBOL_NAME(sys_sched_yield) |
| .long SYMBOL_NAME(sys_sched_get_priority_max) |
| .long SYMBOL_NAME(sys_sched_get_priority_min) /* 160 */ |
| .long SYMBOL_NAME(sys_sched_rr_get_interval) |
| .long SYMBOL_NAME(sys_nanosleep) |
| .long SYMBOL_NAME(sys_mremap) |
| .long SYMBOL_NAME(sys_setresuid16) |
| .long SYMBOL_NAME(sys_getresuid16) /* 165 */ |
| .long SYMBOL_NAME(sys_vm86) |
| .long SYMBOL_NAME(sys_query_module) |
| .long SYMBOL_NAME(sys_poll) |
| .long SYMBOL_NAME(sys_nfsservctl) |
| .long SYMBOL_NAME(sys_setresgid16) /* 170 */ |
| .long SYMBOL_NAME(sys_getresgid16) |
| .long SYMBOL_NAME(sys_prctl) |
| .long SYMBOL_NAME(sys_rt_sigreturn) |
| .long SYMBOL_NAME(sys_rt_sigaction) |
| .long SYMBOL_NAME(sys_rt_sigprocmask) /* 175 */ |
| .long SYMBOL_NAME(sys_rt_sigpending) |
| .long SYMBOL_NAME(sys_rt_sigtimedwait) |
| .long SYMBOL_NAME(sys_rt_sigqueueinfo) |
| .long SYMBOL_NAME(sys_rt_sigsuspend) |
| .long SYMBOL_NAME(sys_pread) /* 180 */ |
| .long SYMBOL_NAME(sys_pwrite) |
| .long SYMBOL_NAME(sys_chown16) |
| .long SYMBOL_NAME(sys_getcwd) |
| .long SYMBOL_NAME(sys_capget) |
| .long SYMBOL_NAME(sys_capset) /* 185 */ |
| .long SYMBOL_NAME(sys_sigaltstack) |
| .long SYMBOL_NAME(sys_sendfile) |
| .long SYMBOL_NAME(sys_ni_syscall) /* streams1 */ |
| .long SYMBOL_NAME(sys_ni_syscall) /* streams2 */ |
| .long SYMBOL_NAME(sys_vfork) /* 190 */ |
| .long SYMBOL_NAME(sys_getrlimit) |
| .long SYMBOL_NAME(sys_mmap2) |
| .long SYMBOL_NAME(sys_truncate64) |
| .long SYMBOL_NAME(sys_ftruncate64) |
| .long SYMBOL_NAME(sys_stat64) /* 195 */ |
| .long SYMBOL_NAME(sys_lstat64) |
| .long SYMBOL_NAME(sys_fstat64) |
| .long SYMBOL_NAME(sys_lchown) |
| .long SYMBOL_NAME(sys_getuid) |
| .long SYMBOL_NAME(sys_getgid) /* 200 */ |
| .long SYMBOL_NAME(sys_geteuid) |
| .long SYMBOL_NAME(sys_getegid) |
| .long SYMBOL_NAME(sys_setreuid) |
| .long SYMBOL_NAME(sys_setregid) |
| .long SYMBOL_NAME(sys_getgroups) /* 205 */ |
| .long SYMBOL_NAME(sys_setgroups) |
| .long SYMBOL_NAME(sys_fchown) |
| .long SYMBOL_NAME(sys_setresuid) |
| .long SYMBOL_NAME(sys_getresuid) |
| .long SYMBOL_NAME(sys_setresgid) /* 210 */ |
| .long SYMBOL_NAME(sys_getresgid) |
| .long SYMBOL_NAME(sys_chown) |
| .long SYMBOL_NAME(sys_setuid) |
| .long SYMBOL_NAME(sys_setgid) |
| .long SYMBOL_NAME(sys_setfsuid) /* 215 */ |
| .long SYMBOL_NAME(sys_setfsgid) |
| .long SYMBOL_NAME(sys_pivot_root) |
| .long SYMBOL_NAME(sys_mincore) |
| .long SYMBOL_NAME(sys_madvise) |
| .long SYMBOL_NAME(sys_getdents64) /* 220 */ |
| .long SYMBOL_NAME(sys_fcntl64) |
| .long SYMBOL_NAME(sys_ni_syscall) /* reserved for TUX */ |
| .long SYMBOL_NAME(sys_ni_syscall) /* Reserved for Security */ |
| .long SYMBOL_NAME(sys_gettid) |
| .long SYMBOL_NAME(sys_readahead) /* 225 */ |
| .long SYMBOL_NAME(sys_setxattr) |
| .long SYMBOL_NAME(sys_lsetxattr) |
| .long SYMBOL_NAME(sys_fsetxattr) |
| .long SYMBOL_NAME(sys_getxattr) |
| .long SYMBOL_NAME(sys_lgetxattr) /* 230 */ |
| .long SYMBOL_NAME(sys_fgetxattr) |
| .long SYMBOL_NAME(sys_listxattr) |
| .long SYMBOL_NAME(sys_llistxattr) |
| .long SYMBOL_NAME(sys_flistxattr) |
| .long SYMBOL_NAME(sys_removexattr) /* 235 */ |
| .long SYMBOL_NAME(sys_lremovexattr) |
| .long SYMBOL_NAME(sys_fremovexattr) |
| .long SYMBOL_NAME(sys_tkill) |
| |
| .rept NR_syscalls-(.-sys_call_table)/4 |
| .long SYMBOL_NAME(sys_ni_syscall) |
| .endr |