📄 alpha_linux_process.cc
字号:
TypedBufferArg<uint64_t> fpcr(xc->getSyscallArg(1)); // I don't think this exactly matches the HW FPCR fpcr.copyIn(xc->mem); DPRINTFR(SyscallVerbose, "osf_setsysinfo(SSI_IEEE_FP_CONTROL): " " setting FPCR to 0x%x\n", *(uint64_t*)fpcr); return 0; } default: cerr << "osf_getsysinfo: unknown op " << op << endl; abort(); break; } return 1; } /// Target fnctl() handler. static SyscallReturn fcntlFunc(SyscallDesc *desc, int callnum, Process *process, ExecContext *xc) { int fd = xc->getSyscallArg(0); if (fd < 0 || process->sim_fd(fd) < 0) return -EBADF; int cmd = xc->getSyscallArg(1); switch (cmd) { case 0: // F_DUPFD // if we really wanted to support this, we'd need to do it // in the target fd space. warn("fcntl(%d, F_DUPFD) not supported, error returned\n", fd); return -EMFILE; case 1: // F_GETFD (get close-on-exec flag) case 2: // F_SETFD (set close-on-exec flag) return 0; case 3: // F_GETFL (get file flags) case 4: // F_SETFL (set file flags) // not sure if this is totally valid, but we'll pass it through // to the underlying OS warn("fcntl(%d, %d) passed through to host\n", fd, cmd); return fcntl(process->sim_fd(fd), cmd); // return 0; case 7: // F_GETLK (get lock) case 8: // F_SETLK (set lock) case 9: // F_SETLKW (set lock and wait) // don't mess with file locking... just act like it's OK warn("File lock call (fcntl(%d, %d)) ignored.\n", fd, cmd); return 0; default: warn("Unknown fcntl command %d\n", cmd); return 0; } } /// Array of syscall descriptors, indexed by call number. static SyscallDesc syscallDescs[]; /// Number of syscalls in syscallDescs[]. static const int Num_Syscall_Descs; /// Max supported syscall number. static const int Max_Syscall_Desc; /// Do the specified syscall. Just looks the call number up in /// the table and invokes the appropriate handler. static void doSyscall(int callnum, Process *process, ExecContext *xc) { if (callnum < 0 || callnum > Max_Syscall_Desc) { fatal("Syscall %d out of range", callnum); } SyscallDesc *desc = &syscallDescs[callnum]; desc->doSyscall(callnum, process, xc); }}; // class Linux// open(2) flags translation tableOpenFlagTransTable Linux::openFlagTable[] = {#ifdef _MSC_VER { Linux::TGT_O_RDONLY, _O_RDONLY }, { Linux::TGT_O_WRONLY, _O_WRONLY }, { Linux::TGT_O_RDWR, _O_RDWR }, { Linux::TGT_O_APPEND, _O_APPEND }, { Linux::TGT_O_CREAT, _O_CREAT }, { Linux::TGT_O_TRUNC, _O_TRUNC }, { Linux::TGT_O_EXCL, _O_EXCL },#ifdef _O_NONBLOCK { Linux::TGT_O_NONBLOCK, _O_NONBLOCK },#endif#ifdef _O_NOCTTY { Linux::TGT_O_NOCTTY, _O_NOCTTY },#endif#ifdef _O_SYNC { Linux::TGT_O_SYNC, _O_SYNC },#endif#else /* !_MSC_VER */ { Linux::TGT_O_RDONLY, O_RDONLY }, { Linux::TGT_O_WRONLY, O_WRONLY }, { Linux::TGT_O_RDWR, O_RDWR }, { Linux::TGT_O_APPEND, O_APPEND }, { Linux::TGT_O_CREAT, O_CREAT }, { Linux::TGT_O_TRUNC, O_TRUNC }, { Linux::TGT_O_EXCL, O_EXCL }, { Linux::TGT_O_NONBLOCK, O_NONBLOCK }, { Linux::TGT_O_NOCTTY, O_NOCTTY },#ifdef O_SYNC { Linux::TGT_O_SYNC, O_SYNC },#endif#endif /* _MSC_VER */};const int Linux::NUM_OPEN_FLAGS = (sizeof(Linux::openFlagTable)/sizeof(Linux::openFlagTable[0]));const char *Linux::hostname = "m5.eecs.umich.edu";SyscallDesc Linux::syscallDescs[] = { /* 0 */ SyscallDesc("osf_syscall", unimplementedFunc), /* 1 */ SyscallDesc("exit", exitFunc), /* 2 */ SyscallDesc("fork", unimplementedFunc), /* 3 */ SyscallDesc("read", readFunc), /* 4 */ SyscallDesc("write", writeFunc), /* 5 */ SyscallDesc("osf_old_open", unimplementedFunc), /* 6 */ SyscallDesc("close", closeFunc), /* 7 */ SyscallDesc("osf_wait4", unimplementedFunc), /* 8 */ SyscallDesc("osf_old_creat", unimplementedFunc), /* 9 */ SyscallDesc("link", unimplementedFunc), /* 10 */ SyscallDesc("unlink", unlinkFunc), /* 11 */ SyscallDesc("osf_execve", unimplementedFunc), /* 12 */ SyscallDesc("chdir", unimplementedFunc), /* 13 */ SyscallDesc("fchdir", unimplementedFunc), /* 14 */ SyscallDesc("mknod", unimplementedFunc), /* 15 */ SyscallDesc("chmod", unimplementedFunc), /* 16 */ SyscallDesc("chown", unimplementedFunc), /* 17 */ SyscallDesc("brk", obreakFunc), /* 18 */ SyscallDesc("osf_getfsstat", unimplementedFunc), /* 19 */ SyscallDesc("lseek", lseekFunc), /* 20 */ SyscallDesc("getxpid", getpidFunc), /* 21 */ SyscallDesc("osf_mount", unimplementedFunc), /* 22 */ SyscallDesc("umount", unimplementedFunc), /* 23 */ SyscallDesc("setuid", setuidFunc), /* 24 */ SyscallDesc("getxuid", getuidFunc), /* 25 */ SyscallDesc("exec_with_loader", unimplementedFunc), /* 26 */ SyscallDesc("osf_ptrace", unimplementedFunc), /* 27 */ SyscallDesc("osf_nrecvmsg", unimplementedFunc), /* 28 */ SyscallDesc("osf_nsendmsg", unimplementedFunc), /* 29 */ SyscallDesc("osf_nrecvfrom", unimplementedFunc), /* 30 */ SyscallDesc("osf_naccept", unimplementedFunc), /* 31 */ SyscallDesc("osf_ngetpeername", unimplementedFunc), /* 32 */ SyscallDesc("osf_ngetsockname", unimplementedFunc), /* 33 */ SyscallDesc("access", unimplementedFunc), /* 34 */ SyscallDesc("osf_chflags", unimplementedFunc), /* 35 */ SyscallDesc("osf_fchflags", unimplementedFunc), /* 36 */ SyscallDesc("sync", unimplementedFunc), /* 37 */ SyscallDesc("kill", unimplementedFunc), /* 38 */ SyscallDesc("osf_old_stat", unimplementedFunc), /* 39 */ SyscallDesc("setpgid", unimplementedFunc), /* 40 */ SyscallDesc("osf_old_lstat", unimplementedFunc), /* 41 */ SyscallDesc("dup", unimplementedFunc), /* 42 */ SyscallDesc("pipe", unimplementedFunc), /* 43 */ SyscallDesc("osf_set_program_attributes", unimplementedFunc), /* 44 */ SyscallDesc("osf_profil", unimplementedFunc), /* 45 */ SyscallDesc("open", openFunc<Linux>), /* 46 */ SyscallDesc("osf_old_sigaction", unimplementedFunc), /* 47 */ SyscallDesc("getxgid", getgidFunc), /* 48 */ SyscallDesc("osf_sigprocmask", ignoreFunc), /* 49 */ SyscallDesc("osf_getlogin", unimplementedFunc), /* 50 */ SyscallDesc("osf_setlogin", unimplementedFunc), /* 51 */ SyscallDesc("acct", unimplementedFunc), /* 52 */ SyscallDesc("sigpending", unimplementedFunc), /* 53 */ SyscallDesc("osf_classcntl", unimplementedFunc), /* 54 */ SyscallDesc("ioctl", ioctlFunc<Linux>), /* 55 */ SyscallDesc("osf_reboot", unimplementedFunc), /* 56 */ SyscallDesc("osf_revoke", unimplementedFunc), /* 57 */ SyscallDesc("symlink", unimplementedFunc), /* 58 */ SyscallDesc("readlink", unimplementedFunc), /* 59 */ SyscallDesc("execve", unimplementedFunc), /* 60 */ SyscallDesc("umask", unimplementedFunc), /* 61 */ SyscallDesc("chroot", unimplementedFunc), /* 62 */ SyscallDesc("osf_old_fstat", unimplementedFunc), /* 63 */ SyscallDesc("getpgrp", unimplementedFunc), /* 64 */ SyscallDesc("getpagesize", getpagesizeFunc), /* 65 */ SyscallDesc("osf_mremap", unimplementedFunc), /* 66 */ SyscallDesc("vfork", unimplementedFunc), /* 67 */ SyscallDesc("stat", statFunc<Linux>), /* 68 */ SyscallDesc("lstat", lstatFunc<Linux>), /* 69 */ SyscallDesc("osf_sbrk", unimplementedFunc), /* 70 */ SyscallDesc("osf_sstk", unimplementedFunc), /* 71 */ SyscallDesc("mmap", mmapFunc<Linux>), /* 72 */ SyscallDesc("osf_old_vadvise", unimplementedFunc), /* 73 */ SyscallDesc("munmap", munmapFunc), /* 74 */ SyscallDesc("mprotect", ignoreFunc), /* 75 */ SyscallDesc("madvise", unimplementedFunc), /* 76 */ SyscallDesc("vhangup", unimplementedFunc), /* 77 */ SyscallDesc("osf_kmodcall", unimplementedFunc), /* 78 */ SyscallDesc("osf_mincore", unimplementedFunc), /* 79 */ SyscallDesc("getgroups", unimplementedFunc), /* 80 */ SyscallDesc("setgroups", unimplementedFunc), /* 81 */ SyscallDesc("osf_old_getpgrp", unimplementedFunc), /* 82 */ SyscallDesc("setpgrp", unimplementedFunc), /* 83 */ SyscallDesc("osf_setitimer", unimplementedFunc), /* 84 */ SyscallDesc("osf_old_wait", unimplementedFunc), /* 85 */ SyscallDesc("osf_table", unimplementedFunc), /* 86 */ SyscallDesc("osf_getitimer", unimplementedFunc), /* 87 */ SyscallDesc("gethostname", gethostnameFunc), /* 88 */ SyscallDesc("sethostname", unimplementedFunc), /* 89 */ SyscallDesc("getdtablesize", unimplementedFunc), /* 90 */ SyscallDesc("dup2", unimplementedFunc), /* 91 */ SyscallDesc("fstat", fstatFunc<Linux>), /* 92 */ SyscallDesc("fcntl", fcntlFunc), /* 93 */ SyscallDesc("osf_select", unimplementedFunc), /* 94 */ SyscallDesc("poll", unimplementedFunc), /* 95 */ SyscallDesc("fsync", unimplementedFunc), /* 96 */ SyscallDesc("setpriority", unimplementedFunc), /* 97 */ SyscallDesc("socket", unimplementedFunc), /* 98 */ SyscallDesc("connect", unimplementedFunc), /* 99 */ SyscallDesc("accept", unimplementedFunc), /* 100 */ SyscallDesc("getpriority", unimplementedFunc), /* 101 */ SyscallDesc("send", unimplementedFunc), /* 102 */ SyscallDesc("recv", unimplementedFunc), /* 103 */ SyscallDesc("sigreturn", unimplementedFunc), /* 104 */ SyscallDesc("bind", unimplementedFunc), /* 105 */ SyscallDesc("setsockopt", unimplementedFunc), /* 106 */ SyscallDesc("listen", unimplementedFunc), /* 107 */ SyscallDesc("osf_plock", unimplementedFunc), /* 108 */ SyscallDesc("osf_old_sigvec", unimplementedFunc), /* 109 */ SyscallDesc("osf_old_sigblock", unimplementedFunc), /* 110 */ SyscallDesc("osf_old_sigsetmask", unimplementedFunc), /* 111 */ SyscallDesc("sigsuspend", unimplementedFunc), /* 112 */ SyscallDesc("osf_sigstack", ignoreFunc), /* 113 */ SyscallDesc("recvmsg", unimplementedFunc), /* 114 */ SyscallDesc("sendmsg", unimplementedFunc), /* 115 */ SyscallDesc("osf_old_vtrace", unimplementedFunc), /* 116 */ SyscallDesc("osf_gettimeofday", unimplementedFunc), /* 117 */ SyscallDesc("osf_getrusage", unimplementedFunc), /* 118 */ SyscallDesc("getsockopt", unimplementedFunc), /* 119 */ SyscallDesc("numa_syscalls", unimplementedFunc), /* 120 */ SyscallDesc("readv", unimplementedFunc), /* 121 */ SyscallDesc("writev", unimplementedFunc), /* 122 */ SyscallDesc("osf_settimeofday", unimplementedFunc), /* 123 */ SyscallDesc("fchown", unimplementedFunc), /* 124 */ SyscallDesc("fchmod", unimplementedFunc), /* 125 */ SyscallDesc("recvfrom", unimplementedFunc), /* 126 */ SyscallDesc("setreuid", unimplementedFunc), /* 127 */ SyscallDesc("setregid", unimplementedFunc), /* 128 */ SyscallDesc("rename", renameFunc), /* 129 */ SyscallDesc("truncate", unimplementedFunc), /* 130 */ SyscallDesc("ftruncate", unimplementedFunc), /* 131 */ SyscallDesc("flock", unimplementedFunc), /* 132 */ SyscallDesc("setgid", unimplementedFunc), /* 133 */ SyscallDesc("sendto", unimplementedFunc), /* 134 */ SyscallDesc("shutdown", unimplementedFunc), /* 135 */ SyscallDesc("socketpair", unimplementedFunc), /* 136 */ SyscallDesc("mkdir", unimplementedFunc), /* 137 */ SyscallDesc("rmdir", unimplementedFunc), /* 138 */ SyscallDesc("osf_utimes", unimplementedFunc), /* 139 */ SyscallDesc("osf_old_sigreturn", unimplementedFunc), /* 140 */ SyscallDesc("osf_adjtime", unimplementedFunc), /* 141 */ SyscallDesc("getpeername", unimplementedFunc), /* 142 */ SyscallDesc("osf_gethostid", unimplementedFunc), /* 143 */ SyscallDesc("osf_sethostid", unimplementedFunc), /* 144 */ SyscallDesc("getrlimit", getrlimitFunc<Linux>), /* 145 */ SyscallDesc("setrlimit", ignoreFunc), /* 146 */ SyscallDesc("osf_old_killpg", unimplementedFunc), /* 147 */ SyscallDesc("setsid", unimplementedFunc), /* 148 */ SyscallDesc("quotactl", unimplementedFunc), /* 149 */ SyscallDesc("osf_oldquota", unimplementedFunc), /* 150 */ SyscallDesc("getsockname", unimplementedFunc), /* 151 */ SyscallDesc("osf_pread", unimplementedFunc), /* 152 */ SyscallDesc("osf_pwrite", unimplementedFunc), /* 153 */ SyscallDesc("osf_pid_block", unimplementedFunc), /* 154 */ SyscallDesc("osf_pid_unblock", unimplementedFunc), /* 155 */ SyscallDesc("osf_signal_urti", unimplementedFunc), /* 156 */ SyscallDesc("sigaction", ignoreFunc), /* 157 */ SyscallDesc("osf_sigwaitprim", unimplementedFunc), /* 158 */ SyscallDesc("osf_nfssvc", unimplementedFunc), /* 159 */ SyscallDesc("osf_getdirentries", unimplementedFunc), /* 160 */ SyscallDesc("osf_statfs", unimplementedFunc), /* 161 */ SyscallDesc("osf_fstatfs", unimplementedFunc), /* 162 */ SyscallDesc("unknown #162", unimplementedFunc), /* 163 */ SyscallDesc("osf_async_daemon", unimplementedFunc), /* 164 */ SyscallDesc("osf_getfh", unimplementedFunc), /* 165 */ SyscallDesc("osf_getdomainname", unimplementedFunc), /* 166 */ SyscallDesc("setdomainname", unimplementedFunc),
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -