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_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<isize, Error> {
}
fn do_close(fd: FileDesc) -> Result<isize, Error> {
info!("close: fd: {}", fd);
fs::do_close(fd)?;
Ok(0)
}
fn do_read(fd: FileDesc, buf: *mut u8, size: usize) -> Result<isize, Error> {
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<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 = {
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<isize, Error> {
}
fn do_getpid() -> Result<isize, Error> {
info!("getpid");
let pid = process::do_getpid();
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;
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<isize, Error> {
if cfg!(debug_assertions) {
//println!("[WARNING] Unknown syscall (num = {})", num);
}
warn!("Unknown syscall (num = {})", num);
Err(Error::new(ENOSYS, "Unknown syscall"))
}