diff --git a/doc/syscall.txt b/doc/syscall.txt index 6c8b52e..91417de 100644 --- a/doc/syscall.txt +++ b/doc/syscall.txt @@ -1,181 +1,180 @@ -| EAX | Name | Source | EBX | ECX | EDX | ESX | EDI | -|:----|:---------------------------|:----------------------------|:-------------------------|:-----------------------------|:------------------------|:----------------|:-----------------| -| 1 | sys_exit | kernel/exit.c | int | - | - | - | - | -| 2 | sys_fork | arch/i386/kernel/process.c | struct pt_regs | - | - | - | - | -| 3 | sys_read | fs/read_write.c | unsigned int | char * | size_t | - | - | -| 4 | sys_write | fs/read_write.c | unsigned int | const char * | size_t | - | - | -| 5 | sys_open | fs/open.c | const char * | int | int | - | - | -| 6 | sys_close | fs/open.c | unsigned int | - | - | - | - | -| 7 | sys_waitpid | kernel/exit.c | pid_t | unsigned int * | int | - | - | -| 8 | sys_creat | fs/open.c | const char * | int | - | - | - | -| 9 | sys_link | fs/namei.c | const char * | const char * | - | - | - | -| 10 | sys_unlink | fs/namei.c | const char * | - | - | - | - | -| 11 | sys_execve | arch/i386/kernel/process.c | struct pt_regs | - | - | - | - | -| 12 | sys_chdir | fs/open.c | const char * | - | - | - | - | -| 13 | sys_time | kernel/time.c | int * | - | - | - | - | -| 14 | sys_mknod | fs/namei.c | const char * | int | dev_t | - | - | -| 15 | sys_chmod | fs/open.c | const char * | mode_t | - | - | - | -| 16 | sys_lchown | fs/open.c | const char * | uid_t | gid_t | - | - | -| 18 | sys_stat | fs/stat.c | char * | struct __old_kernel_stat * | - | - | - | -| 19 | sys_lseek | fs/read_write.c | unsigned int | off_t | unsigned int | - | - | -| 20 | sys_getpid | kernel/sched.c | - | - | - | - | - | -| 21 | sys_mount | fs/super.c | char * | char * | char * | - | - | -| 22 | sys_oldumount | fs/super.c | char * | - | - | - | - | -| 23 | sys_setuid | kernel/sys.c | uid_t | - | - | - | - | -| 24 | sys_getuid | kernel/sched.c | - | - | - | - | - | -| 25 | sys_stime | kernel/time.c | int * | - | - | - | - | -| 26 | sys_ptrace | arch/i386/kernel/ptrace.c | long | long | long | long | - | -| 27 | sys_alarm | kernel/sched.c | unsigned int | - | - | - | - | -| 28 | sys_fstat | fs/stat.c | unsigned int | struct __old_kernel_stat * | - | - | - | -| 29 | sys_pause | arch/i386/kernel/sys_i386.c | - | - | - | - | - | -| 30 | sys_utime | fs/open.c | char * | struct utimbuf * | - | - | - | -| 33 | sys_access | fs/open.c | const char * | int | - | - | - | -| 34 | sys_nice | kernel/sched.c | int | - | - | - | - | -| 36 | sys_sync | fs/buffer.c | - | - | - | - | - | -| 37 | sys_kill | kernel/signal.c | int | int | - | - | - | -| 38 | sys_rename | fs/namei.c | const char * | const char * | - | - | - | -| 39 | sys_mkdir | fs/namei.c | const char * | int | - | - | - | -| 40 | sys_rmdir | fs/namei.c | const char * | - | - | - | - | -| 41 | sys_dup | fs/fcntl.c | unsigned int | - | - | - | - | -| 42 | sys_pipe | arch/i386/kernel/sys_i386.c | unsigned long * | - | - | - | - | -| 43 | sys_times | kernel/sys.c | struct tms * | - | - | - | - | -| 45 | sys_brk | mm/mmap.c | unsigned long | - | - | - | - | -| 46 | sys_setgid | kernel/sys.c | gid_t | - | - | - | - | -| 47 | sys_getgid | kernel/sched.c | - | - | - | - | - | -| 48 | sys_signal | kernel/signal.c | int | __sighandler_t | - | - | - | -| 49 | sys_geteuid | kernel/sched.c | - | - | - | - | - | -| 50 | sys_getegid | kernel/sched.c | - | - | - | - | - | -| 51 | sys_acct | kernel/acct.c | const char * | - | - | - | - | -| 52 | sys_umount | fs/super.c | char * | int | - | - | - | -| 54 | sys_ioctl | fs/ioctl.c | unsigned int | unsigned int | unsigned long | - | - | -| 55 | sys_fcntl | fs/fcntl.c | unsigned int | unsigned int | unsigned long | - | - | -| 57 | sys_setpgid | kernel/sys.c | pid_t | pid_t | - | - | - | -| 59 | sys_olduname | arch/i386/kernel/sys_i386.c | struct oldold_utsname * | - | - | - | - | -| 60 | sys_umask | kernel/sys.c | int | - | - | - | - | -| 61 | sys_chroot | fs/open.c | const char * | - | - | - | - | -| 62 | sys_ustat | fs/super.c | dev_t | struct ustat * | - | - | - | -| 63 | sys_dup2 | fs/fcntl.c | unsigned int | unsigned int | - | - | - | -| 64 | sys_getppid | kernel/sched.c | - | - | - | - | - | -| 65 | sys_getpgrp | kernel/sys.c | - | - | - | - | - | -| 66 | sys_setsid | kernel/sys.c | - | - | - | - | - | -| 67 | sys_sigaction | arch/i386/kernel/signal.c | int | const struct old_sigaction * | struct old_sigaction * | - | - | -| 68 | sys_sgetmask | kernel/signal.c | - | - | - | - | - | -| 69 | sys_ssetmask | kernel/signal.c | int | - | - | - | - | -| 70 | sys_setreuid | kernel/sys.c | uid_t | uid_t | - | - | - | -| 71 | sys_setregid | kernel/sys.c | gid_t | gid_t | - | - | - | -| 72 | sys_sigsuspend | arch/i386/kernel/signal.c | int | int | old_sigset_t | - | - | -| 73 | sys_sigpending | kernel/signal.c | old_sigset_t * | - | - | - | - | -| 74 | sys_sethostname | kernel/sys.c | char * | int | - | - | - | -| 75 | sys_setrlimit | kernel/sys.c | unsigned int | struct rlimit * | - | - | - | -| 76 | sys_getrlimit | kernel/sys.c | unsigned int | struct rlimit * | - | - | - | -| 77 | sys_getrusage | kernel/sys.c | int | struct rusage * | - | - | - | -| 78 | sys_gettimeofday | kernel/time.c | struct timeval * | struct timezone * | - | - | - | -| 79 | sys_settimeofday | kernel/time.c | struct timeval * | struct timezone * | - | - | - | -| 80 | sys_getgroups | kernel/sys.c | int | gid_t * | - | - | - | -| 81 | sys_setgroups | kernel/sys.c | int | gid_t * | - | - | - | - -| 83 | sys_symlink | fs/namei.c | const char * | const char * | - | - | - | -| 84 | sys_lstat | fs/stat.c | char * | struct __old_kernel_stat * | - | - | - | -| 85 | sys_readlink | fs/stat.c | const char * | char * | int | - | - | -| 86 | sys_uselib | fs/exec.c | const char * | - | - | - | - | -| 87 | sys_swapon | mm/swapfile.c | const char * | int | - | - | - | -| 88 | sys_reboot | kernel/sys.c | int | int | int | void * | - | -| 89 | old_readdir | fs/readdir.c | unsigned int | void * | unsigned int | - | - | -| 90 | old_mmap | arch/i386/kernel/sys_i386.c | struct mmap_arg_struct * | - | - | - | - | -| 91 | sys_munmap | mm/mmap.c | unsigned long | size_t | - | - | - | -| 92 | sys_truncate | fs/open.c | const char * | unsigned long | - | - | - | -| 93 | sys_ftruncate | fs/open.c | unsigned int | unsigned long | - | - | - | -| 94 | sys_fchmod | fs/open.c | unsigned int | mode_t | - | - | - | -| 95 | sys_fchown | fs/open.c | unsigned int | uid_t | gid_t | - | - | -| 96 | sys_getpriority | kernel/sys.c | int | int | - | - | - | -| 97 | sys_setpriority | kernel/sys.c | int | int | int | - | - | -| 99 | sys_statfs | fs/open.c | const char * | struct statfs * | - | - | - | -| 100 | sys_fstatfs | fs/open.c | unsigned int | struct statfs * | - | - | - | -| 101 | sys_ioperm | arch/i386/kernel/ioport.c | unsigned long | unsigned long | int | - | - | -| 102 | sys_socketcall | net/socket.c | int | unsigned long * | - | - | - | -| 103 | sys_syslog | kernel/printk.c | int | char * | int | - | - | -| 104 | sys_setitimer | kernel/itimer.c | int | struct itimerval * | struct itimerval * | - | - | -| 105 | sys_getitimer | kernel/itimer.c | int | struct itimerval * | - | - | - | -| 106 | sys_newstat | fs/stat.c | char * | struct stat * | - | - | - | -| 107 | sys_newlstat | fs/stat.c | char * | struct stat * | - | - | - | -| 108 | sys_newfstat | fs/stat.c | unsigned int | struct stat * | - | - | - | -| 109 | sys_uname | arch/i386/kernel/sys_i386.c | struct old_utsname * | - | - | - | - | -| 110 | sys_iopl | arch/i386/kernel/ioport.c | unsigned long | - | - | - | - | -| 111 | sys_vhangup | fs/open.c | - | - | - | - | - | -| 112 | sys_idle | arch/i386/kernel/process.c | - | - | - | - | - | -| 113 | sys_vm86old | arch/i386/kernel/vm86.c | unsigned long | struct vm86plus_struct * | - | - | - | -| 114 | sys_wait4 | kernel/exit.c | pid_t | unsigned long * | int options | struct rusage * | - | -| 115 | sys_swapoff | mm/swapfile.c | const char * | - | - | - | - | -| 116 | sys_sysinfo | kernel/info.c | struct sysinfo * | - | - | - | - | -| 117 | sys_ipc(*Note) | arch/i386/kernel/sys_i386.c | uint | int | int | int | void * | -| 118 | sys_fsync | fs/buffer.c | unsigned int | - | - | - | - | -| 119 | sys_sigreturn | arch/i386/kernel/signal.c | unsigned long | - | - | - | - | -| 120 | sys_clone | arch/i386/kernel/process.c | struct pt_regs | - | - | - | - | -| 121 | sys_setdomainname | kernel/sys.c | char * | int | - | - | - | -| 122 | sys_newuname | kernel/sys.c | struct new_utsname * | - | - | - | - | -| 123 | sys_modify_ldt | arch/i386/kernel/ldt.c | int | void * | unsigned long | - | - | -| 124 | sys_adjtimex | kernel/time.c | struct timex * | - | - | - | - | -| 125 | sys_mprotect | mm/mprotect.c | unsigned long | size_t | unsigned long | - | - | -| 126 | sys_sigprocmask | kernel/signal.c | int | old_sigset_t * | old_sigset_t * | - | - | -| 127 | sys_create_module | kernel/module.c | const char * | size_t | - | - | - | -| 128 | sys_init_module | kernel/module.c | const char * | struct module * | - | - | - | -| 129 | sys_delete_module | kernel/module.c | const char * | - | - | - | - | -| 130 | sys_get_kernel_syms | kernel/module.c | struct kernel_sym * | - | - | - | - | -| 131 | sys_quotactl | fs/dquot.c | int | const char * | int | caddr_t | - | -| 132 | sys_getpgid | kernel/sys.c | pid_t | - | - | - | - | -| 133 | sys_fchdir | fs/open.c | unsigned int | - | - | - | - | -| 134 | sys_bdflush | fs/buffer.c | int | long | - | - | - | -| 135 | sys_sysfs | fs/super.c | int | unsigned long | unsigned long | - | - | -| 136 | sys_personality | kernel/exec_domain.c | unsigned long | - | - | - | - | -| 138 | sys_setfsuid | kernel/sys.c | uid_t | - | - | - | - | -| 139 | sys_setfsgid | kernel/sys.c | gid_t | - | - | - | - | -| 140 | sys_llseek | fs/read_write.c | unsigned int | unsigned long | unsigned long | loff_t * | unsigned int | -| 141 | sys_getdents | fs/readdir.c | unsigned int | void * | unsigned int | - | - | -| 142 | sys_select | fs/select.c | int | fd_set * | fd_set * | fd_set * | struct timeval * | -| 143 | sys_flock | fs/locks.c | unsigned int | unsigned int | - | - | - | -| 144 | sys_msync | mm/filemap.c | unsigned long | size_t | int | - | - | -| 145 | sys_readv | fs/read_write.c | unsigned long | const struct iovec * | unsigned long | - | - | -| 146 | sys_writev | fs/read_write.c | unsigned long | const struct iovec * | unsigned long | - | - | -| 147 | sys_getsid | kernel/sys.c | pid_t | - | - | - | - | -| 148 | sys_fdatasync | fs/buffer.c | unsigned int | - | - | - | - | -| 149 | sys_sysctl | kernel/sysctl.c | struct __sysctl_args * | - | - | - | - | -| 150 | sys_mlock | mm/mlock.c | unsigned long | size_t | - | - | - | -| 151 | sys_munlock | mm/mlock.c | unsigned long | size_t | - | - | - | -| 152 | sys_mlockall | mm/mlock.c | int | - | - | - | - | -| 153 | sys_munlockall | mm/mlock.c | - | - | - | - | - | -| 154 | sys_sched_setparam | kernel/sched.c | pid_t | struct sched_param * | - | - | - | -| 155 | sys_sched_getparam | kernel/sched.c | pid_t | struct sched_param * | - | - | - | -| 156 | sys_sched_setscheduler | kernel/sched.c | pid_t | int | struct sched_param * | - | - | -| 157 | sys_sched_getscheduler | kernel/sched.c | pid_t | - | - | - | - | -| 158 | sys_sched_yield | kernel/sched.c | - | - | - | - | - | -| 159 | sys_sched_get_priority_max | kernel/sched.c | int | - | - | - | - | -| 160 | sys_sched_get_priority_min | kernel/sched.c | int | - | - | - | - | -| 161 | sys_sched_rr_get_interval | kernel/sched.c | pid_t | struct timespec * | - | - | - | -| 162 | sys_nanosleep | kernel/sched.c | struct timespec * | struct timespec * | - | - | - | -| 163 | sys_mremap | mm/mremap.c | unsigned long | unsigned long | unsigned long | unsigned long | - | -| 164 | sys_setresuid | kernel/sys.c | uid_t | uid_t | uid_t | - | - | -| 165 | sys_getresuid | kernel/sys.c | uid_t * | uid_t * | uid_t * | - | - | -| 166 | sys_vm86 | arch/i386/kernel/vm86.c | struct vm86_struct * | - | - | - | - | -| 167 | sys_query_module | kernel/module.c | const char * | int | char * | size_t | size_t * | -| 168 | sys_poll | fs/select.c | struct pollfd * | unsigned int | long | - | - | -| 169 | sys_nfsservctl | fs/filesystems.c | int | void * | void * | - | - | -| 170 | sys_setresgid | kernel/sys.c | gid_t | gid_t | gid_t | - | - | -| 171 | sys_getresgid | kernel/sys.c | gid_t * | gid_t * | gid_t * | - | - | -| 172 | sys_prctl | kernel/sys.c | int | unsigned long | unsigned long | unsigned long | unsigned long | -| 173 | sys_rt_sigreturn | arch/i386/kernel/signal.c | unsigned long | - | - | - | - | -| 174 | sys_rt_sigaction | kernel/signal.c | int | const struct sigaction * | struct sigaction * | size_t | - | -| 175 | sys_rt_sigprocmask | kernel/signal.c | int | sigset_t * | sigset_t * | size_t | - | -| 176 | sys_rt_sigpending | kernel/signal.c | sigset_t * | size_t | - | - | - | -| 177 | sys_rt_sigtimedwait | kernel/signal.c | const sigset_t * | siginfo_t * | const struct timespec * | size_t | - | -| 178 | sys_rt_sigqueueinfo | kernel/signal.c | int | int | siginfo_t * | - | - | -| 179 | sys_rt_sigsuspend | arch/i386/kernel/signal.c | sigset_t * | size_t | - | - | - | -| 180 | sys_pread | fs/read_write.c | unsigned int | char * | size_t | loff_t | - | -| 181 | sys_pwrite | fs/read_write.c | unsigned int | const char * | size_t | loff_t | - | -| 182 | sys_chown | fs/open.c | const char * | uid_t | gid_t | - | - | -| 183 | sys_getcwd | fs/dcache.c | char * | unsigned long | - | - | - | -| 184 | sys_capget | kernel/capability.c | cap_user_header_t | cap_user_data_t | - | - | - | -| 185 | sys_capset | kernel/capability.c | cap_user_header_t | const cap_user_data_t | - | - | - | -| 186 | sys_sigaltstack | arch/i386/kernel/signal.c | const stack_t * | stack_t * | - | - | - | -| 187 | sys_sendfile | mm/filemap.c | int | int | off_t * | size_t | - | -| 190 | sys_vfork | arch/i386/kernel/process.c | struct pt_regs | - | - | - | - | -| | | | | | | | | \ No newline at end of file +| S | EAX | Name | Source | EBX | ECX | EDX | ESX | EDI | +|:--|:----|:---------------------------|:----------------------------|:-------------------------|:-----------------------------|:------------------------|:----------------|:-----------------| +| 1 | 1 | sys_exit | kernel/exit.c | int | - | - | - | - | +| | 2 | sys_fork | arch/i386/kernel/process.c | struct pt_regs | - | - | - | - | +| 1 | 3 | sys_read | fs/read_write.c | unsigned int | char * | size_t | - | - | +| 1 | 4 | sys_write | fs/read_write.c | unsigned int | const char * | size_t | - | - | +| 1 | 5 | sys_open | fs/open.c | const char * | int | int | - | - | +| 1 | 6 | sys_close | fs/open.c | int | - | - | - | - | +| 1 | 7 | sys_waitpid | kernel/exit.c | pid_t | unsigned int * | int | - | - | +| | 8 | sys_creat | fs/open.c | const char * | int | - | - | - | +| | 9 | sys_link | fs/namei.c | const char * | const char * | - | - | - | +| | 10 | sys_unlink | fs/namei.c | const char * | - | - | - | - | +| 1 | 11 | sys_execve | arch/i386/kernel/process.c | struct pt_regs | - | - | - | - | +| 1 | 12 | sys_chdir | fs/open.c | const char * | - | - | - | - | +| | 13 | sys_time | kernel/time.c | int * | - | - | - | - | +| | 14 | sys_mknod | fs/namei.c | const char * | int | dev_t | - | - | +| | 15 | sys_chmod | fs/open.c | const char * | mode_t | - | - | - | +| | 16 | sys_lchown | fs/open.c | const char * | uid_t | gid_t | - | - | +| | 18 | sys_stat | fs/stat.c | char * | struct __old_kernel_stat * | - | - | - | +| | 19 | sys_lseek | fs/read_write.c | unsigned int | off_t | unsigned int | - | - | +| 1 | 20 | sys_getpid | kernel/sched.c | - | - | - | - | - | +| | 21 | sys_mount | fs/super.c | char * | char * | char * | - | - | +| | 22 | sys_oldumount | fs/super.c | char * | - | - | - | - | +| | 23 | sys_setuid | kernel/sys.c | uid_t | - | - | - | - | +| | 24 | sys_getuid | kernel/sched.c | - | - | - | - | - | +| | 25 | sys_stime | kernel/time.c | int * | - | - | - | - | +| | 26 | sys_ptrace | arch/i386/kernel/ptrace.c | long | long | long | long | - | +| | 27 | sys_alarm | kernel/sched.c | unsigned int | - | - | - | - | +| | 28 | sys_fstat | fs/stat.c | unsigned int | struct __old_kernel_stat * | - | - | - | +| | 29 | sys_pause | arch/i386/kernel/sys_i386.c | - | - | - | - | - | +| | 30 | sys_utime | fs/open.c | char * | struct utimbuf * | - | - | - | +| | 33 | sys_access | fs/open.c | const char * | int | - | - | - | +| 1 | 34 | sys_nice | kernel/sched.c | int | - | - | - | - | +| | 36 | sys_sync | fs/buffer.c | - | - | - | - | - | +| | 37 | sys_kill | kernel/signal.c | int | int | - | - | - | +| | 38 | sys_rename | fs/namei.c | const char * | const char * | - | - | - | +| | 39 | sys_mkdir | fs/namei.c | const char * | int | - | - | - | +| | 40 | sys_rmdir | fs/namei.c | const char * | - | - | - | - | +| | 41 | sys_dup | fs/fcntl.c | unsigned int | - | - | - | - | +| | 42 | sys_pipe | arch/i386/kernel/sys_i386.c | unsigned long * | - | - | - | - | +| | 43 | sys_times | kernel/sys.c | struct tms * | - | - | - | - | +| | 45 | sys_brk | mm/mmap.c | unsigned long | - | - | - | - | +| | 46 | sys_setgid | kernel/sys.c | gid_t | - | - | - | - | +| | 47 | sys_getgid | kernel/sched.c | - | - | - | - | - | +| | 48 | sys_signal | kernel/signal.c | int | __sighandler_t | - | - | - | +| | 49 | sys_geteuid | kernel/sched.c | - | - | - | - | - | +| | 50 | sys_getegid | kernel/sched.c | - | - | - | - | - | +| | 51 | sys_acct | kernel/acct.c | const char * | - | - | - | - | +| | 52 | sys_umount | fs/super.c | char * | int | - | - | - | +| | 54 | sys_ioctl | fs/ioctl.c | unsigned int | unsigned int | unsigned long | - | - | +| | 55 | sys_fcntl | fs/fcntl.c | unsigned int | unsigned int | unsigned long | - | - | +| | 57 | sys_setpgid | kernel/sys.c | pid_t | pid_t | - | - | - | +| | 59 | sys_olduname | arch/i386/kernel/sys_i386.c | struct oldold_utsname * | - | - | - | - | +| | 60 | sys_umask | kernel/sys.c | int | - | - | - | - | +| | 61 | sys_chroot | fs/open.c | const char * | - | - | - | - | +| | 62 | sys_ustat | fs/super.c | dev_t | struct ustat * | - | - | - | +| | 63 | sys_dup2 | fs/fcntl.c | unsigned int | unsigned int | - | - | - | +| | 64 | sys_getppid | kernel/sched.c | - | - | - | - | - | +| | 65 | sys_getpgrp | kernel/sys.c | - | - | - | - | - | +| | 66 | sys_setsid | kernel/sys.c | - | - | - | - | - | +| | 67 | sys_sigaction | arch/i386/kernel/signal.c | int | const struct old_sigaction * | struct old_sigaction * | - | - | +| | 68 | sys_sgetmask | kernel/signal.c | - | - | - | - | - | +| | 69 | sys_ssetmask | kernel/signal.c | int | - | - | - | - | +| | 70 | sys_setreuid | kernel/sys.c | uid_t | uid_t | - | - | - | +| | 71 | sys_setregid | kernel/sys.c | gid_t | gid_t | - | - | - | +| | 72 | sys_sigsuspend | arch/i386/kernel/signal.c | int | int | old_sigset_t | - | - | +| | 73 | sys_sigpending | kernel/signal.c | old_sigset_t * | - | - | - | - | +| | 74 | sys_sethostname | kernel/sys.c | char * | int | - | - | - | +| | 75 | sys_setrlimit | kernel/sys.c | unsigned int | struct rlimit * | - | - | - | +| | 76 | sys_getrlimit | kernel/sys.c | unsigned int | struct rlimit * | - | - | - | +| | 77 | sys_getrusage | kernel/sys.c | int | struct rusage * | - | - | - | +| | 78 | sys_gettimeofday | kernel/time.c | struct timeval * | struct timezone * | - | - | - | +| | 79 | sys_settimeofday | kernel/time.c | struct timeval * | struct timezone * | - | - | - | +| | 80 | sys_getgroups | kernel/sys.c | int | gid_t * | - | - | - | +| | 81 | sys_setgroups | kernel/sys.c | int | gid_t * | - | - | - | +| | 83 | sys_symlink | fs/namei.c | const char * | const char * | - | - | - | +| | 84 | sys_lstat | fs/stat.c | char * | struct __old_kernel_stat * | - | - | - | +| | 85 | sys_readlink | fs/stat.c | const char * | char * | int | - | - | +| | 86 | sys_uselib | fs/exec.c | const char * | - | - | - | - | +| | 87 | sys_swapon | mm/swapfile.c | const char * | int | - | - | - | +| 1 | 88 | sys_reboot | kernel/sys.c | int | int | int | void * | - | +| | 89 | old_readdir | fs/readdir.c | unsigned int | void * | unsigned int | - | - | +| | 90 | old_mmap | arch/i386/kernel/sys_i386.c | struct mmap_arg_struct * | - | - | - | - | +| | 91 | sys_munmap | mm/mmap.c | unsigned long | size_t | - | - | - | +| | 92 | sys_truncate | fs/open.c | const char * | unsigned long | - | - | - | +| | 93 | sys_ftruncate | fs/open.c | unsigned int | unsigned long | - | - | - | +| | 94 | sys_fchmod | fs/open.c | unsigned int | mode_t | - | - | - | +| | 95 | sys_fchown | fs/open.c | unsigned int | uid_t | gid_t | - | - | +| | 96 | sys_getpriority | kernel/sys.c | int | int | - | - | - | +| | 97 | sys_setpriority | kernel/sys.c | int | int | int | - | - | +| | 99 | sys_statfs | fs/open.c | const char * | struct statfs * | - | - | - | +| | 100 | sys_fstatfs | fs/open.c | unsigned int | struct statfs * | - | - | - | +| | 101 | sys_ioperm | arch/i386/kernel/ioport.c | unsigned long | unsigned long | int | - | - | +| | 102 | sys_socketcall | net/socket.c | int | unsigned long * | - | - | - | +| | 103 | sys_syslog | kernel/printk.c | int | char * | int | - | - | +| | 104 | sys_setitimer | kernel/itimer.c | int | struct itimerval * | struct itimerval * | - | - | +| | 105 | sys_getitimer | kernel/itimer.c | int | struct itimerval * | - | - | - | +| | 106 | sys_newstat | fs/stat.c | char * | struct stat * | - | - | - | +| | 107 | sys_newlstat | fs/stat.c | char * | struct stat * | - | - | - | +| | 108 | sys_newfstat | fs/stat.c | unsigned int | struct stat * | - | - | - | +| | 109 | sys_uname | arch/i386/kernel/sys_i386.c | struct old_utsname * | - | - | - | - | +| | 110 | sys_iopl | arch/i386/kernel/ioport.c | unsigned long | - | - | - | - | +| | 111 | sys_vhangup | fs/open.c | - | - | - | - | - | +| | 112 | sys_idle | arch/i386/kernel/process.c | - | - | - | - | - | +| | 113 | sys_vm86old | arch/i386/kernel/vm86.c | unsigned long | struct vm86plus_struct * | - | - | - | +| | 114 | sys_wait4 | kernel/exit.c | pid_t | unsigned long * | int options | struct rusage * | - | +| | 115 | sys_swapoff | mm/swapfile.c | const char * | - | - | - | - | +| | 116 | sys_sysinfo | kernel/info.c | struct sysinfo * | - | - | - | - | +| | 117 | sys_ipc(*Note) | arch/i386/kernel/sys_i386.c | uint | int | int | int | void * | +| | 118 | sys_fsync | fs/buffer.c | unsigned int | - | - | - | - | +| | 119 | sys_sigreturn | arch/i386/kernel/signal.c | unsigned long | - | - | - | - | +| | 120 | sys_clone | arch/i386/kernel/process.c | struct pt_regs | - | - | - | - | +| | 121 | sys_setdomainname | kernel/sys.c | char * | int | - | - | - | +| | 122 | sys_newuname | kernel/sys.c | struct new_utsname * | - | - | - | - | +| | 123 | sys_modify_ldt | arch/i386/kernel/ldt.c | int | void * | unsigned long | - | - | +| | 124 | sys_adjtimex | kernel/time.c | struct timex * | - | - | - | - | +| | 125 | sys_mprotect | mm/mprotect.c | unsigned long | size_t | unsigned long | - | - | +| | 126 | sys_sigprocmask | kernel/signal.c | int | old_sigset_t * | old_sigset_t * | - | - | +| | 127 | sys_create_module | kernel/module.c | const char * | size_t | - | - | - | +| | 128 | sys_init_module | kernel/module.c | const char * | struct module * | - | - | - | +| | 129 | sys_delete_module | kernel/module.c | const char * | - | - | - | - | +| | 130 | sys_get_kernel_syms | kernel/module.c | struct kernel_sym * | - | - | - | - | +| | 131 | sys_quotactl | fs/dquot.c | int | const char * | int | caddr_t | - | +| | 132 | sys_getpgid | kernel/sys.c | pid_t | - | - | - | - | +| | 133 | sys_fchdir | fs/open.c | unsigned int | - | - | - | - | +| | 134 | sys_bdflush | fs/buffer.c | int | long | - | - | - | +| | 135 | sys_sysfs | fs/super.c | int | unsigned long | unsigned long | - | - | +| | 136 | sys_personality | kernel/exec_domain.c | unsigned long | - | - | - | - | +| | 138 | sys_setfsuid | kernel/sys.c | uid_t | - | - | - | - | +| | 139 | sys_setfsgid | kernel/sys.c | gid_t | - | - | - | - | +| | 140 | sys_llseek | fs/read_write.c | unsigned int | unsigned long | unsigned long | loff_t * | unsigned int | +| | 141 | sys_getdents | fs/readdir.c | unsigned int | void * | unsigned int | - | - | +| | 142 | sys_select | fs/select.c | int | fd_set * | fd_set * | fd_set * | struct timeval * | +| | 143 | sys_flock | fs/locks.c | unsigned int | unsigned int | - | - | - | +| | 144 | sys_msync | mm/filemap.c | unsigned long | size_t | int | - | - | +| | 145 | sys_readv | fs/read_write.c | unsigned long | const struct iovec * | unsigned long | - | - | +| | 146 | sys_writev | fs/read_write.c | unsigned long | const struct iovec * | unsigned long | - | - | +| | 147 | sys_getsid | kernel/sys.c | pid_t | - | - | - | - | +| | 148 | sys_fdatasync | fs/buffer.c | unsigned int | - | - | - | - | +| | 149 | sys_sysctl | kernel/sysctl.c | struct __sysctl_args * | - | - | - | - | +| | 150 | sys_mlock | mm/mlock.c | unsigned long | size_t | - | - | - | +| | 151 | sys_munlock | mm/mlock.c | unsigned long | size_t | - | - | - | +| | 152 | sys_mlockall | mm/mlock.c | int | - | - | - | - | +| | 153 | sys_munlockall | mm/mlock.c | - | - | - | - | - | +| | 154 | sys_sched_setparam | kernel/sched.c | pid_t | struct sched_param * | - | - | - | +| | 155 | sys_sched_getparam | kernel/sched.c | pid_t | struct sched_param * | - | - | - | +| | 156 | sys_sched_setscheduler | kernel/sched.c | pid_t | int | struct sched_param * | - | - | +| | 157 | sys_sched_getscheduler | kernel/sched.c | pid_t | - | - | - | - | +| | 158 | sys_sched_yield | kernel/sched.c | - | - | - | - | - | +| | 159 | sys_sched_get_priority_max | kernel/sched.c | int | - | - | - | - | +| | 160 | sys_sched_get_priority_min | kernel/sched.c | int | - | - | - | - | +| | 161 | sys_sched_rr_get_interval | kernel/sched.c | pid_t | struct timespec * | - | - | - | +| | 162 | sys_nanosleep | kernel/sched.c | struct timespec * | struct timespec * | - | - | - | +| | 163 | sys_mremap | mm/mremap.c | unsigned long | unsigned long | unsigned long | unsigned long | - | +| | 164 | sys_setresuid | kernel/sys.c | uid_t | uid_t | uid_t | - | - | +| | 165 | sys_getresuid | kernel/sys.c | uid_t * | uid_t * | uid_t * | - | - | +| | 166 | sys_vm86 | arch/i386/kernel/vm86.c | struct vm86_struct * | - | - | - | - | +| | 167 | sys_query_module | kernel/module.c | const char * | int | char * | size_t | size_t * | +| | 168 | sys_poll | fs/select.c | struct pollfd * | unsigned int | long | - | - | +| | 169 | sys_nfsservctl | fs/filesystems.c | int | void * | void * | - | - | +| | 170 | sys_setresgid | kernel/sys.c | gid_t | gid_t | gid_t | - | - | +| | 171 | sys_getresgid | kernel/sys.c | gid_t * | gid_t * | gid_t * | - | - | +| | 172 | sys_prctl | kernel/sys.c | int | unsigned long | unsigned long | unsigned long | unsigned long | +| | 173 | sys_rt_sigreturn | arch/i386/kernel/signal.c | unsigned long | - | - | - | - | +| | 174 | sys_rt_sigaction | kernel/signal.c | int | const struct sigaction * | struct sigaction * | size_t | - | +| | 175 | sys_rt_sigprocmask | kernel/signal.c | int | sigset_t * | sigset_t * | size_t | - | +| | 176 | sys_rt_sigpending | kernel/signal.c | sigset_t * | size_t | - | - | - | +| | 177 | sys_rt_sigtimedwait | kernel/signal.c | const sigset_t * | siginfo_t * | const struct timespec * | size_t | - | +| | 178 | sys_rt_sigqueueinfo | kernel/signal.c | int | int | siginfo_t * | - | - | +| | 179 | sys_rt_sigsuspend | arch/i386/kernel/signal.c | sigset_t * | size_t | - | - | - | +| | 180 | sys_pread | fs/read_write.c | unsigned int | char * | size_t | loff_t | - | +| | 181 | sys_pwrite | fs/read_write.c | unsigned int | const char * | size_t | loff_t | - | +| | 182 | sys_chown | fs/open.c | const char * | uid_t | gid_t | - | - | +| 1 | 183 | sys_getcwd | fs/dcache.c | char * | unsigned long | - | - | - | +| | 184 | sys_capget | kernel/capability.c | cap_user_header_t | cap_user_data_t | - | - | - | +| | 185 | sys_capset | kernel/capability.c | cap_user_header_t | const cap_user_data_t | - | - | - | +| | 186 | sys_sigaltstack | arch/i386/kernel/signal.c | const stack_t * | stack_t * | - | - | - | +| | 187 | sys_sendfile | mm/filemap.c | int | int | off_t * | size_t | - | +| 1 | 190 | sys_vfork | arch/i386/kernel/process.c | struct pt_regs | - | - | - | - | +| | | | | | | | | | \ No newline at end of file diff --git a/mentos/CMakeLists.txt b/mentos/CMakeLists.txt index 0ca358e..bd1a51b 100644 --- a/mentos/CMakeLists.txt +++ b/mentos/CMakeLists.txt @@ -192,6 +192,7 @@ set(SOURCE_FILES src/fs/initrd.c src/fs/vfs.c src/fs/read_write.c + src/fs/open.c src/sys/module.c src/sys/unistd.c @@ -237,6 +238,7 @@ set(SOURCE_FILES src/libc/unistd/waitpid.c src/libc/unistd/chdir.c src/libc/unistd/getcwd.c + src/libc/unistd/close.c src/mem/kheap.c src/mem/paging.c diff --git a/mentos/inc/fs/fcntl.h b/mentos/inc/fs/fcntl.h index 15f9324..7c8a835 100644 --- a/mentos/inc/fs/fcntl.h +++ b/mentos/inc/fs/fcntl.h @@ -10,31 +10,15 @@ /// Open for reading only. #define O_RDONLY 0x00 - /// Open for writing only. #define O_WRONLY 0x01 - /// Open for reading and writing. #define O_RDWR 0x02 - /// If the file exists, this flag has no effect. Otherwise, the file is created. #define O_CREAT 0x40 - /// The file offset will be set to the end of the file prior to each write. #define O_APPEND 0x400 -/// @brief Given a pathname for a file, open() returns a file -/// descriptor, a small, nonnegative integer for use in -/// subsequent system calls. -/// @param pathname A pathname for a file. -/// @param flags Used to set the file status flags and file access modes -/// of the open file description. -/// @param mode Specifies the file mode bits be applied when a new file -/// is created. -/// @return Returns a file descriptor, a small, nonnegative integer -/// for use in subsequent system calls. -int sys_open(const char *pathname, int flags, mode_t mode); - /// @brief Deletes the file whose name is specified in filename. /// @param pathname A path to a file. /// @return On success, zero is returned. On error, -1 is returned, diff --git a/mentos/inc/fs/open.h b/mentos/inc/fs/open.h new file mode 100644 index 0000000..2b19bc2 --- /dev/null +++ b/mentos/inc/fs/open.h @@ -0,0 +1,25 @@ +/// MentOS, The Mentoring Operating system project +/// @file open.h +/// @brief +/// @copyright (c) 2019 This file is distributed under the MIT License. +/// See LICENSE.md for details. + +#include "stddef.h" +#include "vfs.h" + +/// @brief Given a pathname for a file, open() returns a file +/// descriptor, a small, nonnegative integer for use in +/// subsequent system calls. +/// @param pathname A pathname for a file. +/// @param flags Used to set the file status flags and file access modes +/// of the open file description. +/// @param mode Specifies the file mode bits be applied when a new file +/// is created. +/// @return Returns a file descriptor, a small, nonnegative integer +/// for use in subsequent system calls. +int sys_open(const char *pathname, int flags, mode_t mode); + +/// @brief +/// @param fd +/// @return +int sys_close(int fd); \ No newline at end of file diff --git a/mentos/inc/fs/vfs_types.h b/mentos/inc/fs/vfs_types.h index ef8ef9a..db8cf0d 100644 --- a/mentos/inc/fs/vfs_types.h +++ b/mentos/inc/fs/vfs_types.h @@ -12,22 +12,16 @@ /// Identifies a file. #define FS_FILE 0x01 - /// Identifies a directory. #define FS_DIRECTORY 0x02 - /// Identifies a character devies. #define FS_CHARDEVICE 0x04 - /// Identifies a block devies. #define FS_BLOCKDEVICE 0x08 - /// Identifies a pipe. #define FS_PIPE 0x10 - /// Identifies a symbolic link. #define FS_SYMLINK 0x20 - /// Identifies a mount-point. #define FS_MOUNTPOINT 0x40 diff --git a/mentos/inc/sys/unistd.h b/mentos/inc/sys/unistd.h index 9b3dc3a..d49cce1 100644 --- a/mentos/inc/sys/unistd.h +++ b/mentos/inc/sys/unistd.h @@ -47,10 +47,10 @@ ssize_t write(int fd, void *buf, size_t nbytes); /// use in subsequent system calls. int open(const char *pathname, int flags, mode_t mode); -/// @brief Close a file descriptor. -/// @param fildes The file descriptor. -/// @return The result of the operation. -int close(int fildes); +/// @brief Close a file descriptor. +/// @param fd The file descriptor. +/// @return The result of the operation. +int close(int fd); /// @brief Removes the given directory. /// @param path The path to the directory to remove. diff --git a/mentos/src/fs/fcntl.c b/mentos/src/fs/fcntl.c index a06e84f..6a8be48 100644 --- a/mentos/src/fs/fcntl.c +++ b/mentos/src/fs/fcntl.c @@ -4,109 +4,26 @@ /// @copyright (c) 2019 This file is distributed under the MIT License. /// See LICENSE.md for details. -#include "vfs.h" -#include "debug.h" -#include "kheap.h" -#include "shell.h" -#include "errno.h" #include "fcntl.h" #include "string.h" -#include "kernel.h" - -int sys_open(const char *pathname, int flags, mode_t mode) -{ - // Allocate a variable for the path. - char absolute_path[MAX_PATH_LENGTH]; - - // Copy the path to the working variable. - strcpy(absolute_path, pathname); - - // If the first character is not the '/' then get the absolute path. - if (absolute_path[0] != '/') - { - if (!get_absolute_path(absolute_path)) - { - dbg_print("Cannot get the absolute path.\n"); - return -1; - } - } - - // Search for an unused fd. - for (current_fd = 0; current_fd < MAX_OPEN_FD; ++current_fd) - { - if (fd_list[current_fd].mountpoint_id == -1) - { - break; - } - } - - // Check if there is not fd available. - if (current_fd == MAX_OPEN_FD) - { - //errno = EMFILE; - return -1; - } - - // Get the mountpoint. - mountpoint_t *mp = get_mountpoint(absolute_path); - if (mp == NULL) - { - //errno = ENODEV; - return -1; - } - - // Check if the function is implemented. - if (mp->operations.open_f == NULL) - { - //errno = ENOSYS; - // Reset the file descriptor. - close(current_fd); - return -1; - } - - int32_t fs_spec_id = mp->operations.open_f(absolute_path, flags, mode); - if (fs_spec_id == -1) - { - // Reset the file descriptor. - close(current_fd); - return -1; - } - - // Set the file descriptor id. - fd_list[current_fd].fs_spec_id = fs_spec_id; - - // Set the mount point id. - fd_list[current_fd].mountpoint_id = mp->mp_id; - - // Reset the offset. - fd_list[current_fd].offset = 0; - - // Set the flags. - fd_list[current_fd].flags_mask = flags; - - // Return the file descriptor and increment it. - return (current_fd++); -} +#include "vfs.h" int remove(const char *pathname) { - char absolute_path[MAX_PATH_LENGTH]; - strcpy(absolute_path, pathname); - if (pathname[0] != '/') - { - get_absolute_path(absolute_path); - } + char absolute_path[MAX_PATH_LENGTH]; + strcpy(absolute_path, pathname); + if (pathname[0] != '/') { + get_absolute_path(absolute_path); + } - int32_t mp_id = get_mountpoint_id(absolute_path); - if (mp_id < 0) - { - return -1; - } + int32_t mp_id = get_mountpoint_id(absolute_path); + if (mp_id < 0) { + return -1; + } - if (mountpoint_list[mp_id].operations.remove_f == NULL) - { - return -1; - } + if (mountpoint_list[mp_id].operations.remove_f == NULL) { + return -1; + } - return mountpoint_list[mp_id].operations.remove_f(absolute_path); + return mountpoint_list[mp_id].operations.remove_f(absolute_path); } diff --git a/mentos/src/fs/initrd.c b/mentos/src/fs/initrd.c index 9ac4fe4..23e2815 100644 --- a/mentos/src/fs/initrd.c +++ b/mentos/src/fs/initrd.c @@ -15,6 +15,7 @@ #include "bitops.h" #include "initrd.h" #include "string.h" +#include "open.h" char *module_start[MAX_MODULES]; diff --git a/mentos/src/fs/open.c b/mentos/src/fs/open.c new file mode 100644 index 0000000..72cec8d --- /dev/null +++ b/mentos/src/fs/open.c @@ -0,0 +1,98 @@ +/// MentOS, The Mentoring Operating system project +/// @file open.c +/// @brief +/// @copyright (c) 2019 This file is distributed under the MIT License. +/// See LICENSE.md for details. + +#include "open.h" + +#include "string.h" +#include "debug.h" +#include "stdio.h" +#include "vfs.h" + +int sys_open(const char *pathname, int flags, mode_t mode) +{ + // Allocate a variable for the path. + char absolute_path[MAX_PATH_LENGTH]; + + // Copy the path to the working variable. + strcpy(absolute_path, pathname); + + // If the first character is not the '/' then get the absolute path. + if (absolute_path[0] != '/') { + if (!get_absolute_path(absolute_path)) { + dbg_print("Cannot get the absolute path.\n"); + return -1; + } + } + + // Search for an unused fd. + for (current_fd = 0; current_fd < MAX_OPEN_FD; ++current_fd) { + if (fd_list[current_fd].mountpoint_id == -1) { + break; + } + } + + // Check if there is not fd available. + if (current_fd == MAX_OPEN_FD) { + //errno = EMFILE; + return -1; + } + + // Get the mountpoint. + mountpoint_t *mp = get_mountpoint(absolute_path); + if (mp == NULL) { + //errno = ENODEV; + return -1; + } + + // Check if the function is implemented. + if (mp->operations.open_f == NULL) { + //errno = ENOSYS; + // Reset the file descriptor. + sys_close(current_fd); + return -1; + } + + int32_t fs_spec_id = mp->operations.open_f(absolute_path, flags, mode); + if (fs_spec_id == -1) { + // Reset the file descriptor. + sys_close(current_fd); + return -1; + } + + // Set the file descriptor id. + fd_list[current_fd].fs_spec_id = fs_spec_id; + + // Set the mount point id. + fd_list[current_fd].mountpoint_id = mp->mp_id; + + // Reset the offset. + fd_list[current_fd].offset = 0; + + // Set the flags. + fd_list[current_fd].flags_mask = flags; + + // Return the file descriptor and increment it. + return (current_fd++); +} + +int sys_close(int fd) +{ + if (fd < 0) { + return -1; + } + if (fd_list[fd].fs_spec_id >= -1) { + int mp_id = fd_list[fd].mountpoint_id; + if (mountpoint_list[mp_id].operations.close_f != NULL) { + int fs_fd = fd_list[fd].fs_spec_id; + mountpoint_list[mp_id].operations.close_f(fs_fd); + } + fd_list[fd].fs_spec_id = -1; + fd_list[fd].mountpoint_id = -1; + } else { + return -1; + } + return 0; +} diff --git a/mentos/src/fs/read_write.c b/mentos/src/fs/read_write.c index fcf2531..41346fc 100644 --- a/mentos/src/fs/read_write.c +++ b/mentos/src/fs/read_write.c @@ -12,6 +12,7 @@ #include "unistd.h" #include "keyboard.h" #include "video.h" +#include "open.h" ssize_t sys_read(int fd, void *buf, size_t nbytes) { diff --git a/mentos/src/libc/unistd/close.c b/mentos/src/libc/unistd/close.c new file mode 100644 index 0000000..5be29f7 --- /dev/null +++ b/mentos/src/libc/unistd/close.c @@ -0,0 +1,20 @@ +/// MentOS, The Mentoring Operating system project +/// @file close.c +/// @brief +/// @copyright (c) 2019 This file is distributed under the MIT License. +/// See LICENSE.md for details. + +#include "unistd.h" +#include "errno.h" +#include "syscall.h" + +int close(int fd) +{ + int retval; + DEFN_SYSCALL1(retval, __NR_close, fd); + if (retval < 0) { + errno = -retval; + retval = -1; + } + return retval; +} diff --git a/mentos/src/sys/unistd.c b/mentos/src/sys/unistd.c index a703cae..91a72f5 100644 --- a/mentos/src/sys/unistd.c +++ b/mentos/src/sys/unistd.c @@ -4,34 +4,11 @@ /// @copyright (c) 2019 This file is distributed under the MIT License. /// See LICENSE.md for details. -#include "vfs.h" -#include "stdio.h" -#include "fcntl.h" -#include "kheap.h" -#include "errno.h" -#include "initrd.h" -#include "string.h" #include "unistd.h" -int close(int fildes) -{ - if (fildes < 0) { - return -1; - } - if (fd_list[fildes].fs_spec_id >= -1) { - int mp_id = fd_list[fildes].mountpoint_id; - if (mountpoint_list[mp_id].operations.close_f != NULL) { - int fs_fd = fd_list[fildes].fs_spec_id; - mountpoint_list[mp_id].operations.close_f(fs_fd); - } - fd_list[fildes].fs_spec_id = -1; - fd_list[fildes].mountpoint_id = -1; - } else { - return -1; - } - - return 0; -} +#include "string.h" +#include "stdio.h" +#include "vfs.h" int rmdir(const char *path) { diff --git a/mentos/src/system/syscall.c b/mentos/src/system/syscall.c index ad9939e..a325879 100644 --- a/mentos/src/system/syscall.c +++ b/mentos/src/system/syscall.c @@ -18,6 +18,7 @@ #include "irqflags.h" #include "scheduler.h" #include "read_write.h" +#include "open.h" /// @brief The signature of a function call. typedef int (*SystemCall)(); @@ -48,6 +49,7 @@ void syscall_init() sys_call_table[__NR_read] = (SystemCall)sys_read; sys_call_table[__NR_write] = (SystemCall)sys_write; sys_call_table[__NR_open] = (SystemCall)sys_open; + sys_call_table[__NR_close] = (SystemCall)sys_close; sys_call_table[__NR_getpid] = (SystemCall)sys_getpid; sys_call_table[__NR_getppid] = (SystemCall)sys_getppid; sys_call_table[__NR_vfork] = (SystemCall)sys_vfork; @@ -57,7 +59,6 @@ void syscall_init() sys_call_table[__NR_waitpid] = (SystemCall)sys_waitpid; sys_call_table[__NR_chdir] = (SystemCall)sys_chdir; sys_call_table[__NR_getcwd] = (SystemCall)sys_getcwd; - sys_call_table[__NR_waitpid] = (SystemCall)sys_waitpid; sys_call_table[__NR_brk] = (SystemCall)umalloc; // TODO: sys_brk sys_call_table[__NR_free] = (SystemCall)ufree; // TODO: sys_brk