X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/28c176b668c841a3b7fb093faccf0efa39257603..b1644f824d7f4989a94b8a752aadee26cae25069:/lunaix-os/arch/x86/syscall32.S diff --git a/lunaix-os/arch/x86/syscall32.S b/lunaix-os/arch/x86/syscall32.S index 4f0ad5b..3fb96b4 100644 --- a/lunaix-os/arch/x86/syscall32.S +++ b/lunaix-os/arch/x86/syscall32.S @@ -1,82 +1,6 @@ #define __ASM__ #include -.section .data - /* - 注意,这里的顺序非常重要。每个系统调用在这个地址表里的索引等于其调用号。 - */ - syscall_table: - 1: - .long 0 - .long __lxsys_fork /* 1 */ - .long __lxsys_yield - .long __lxsys_sbrk - .long __lxsys_brk - .long __lxsys_getpid /* 5 */ - .long __lxsys_getppid - .long __lxsys_sleep - .long __lxsys_exit - .long __lxsys_wait - .long __lxsys_waitpid /* 10 */ - .long __lxsys_sigreturn - .long __lxsys_sigprocmask - .long __lxsys_sys_sigaction - .long __lxsys_pause - .long __lxsys_kill /* 15 */ - .long __lxsys_alarm - .long __lxsys_sigpending - .long __lxsys_sigsuspend - .long __lxsys_open - .long __lxsys_close /* 20 */ - .long __lxsys_read - .long __lxsys_write - .long __lxsys_sys_readdir - .long __lxsys_mkdir - .long __lxsys_lseek /* 25 */ - .long __lxsys_geterrno - .long __lxsys_readlink - .long __lxsys_readlinkat - .long __lxsys_rmdir - .long __lxsys_unlink /* 30 */ - .long __lxsys_unlinkat - .long __lxsys_link - .long __lxsys_fsync - .long __lxsys_dup - .long __lxsys_dup2 /* 35 */ - .long __lxsys_realpathat - .long __lxsys_symlink - .long __lxsys_chdir - .long __lxsys_fchdir - .long __lxsys_getcwd /* 40 */ - .long __lxsys_rename - .long __lxsys_mount - .long __lxsys_unmount - .long __lxsys_getxattr - .long __lxsys_setxattr /* 45 */ - .long __lxsys_fgetxattr - .long __lxsys_fsetxattr - .long __lxsys_ioctl - .long __lxsys_getpgid - .long __lxsys_setpgid /* 50 */ - .long __lxsys_syslog - .long __lxsys_sys_mmap - .long __lxsys_munmap - .long __lxsys_execve - .long __lxsys_fstat /* 55 */ - .long __lxsys_pollctl - .long __lxsys_th_create - .long __lxsys_th_self - .long __lxsys_th_exit - .long __lxsys_th_join /* 60 */ - .long __lxsys_th_kill - .long __lxsys_th_detach - .long __lxsys_th_sigmask - 2: - .rept __SYSCALL_MAX - (2b - 1b)/4 - .long 0 - .endr - - .section .text .type syscall_hndlr, @function .global syscall_hndlr @@ -91,7 +15,7 @@ jae 2f shll $2, %eax - addl $syscall_table, %eax + addl $__syscall_table, %eax cmpl $0, (%eax) jne 1f 2: @@ -107,10 +31,11 @@ pushl 12(%ebx) /* edx - #3 arg */ pushl 8(%ebx) /* ecx - #2 arg */ pushl 4(%ebx) /* ebx - #1 arg */ + pushl (%eax) - call *(%eax) + call dispatch_syscall - addl $20, %esp /* remove the parameters from stack */ + addl $24, %esp /* remove the parameters from stack */ popl %ebx movl %eax, (%ebx) /* save the return value */