From 6ac31aedd727322f429c51054e5ce638b18b007c Mon Sep 17 00:00:00 2001 From: WangRunji Date: Tue, 12 Mar 2019 17:40:22 +0800 Subject: [PATCH] fix WEIRD STUPID RUST bug: replace consts by literals --- src/libos/src/syscall/consts.rs | 330 -------------------------------- src/libos/src/syscall/mod.rs | 76 ++++---- 2 files changed, 38 insertions(+), 368 deletions(-) delete mode 100644 src/libos/src/syscall/consts.rs diff --git a/src/libos/src/syscall/consts.rs b/src/libos/src/syscall/consts.rs deleted file mode 100644 index 370b7b09..00000000 --- a/src/libos/src/syscall/consts.rs +++ /dev/null @@ -1,330 +0,0 @@ -//! Syscall numbers - -const SYS_read: usize = 0; -const SYS_write: usize = 1; -const SYS_open: usize = 2; -const SYS_close: usize = 3; -const SYS_stat: usize = 4; -const SYS_fstat: usize = 5; -const SYS_lstat: usize = 6; -const SYS_poll: usize = 7; -const SYS_lseek: usize = 8; -const SYS_mmap: usize = 9; -const SYS_mprotect: usize = 10; -const SYS_munmap: usize = 11; -const SYS_brk: usize = 12; -const SYS_rt_sigaction: usize = 13; -const SYS_rt_sigprocmask: usize = 14; -const SYS_rt_sigreturn: usize = 15; -const SYS_ioctl: usize = 16; -const SYS_pread64: usize = 17; -const SYS_pwrite64: usize = 18; -const SYS_readv: usize = 19; -const SYS_writev: usize = 20; -const SYS_access: usize = 21; -const SYS_pipe: usize = 22; -const SYS_select: usize = 23; -const SYS_sched_yield: usize = 24; -const SYS_mremap: usize = 25; -const SYS_msync: usize = 26; -const SYS_mincore: usize = 27; -const SYS_madvise: usize = 28; -const SYS_shmget: usize = 29; -const SYS_shmat: usize = 30; -const SYS_shmctl: usize = 31; -const SYS_dup: usize = 32; -const SYS_dup2: usize = 33; -const SYS_pause: usize = 34; -const SYS_nanosleep: usize = 35; -const SYS_getitimer: usize = 36; -const SYS_alarm: usize = 37; -const SYS_setitimer: usize = 38; -const SYS_getpid: usize = 39; -const SYS_sendfile: usize = 40; -const SYS_socket: usize = 41; -const SYS_connect: usize = 42; -const SYS_accept: usize = 43; -const SYS_sendto: usize = 44; -const SYS_recvfrom: usize = 45; -const SYS_sendmsg: usize = 46; -const SYS_recvmsg: usize = 47; -const SYS_shutdown: usize = 48; -const SYS_bind: usize = 49; -const SYS_listen: usize = 50; -const SYS_getsockname: usize = 51; -const SYS_getpeername: usize = 52; -const SYS_socketpair: usize = 53; -const SYS_setsockopt: usize = 54; -const SYS_getsockopt: usize = 55; -const SYS_clone: usize = 56; -const SYS_fork: usize = 57; -const SYS_vfork: usize = 58; -const SYS_execve: usize = 59; -const SYS_exit: usize = 60; -const SYS_wait4: usize = 61; -const SYS_kill: usize = 62; -const SYS_uname: usize = 63; -const SYS_semget: usize = 64; -const SYS_semop: usize = 65; -const SYS_semctl: usize = 66; -const SYS_shmdt: usize = 67; -const SYS_msgget: usize = 68; -const SYS_msgsnd: usize = 69; -const SYS_msgrcv: usize = 70; -const SYS_msgctl: usize = 71; -const SYS_fcntl: usize = 72; -const SYS_flock: usize = 73; -const SYS_fsync: usize = 74; -const SYS_fdatasync: usize = 75; -const SYS_truncate: usize = 76; -const SYS_ftruncate: usize = 77; -const SYS_getdents: usize = 78; -const SYS_getcwd: usize = 79; -const SYS_chdir: usize = 80; -const SYS_fchdir: usize = 81; -const SYS_rename: usize = 82; -const SYS_mkdir: usize = 83; -const SYS_rmdir: usize = 84; -const SYS_creat: usize = 85; -const SYS_link: usize = 86; -const SYS_unlink: usize = 87; -const SYS_symlink: usize = 88; -const SYS_readlink: usize = 89; -const SYS_chmod: usize = 90; -const SYS_fchmod: usize = 91; -const SYS_chown: usize = 92; -const SYS_fchown: usize = 93; -const SYS_lchown: usize = 94; -const SYS_umask: usize = 95; -const SYS_gettimeofday: usize = 96; -const SYS_getrlimit: usize = 97; -const SYS_getrusage: usize = 98; -const SYS_sysinfo: usize = 99; -const SYS_times: usize = 100; -const SYS_ptrace: usize = 101; -const SYS_getuid: usize = 102; -const SYS_syslog: usize = 103; -const SYS_getgid: usize = 104; -const SYS_setuid: usize = 105; -const SYS_setgid: usize = 106; -const SYS_geteuid: usize = 107; -const SYS_getegid: usize = 108; -const SYS_setpgid: usize = 109; -const SYS_getppid: usize = 110; -const SYS_getpgrp: usize = 111; -const SYS_setsid: usize = 112; -const SYS_setreuid: usize = 113; -const SYS_setregid: usize = 114; -const SYS_getgroups: usize = 115; -const SYS_setgroups: usize = 116; -const SYS_setresuid: usize = 117; -const SYS_getresuid: usize = 118; -const SYS_setresgid: usize = 119; -const SYS_getresgid: usize = 120; -const SYS_getpgid: usize = 121; -const SYS_setfsuid: usize = 122; -const SYS_setfsgid: usize = 123; -const SYS_getsid: usize = 124; -const SYS_capget: usize = 125; -const SYS_capset: usize = 126; -const SYS_rt_sigpending: usize = 127; -const SYS_rt_sigtimedwait: usize = 128; -const SYS_rt_sigqueueinfo: usize = 129; -const SYS_rt_sigsuspend: usize = 130; -const SYS_sigaltstack: usize = 131; -const SYS_utime: usize = 132; -const SYS_mknod: usize = 133; -const SYS_uselib: usize = 134; -const SYS_personality: usize = 135; -const SYS_ustat: usize = 136; -const SYS_statfs: usize = 137; -const SYS_fstatfs: usize = 138; -const SYS_sysfs: usize = 139; -const SYS_getpriority: usize = 140; -const SYS_setpriority: usize = 141; -const SYS_sched_setparam: usize = 142; -const SYS_sched_getparam: usize = 143; -const SYS_sched_setscheduler: usize = 144; -const SYS_sched_getscheduler: usize = 145; -const SYS_sched_get_priority_max: usize = 146; -const SYS_sched_get_priority_min: usize = 147; -const SYS_sched_rr_get_interval: usize = 148; -const SYS_mlock: usize = 149; -const SYS_munlock: usize = 150; -const SYS_mlockall: usize = 151; -const SYS_munlockall: usize = 152; -const SYS_vhangup: usize = 153; -const SYS_modify_ldt: usize = 154; -const SYS_pivot_root: usize = 155; -const SYS__sysctl: usize = 156; -const SYS_prctl: usize = 157; -const SYS_arch_prctl: usize = 158; -const SYS_adjtimex: usize = 159; -const SYS_setrlimit: usize = 160; -const SYS_chroot: usize = 161; -const SYS_sync: usize = 162; -const SYS_acct: usize = 163; -const SYS_settimeofday: usize = 164; -const SYS_mount: usize = 165; -const SYS_umount2: usize = 166; -const SYS_swapon: usize = 167; -const SYS_swapoff: usize = 168; -const SYS_reboot: usize = 169; -const SYS_sethostname: usize = 170; -const SYS_setdomainname: usize = 171; -const SYS_iopl: usize = 172; -const SYS_ioperm: usize = 173; -const SYS_create_module: usize = 174; -const SYS_init_module: usize = 175; -const SYS_delete_module: usize = 176; -const SYS_get_kernel_syms: usize = 177; -const SYS_query_module: usize = 178; -const SYS_quotactl: usize = 179; -const SYS_nfsservctl: usize = 180; -const SYS_getpmsg: usize = 181; -const SYS_putpmsg: usize = 182; -const SYS_afs_syscall: usize = 183; -const SYS_tuxcall: usize = 184; -const SYS_security: usize = 185; -const SYS_gettid: usize = 186; -const SYS_readahead: usize = 187; -const SYS_setxattr: usize = 188; -const SYS_lsetxattr: usize = 189; -const SYS_fsetxattr: usize = 190; -const SYS_getxattr: usize = 191; -const SYS_lgetxattr: usize = 192; -const SYS_fgetxattr: usize = 193; -const SYS_listxattr: usize = 194; -const SYS_llistxattr: usize = 195; -const SYS_flistxattr: usize = 196; -const SYS_removexattr: usize = 197; -const SYS_lremovexattr: usize = 198; -const SYS_fremovexattr: usize = 199; -const SYS_tkill: usize = 200; -const SYS_time: usize = 201; -const SYS_futex: usize = 202; -const SYS_sched_setaffinity: usize = 203; -const SYS_sched_getaffinity: usize = 204; -const SYS_set_thread_area: usize = 205; -const SYS_io_setup: usize = 206; -const SYS_io_destroy: usize = 207; -const SYS_io_getevents: usize = 208; -const SYS_io_submit: usize = 209; -const SYS_io_cancel: usize = 210; -const SYS_get_thread_area: usize = 211; -const SYS_lookup_dcookie: usize = 212; -const SYS_epoll_create: usize = 213; -const SYS_epoll_ctl_old: usize = 214; -const SYS_epoll_wait_old: usize = 215; -const SYS_remap_file_pages: usize = 216; -const SYS_getdents64: usize = 217; -const SYS_set_tid_address: usize = 218; -const SYS_restart_syscall: usize = 219; -const SYS_semtimedop: usize = 220; -const SYS_fadvise64: usize = 221; -const SYS_timer_create: usize = 222; -const SYS_timer_settime: usize = 223; -const SYS_timer_gettime: usize = 224; -const SYS_timer_getoverrun: usize = 225; -const SYS_timer_delete: usize = 226; -const SYS_clock_settime: usize = 227; -const SYS_clock_gettime: usize = 228; -const SYS_clock_getres: usize = 229; -const SYS_clock_nanosleep: usize = 230; -const SYS_exit_group: usize = 231; -const SYS_epoll_wait: usize = 232; -const SYS_epoll_ctl: usize = 233; -const SYS_tgkill: usize = 234; -const SYS_utimes: usize = 235; -const SYS_vserver: usize = 236; -const SYS_mbind: usize = 237; -const SYS_set_mempolicy: usize = 238; -const SYS_get_mempolicy: usize = 239; -const SYS_mq_open: usize = 240; -const SYS_mq_unlink: usize = 241; -const SYS_mq_timedsend: usize = 242; -const SYS_mq_timedreceive: usize = 243; -const SYS_mq_notify: usize = 244; -const SYS_mq_getsetattr: usize = 245; -const SYS_kexec_load: usize = 246; -const SYS_waitid: usize = 247; -const SYS_add_key: usize = 248; -const SYS_request_key: usize = 249; -const SYS_keyctl: usize = 250; -const SYS_ioprio_set: usize = 251; -const SYS_ioprio_get: usize = 252; -const SYS_inotify_init: usize = 253; -const SYS_inotify_add_watch: usize = 254; -const SYS_inotify_rm_watch: usize = 255; -const SYS_migrate_pages: usize = 256; -const SYS_openat: usize = 257; -const SYS_mkdirat: usize = 258; -const SYS_mknodat: usize = 259; -const SYS_fchownat: usize = 260; -const SYS_futimesat: usize = 261; -const SYS_newfstatat: usize = 262; -const SYS_unlinkat: usize = 263; -const SYS_renameat: usize = 264; -const SYS_linkat: usize = 265; -const SYS_symlinkat: usize = 266; -const SYS_readlinkat: usize = 267; -const SYS_fchmodat: usize = 268; -const SYS_faccessat: usize = 269; -const SYS_pselect6: usize = 270; -const SYS_ppoll: usize = 271; -const SYS_unshare: usize = 272; -const SYS_set_robust_list: usize = 273; -const SYS_get_robust_list: usize = 274; -const SYS_splice: usize = 275; -const SYS_tee: usize = 276; -const SYS_sync_file_range: usize = 277; -const SYS_vmsplice: usize = 278; -const SYS_move_pages: usize = 279; -const SYS_utimensat: usize = 280; -const SYS_epoll_pwait: usize = 281; -const SYS_signalfd: usize = 282; -const SYS_timerfd_create: usize = 283; -const SYS_eventfd: usize = 284; -const SYS_fallocate: usize = 285; -const SYS_timerfd_settime: usize = 286; -const SYS_timerfd_gettime: usize = 287; -const SYS_accept4: usize = 288; -const SYS_signalfd4: usize = 289; -const SYS_eventfd2: usize = 290; -const SYS_epoll_create1: usize = 291; -const SYS_dup3: usize = 292; -const SYS_pipe2: usize = 293; -const SYS_inotify_init1: usize = 294; -const SYS_preadv: usize = 295; -const SYS_pwritev: usize = 296; -const SYS_rt_tgsigqueueinfo: usize = 297; -const SYS_perf_event_open: usize = 298; -const SYS_recvmmsg: usize = 299; -const SYS_fanotify_init: usize = 300; -const SYS_fanotify_mark: usize = 301; -const SYS_prlimit64: usize = 302; -const SYS_name_to_handle_at: usize = 303; -const SYS_open_by_handle_at: usize = 304; -const SYS_clock_adjtime: usize = 305; -const SYS_syncfs: usize = 306; -const SYS_sendmmsg: usize = 307; -const SYS_setns: usize = 308; -const SYS_getcpu: usize = 309; -const SYS_process_vm_readv: usize = 310; -const SYS_process_vm_writev: usize = 311; -const SYS_kcmp: usize = 312; -const SYS_finit_module: usize = 313; -const SYS_sched_setattr: usize = 314; -const SYS_sched_getattr: usize = 315; -const SYS_renameat2: usize = 316; -const SYS_seccomp: usize = 317; -const SYS_getrandom: usize = 318; -const SYS_memfd_create: usize = 319; -const SYS_kexec_file_load: usize = 320; -const SYS_bpf: usize = 321; -const SYS_execveat: usize = 322; -const SYS_userfaultfd: usize = 323; -const SYS_membarrier: usize = 324; -const SYS_mlock2: usize = 325; - -const SYS_spawn: usize = 360; diff --git a/src/libos/src/syscall/mod.rs b/src/libos/src/syscall/mod.rs index 507c3d12..ac9cd35f 100644 --- a/src/libos/src/syscall/mod.rs +++ b/src/libos/src/syscall/mod.rs @@ -12,11 +12,8 @@ use {fs, process, std, vm}; //use std::libc_fs as fs; //use std::libc_io as io; -use self::consts::*; use fs::File; -mod consts; - #[no_mangle] pub extern "C" fn dispatch_syscall( num: u32, @@ -29,37 +26,37 @@ pub extern "C" fn dispatch_syscall( ) -> isize { debug!("syscall {}: {:#x}, {:#x}, {:#x}, {:#x}, {:#x}, {:#x}", num, arg0, arg1, arg2, arg3, arg4, arg5); let ret = match num { - SYS_open => do_open(arg0 as *const i8, arg1 as u32, arg2 as u32), - SYS_close => do_close(arg0 as FileDesc), - SYS_read => do_read(arg0 as FileDesc, arg1 as *mut u8, arg2 as usize), - SYS_write => do_write(arg0 as FileDesc, arg1 as *const u8, arg2 as usize), - SYS_readv => do_readv(arg0 as FileDesc, arg1 as *mut iovec_t, arg2 as i32), - SYS_writev => do_writev(arg0 as FileDesc, arg1 as *mut iovec_t, arg2 as i32), - SYS_stat => do_stat(arg0 as *const i8, arg1 as *mut fs::Stat), - SYS_fstat => do_fstat(arg0 as FileDesc, arg1 as *mut fs::Stat), - SYS_lstat => do_lstat(arg0 as *const i8, arg1 as *mut fs::Stat), - SYS_lseek => do_lseek(arg0 as FileDesc, arg1 as off_t, arg2 as i32), - SYS_fsync => do_fsync(arg0 as FileDesc), - SYS_fdatasync => do_fdatasync(arg0 as FileDesc), - SYS_truncate => do_truncate(arg0 as *const i8, arg1 as usize), - SYS_ftruncate => do_ftruncate(arg0 as FileDesc, arg1 as usize), - SYS_getdents64 => do_getdents64(arg0 as FileDesc, arg1 as *mut u8, arg2 as usize), - SYS_sync => do_sync(), - SYS_getcwd => do_getcwd(arg0 as *mut u8, arg1 as usize), + 002 => do_open(arg0 as *const i8, arg1 as u32, arg2 as u32), + 003 => do_close(arg0 as FileDesc), + 000 => do_read(arg0 as FileDesc, arg1 as *mut u8, arg2 as usize), + 001 => do_write(arg0 as FileDesc, arg1 as *const u8, arg2 as usize), + 019 => do_readv(arg0 as FileDesc, arg1 as *mut iovec_t, arg2 as i32), + 020 => do_writev(arg0 as FileDesc, arg1 as *mut iovec_t, arg2 as i32), + 004 => do_stat(arg0 as *const i8, arg1 as *mut fs::Stat), + 005 => do_fstat(arg0 as FileDesc, arg1 as *mut fs::Stat), + 006 => do_lstat(arg0 as *const i8, arg1 as *mut fs::Stat), + 008 => do_lseek(arg0 as FileDesc, arg1 as off_t, arg2 as i32), + 074 => do_fsync(arg0 as FileDesc), + 075 => do_fdatasync(arg0 as FileDesc), + 076 => do_truncate(arg0 as *const i8, arg1 as usize), + 077 => do_ftruncate(arg0 as FileDesc, arg1 as usize), + 217 => do_getdents64(arg0 as FileDesc, arg1 as *mut u8, arg2 as usize), + 162 => do_sync(), + 079 => do_getcwd(arg0 as *mut u8, arg1 as usize), - SYS_exit => do_exit(arg0 as i32), - SYS_spawn => do_spawn( + 060 => do_exit(arg0 as i32), + 360 => do_spawn( arg0 as *mut u32, arg1 as *mut i8, arg2 as *const *const i8, arg3 as *const *const i8, arg4 as *const FdOp, ), - SYS_wait4 => do_wait4(arg0 as i32, arg1 as *mut i32), - SYS_getpid => do_getpid(), - SYS_getppid => do_getppid(), + 061 => do_wait4(arg0 as i32, arg1 as *mut i32), + 039 => do_getpid(), + 110 => do_getppid(), - SYS_mmap => do_mmap( + 009 => do_mmap( arg0 as usize, arg1 as usize, arg2 as i32, @@ -67,23 +64,23 @@ pub extern "C" fn dispatch_syscall( arg4 as FileDesc, arg5 as off_t, ), - SYS_munmap => do_munmap(arg0 as usize, arg1 as usize), - SYS_mremap => do_mremap( + 011 => do_munmap(arg0 as usize, arg1 as usize), + 025 => do_mremap( arg0 as usize, arg1 as usize, arg2 as usize, arg3 as i32, arg4 as usize, ), - SYS_brk => do_brk(arg0 as usize), + 012 => do_brk(arg0 as usize), - SYS_pipe => do_pipe2(arg0 as *mut i32, 0), - SYS_pipe2 => do_pipe2(arg0 as *mut i32, arg1 as u32), - SYS_dup => do_dup(arg0 as FileDesc), - SYS_dup2 => do_dup2(arg0 as FileDesc, arg1 as FileDesc), - SYS_dup3 => do_dup3(arg0 as FileDesc, arg1 as FileDesc, arg2 as u32), + 022 => do_pipe2(arg0 as *mut i32, 0), + 293 => do_pipe2(arg0 as *mut i32, arg1 as u32), + 032 => do_dup(arg0 as FileDesc), + 033 => do_dup2(arg0 as FileDesc, arg1 as FileDesc), + 292 => do_dup3(arg0 as FileDesc, arg1 as FileDesc, arg2 as u32), - SYS_gettimeofday => do_gettimeofday(arg0 as *mut timeval_t), + 096 => do_gettimeofday(arg0 as *mut timeval_t), _ => do_unknown(num), }; @@ -175,11 +172,13 @@ fn do_open(path: *const i8, flags: u32, mode: u32) -> Result { } fn do_close(fd: FileDesc) -> Result { + info!("close: fd: {}", fd); fs::do_close(fd)?; Ok(0) } fn do_read(fd: FileDesc, buf: *mut u8, size: usize) -> Result { + info!("write: fd: {}, buf: {:?}, size: {}", fd, buf, size); let safe_buf = { check_mut_array(buf, size)?; unsafe { std::slice::from_raw_parts_mut(buf, size) } @@ -189,6 +188,7 @@ fn do_read(fd: FileDesc, buf: *mut u8, size: usize) -> Result { } fn do_write(fd: FileDesc, buf: *const u8, size: usize) -> Result { + info!("write: fd: {}, buf: {:?}, size: {}", fd, buf, size); let safe_buf = { check_array(buf, size)?; unsafe { std::slice::from_raw_parts(buf, size) } @@ -402,6 +402,7 @@ fn do_wait4(pid: i32, _exit_status: *mut i32) -> Result { } fn do_getpid() -> Result { + info!("getpid"); let pid = process::do_getpid(); Ok(pid as isize) } @@ -451,6 +452,7 @@ fn do_gettimeofday(tv_u: *mut timeval_t) -> Result { const MAP_FAILED: *const c_void = ((-1) as i64) as *const c_void; fn do_exit(status: i32) -> ! { + info!("exit: {}", status); extern "C" { fn do_exit_task() -> !; } @@ -461,9 +463,7 @@ fn do_exit(status: i32) -> ! { } fn do_unknown(num: u32) -> Result { - if cfg!(debug_assertions) { - //println!("[WARNING] Unknown syscall (num = {})", num); - } + warn!("Unknown syscall (num = {})", num); Err(Error::new(ENOSYS, "Unknown syscall")) }