refactor: full rewrite of signal feature
[lunaix-os.git] / lunaix-os / kernel / asm / x86 / syscall.S
index 0922a96a334060046d0d4983a8b784cbd56d7af2..ac3fe80d4a75afb9a7d93e643324309f62345d58 100644 (file)
         .long __lxsys_waitpid       /* 10 */
         .long __lxsys_sigreturn
         .long __lxsys_sigprocmask
-        .long __lxsys_signal
+        .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
         2:
         .rept __SYSCALL_MAX - (2b - 1b)/4
             .long 0
 .section .text
     syscall_hndlr:
         pushl %ebp
-        movl 8(%esp), %ebp
+        movl 8(%esp), %ebp          // isr_param*
 
-        movl  (%ebp), %eax          /* eax: call code as well as the return value from syscall */
-        cmpl  $__SYSCALL_MAX, %eax
+        addl $4, %ebp
+        movl (%ebp), %eax          /* eax: call code as well as the return value from syscall */
+        cmpl $__SYSCALL_MAX, %eax
         jae 2f
 
         shll $2, %eax
         popl  %ebp
         ret
     1:
-        pushl 24(%ebp)      /* esi - #6 arg */
-        pushl 20(%ebp)      /* ebp - #5 arg */
+        pushl 24(%ebp)      /* esi - #5 arg */
         pushl 16(%ebp)      /* edi - #4 arg */
         pushl 12(%ebp)      /* edx - #3 arg */
         pushl 8(%ebp)       /* ecx - #2 arg */
         pushl 4(%ebp)       /* ebx - #1 arg */
         
-        call (%eax)
+        call *(%eax)
 
         movl %eax, (%ebp)    /* save the return value */
 
-        addl $24, %esp      /* remove the parameters from stack */
+        addl $20, %esp      /* remove the parameters from stack */
 
         popl %ebp