fix WEIRD STUPID RUST bug: replace consts by literals

This commit is contained in:
WangRunji 2019-03-12 17:40:22 +08:00 committed by Tate Tian
parent 168c2ddf0a
commit 6ac31aedd7
2 changed files with 38 additions and 368 deletions

@ -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;

@ -12,11 +12,8 @@ use {fs, process, std, vm};
//use std::libc_fs as fs; //use std::libc_fs as fs;
//use std::libc_io as io; //use std::libc_io as io;
use self::consts::*;
use fs::File; use fs::File;
mod consts;
#[no_mangle] #[no_mangle]
pub extern "C" fn dispatch_syscall( pub extern "C" fn dispatch_syscall(
num: u32, num: u32,
@ -29,37 +26,37 @@ pub extern "C" fn dispatch_syscall(
) -> isize { ) -> isize {
debug!("syscall {}: {:#x}, {:#x}, {:#x}, {:#x}, {:#x}, {:#x}", num, arg0, arg1, arg2, arg3, arg4, arg5); debug!("syscall {}: {:#x}, {:#x}, {:#x}, {:#x}, {:#x}, {:#x}", num, arg0, arg1, arg2, arg3, arg4, arg5);
let ret = match num { let ret = match num {
SYS_open => do_open(arg0 as *const i8, arg1 as u32, arg2 as u32), 002 => do_open(arg0 as *const i8, arg1 as u32, arg2 as u32),
SYS_close => do_close(arg0 as FileDesc), 003 => do_close(arg0 as FileDesc),
SYS_read => do_read(arg0 as FileDesc, arg1 as *mut u8, arg2 as usize), 000 => 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), 001 => 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), 019 => 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), 020 => 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), 004 => do_stat(arg0 as *const i8, arg1 as *mut fs::Stat),
SYS_fstat => do_fstat(arg0 as FileDesc, arg1 as *mut fs::Stat), 005 => do_fstat(arg0 as FileDesc, arg1 as *mut fs::Stat),
SYS_lstat => do_lstat(arg0 as *const i8, arg1 as *mut fs::Stat), 006 => 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), 008 => do_lseek(arg0 as FileDesc, arg1 as off_t, arg2 as i32),
SYS_fsync => do_fsync(arg0 as FileDesc), 074 => do_fsync(arg0 as FileDesc),
SYS_fdatasync => do_fdatasync(arg0 as FileDesc), 075 => do_fdatasync(arg0 as FileDesc),
SYS_truncate => do_truncate(arg0 as *const i8, arg1 as usize), 076 => do_truncate(arg0 as *const i8, arg1 as usize),
SYS_ftruncate => do_ftruncate(arg0 as FileDesc, arg1 as usize), 077 => do_ftruncate(arg0 as FileDesc, arg1 as usize),
SYS_getdents64 => do_getdents64(arg0 as FileDesc, arg1 as *mut u8, arg2 as usize), 217 => do_getdents64(arg0 as FileDesc, arg1 as *mut u8, arg2 as usize),
SYS_sync => do_sync(), 162 => do_sync(),
SYS_getcwd => do_getcwd(arg0 as *mut u8, arg1 as usize), 079 => do_getcwd(arg0 as *mut u8, arg1 as usize),
SYS_exit => do_exit(arg0 as i32), 060 => do_exit(arg0 as i32),
SYS_spawn => do_spawn( 360 => do_spawn(
arg0 as *mut u32, arg0 as *mut u32,
arg1 as *mut i8, arg1 as *mut i8,
arg2 as *const *const i8, arg2 as *const *const i8,
arg3 as *const *const i8, arg3 as *const *const i8,
arg4 as *const FdOp, arg4 as *const FdOp,
), ),
SYS_wait4 => do_wait4(arg0 as i32, arg1 as *mut i32), 061 => do_wait4(arg0 as i32, arg1 as *mut i32),
SYS_getpid => do_getpid(), 039 => do_getpid(),
SYS_getppid => do_getppid(), 110 => do_getppid(),
SYS_mmap => do_mmap( 009 => do_mmap(
arg0 as usize, arg0 as usize,
arg1 as usize, arg1 as usize,
arg2 as i32, arg2 as i32,
@ -67,23 +64,23 @@ pub extern "C" fn dispatch_syscall(
arg4 as FileDesc, arg4 as FileDesc,
arg5 as off_t, arg5 as off_t,
), ),
SYS_munmap => do_munmap(arg0 as usize, arg1 as usize), 011 => do_munmap(arg0 as usize, arg1 as usize),
SYS_mremap => do_mremap( 025 => do_mremap(
arg0 as usize, arg0 as usize,
arg1 as usize, arg1 as usize,
arg2 as usize, arg2 as usize,
arg3 as i32, arg3 as i32,
arg4 as usize, 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), 022 => do_pipe2(arg0 as *mut i32, 0),
SYS_pipe2 => do_pipe2(arg0 as *mut i32, arg1 as u32), 293 => do_pipe2(arg0 as *mut i32, arg1 as u32),
SYS_dup => do_dup(arg0 as FileDesc), 032 => do_dup(arg0 as FileDesc),
SYS_dup2 => do_dup2(arg0 as FileDesc, arg1 as FileDesc), 033 => do_dup2(arg0 as FileDesc, arg1 as FileDesc),
SYS_dup3 => do_dup3(arg0 as FileDesc, arg1 as FileDesc, arg2 as u32), 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), _ => do_unknown(num),
}; };
@ -175,11 +172,13 @@ fn do_open(path: *const i8, flags: u32, mode: u32) -> Result<isize, Error> {
} }
fn do_close(fd: FileDesc) -> Result<isize, Error> { fn do_close(fd: FileDesc) -> Result<isize, Error> {
info!("close: fd: {}", fd);
fs::do_close(fd)?; fs::do_close(fd)?;
Ok(0) Ok(0)
} }
fn do_read(fd: FileDesc, buf: *mut u8, size: usize) -> Result<isize, Error> { fn do_read(fd: FileDesc, buf: *mut u8, size: usize) -> Result<isize, Error> {
info!("write: fd: {}, buf: {:?}, size: {}", fd, buf, size);
let safe_buf = { let safe_buf = {
check_mut_array(buf, size)?; check_mut_array(buf, size)?;
unsafe { std::slice::from_raw_parts_mut(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<isize, Error> {
} }
fn do_write(fd: FileDesc, buf: *const u8, size: usize) -> Result<isize, Error> { fn do_write(fd: FileDesc, buf: *const u8, size: usize) -> Result<isize, Error> {
info!("write: fd: {}, buf: {:?}, size: {}", fd, buf, size);
let safe_buf = { let safe_buf = {
check_array(buf, size)?; check_array(buf, size)?;
unsafe { std::slice::from_raw_parts(buf, size) } unsafe { std::slice::from_raw_parts(buf, size) }
@ -402,6 +402,7 @@ fn do_wait4(pid: i32, _exit_status: *mut i32) -> Result<isize, Error> {
} }
fn do_getpid() -> Result<isize, Error> { fn do_getpid() -> Result<isize, Error> {
info!("getpid");
let pid = process::do_getpid(); let pid = process::do_getpid();
Ok(pid as isize) Ok(pid as isize)
} }
@ -451,6 +452,7 @@ fn do_gettimeofday(tv_u: *mut timeval_t) -> Result<isize, Error> {
const MAP_FAILED: *const c_void = ((-1) as i64) as *const c_void; const MAP_FAILED: *const c_void = ((-1) as i64) as *const c_void;
fn do_exit(status: i32) -> ! { fn do_exit(status: i32) -> ! {
info!("exit: {}", status);
extern "C" { extern "C" {
fn do_exit_task() -> !; fn do_exit_task() -> !;
} }
@ -461,9 +463,7 @@ fn do_exit(status: i32) -> ! {
} }
fn do_unknown(num: u32) -> Result<isize, Error> { fn do_unknown(num: u32) -> Result<isize, Error> {
if cfg!(debug_assertions) { warn!("Unknown syscall (num = {})", num);
//println!("[WARNING] Unknown syscall (num = {})", num);
}
Err(Error::new(ENOSYS, "Unknown syscall")) Err(Error::new(ENOSYS, "Unknown syscall"))
} }