Change-Id: Ia6ac34dfb38b71eff7b573b3c9ce477fef0ef5f7 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/23453 Reviewed-by: Bobby R. Bruce <bbruce@ucdavis.edu> Maintainer: Gabe Black <gabeblack@google.com> Tested-by: kokoro <noreply+kokoro@google.com>
816 lines
27 KiB
C++
816 lines
27 KiB
C++
/*
|
|
* Copyright (c) 2005 The Regents of The University of Michigan
|
|
* Copyright (c) 2007 MIPS Technologies, Inc.
|
|
* Copyright (c) 2016 The University of Virginia
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are
|
|
* met: redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer;
|
|
* redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution;
|
|
* neither the name of the copyright holders nor the names of its
|
|
* contributors may be used to endorse or promote products derived from
|
|
* this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#include "arch/riscv/linux/process.hh"
|
|
|
|
#include <map>
|
|
|
|
#include "arch/riscv/isa_traits.hh"
|
|
#include "arch/riscv/linux/linux.hh"
|
|
#include "base/loader/object_file.hh"
|
|
#include "base/trace.hh"
|
|
#include "cpu/thread_context.hh"
|
|
#include "debug/SyscallVerbose.hh"
|
|
#include "kern/linux/linux.hh"
|
|
#include "sim/eventq.hh"
|
|
#include "sim/process.hh"
|
|
#include "sim/syscall_desc.hh"
|
|
#include "sim/syscall_emul.hh"
|
|
#include "sim/system.hh"
|
|
|
|
using namespace std;
|
|
using namespace RiscvISA;
|
|
|
|
namespace
|
|
{
|
|
|
|
class RiscvLinuxObjectFileLoader : public Process::Loader
|
|
{
|
|
public:
|
|
Process *
|
|
load(ProcessParams *params, ObjectFile *obj_file) override
|
|
{
|
|
auto arch = obj_file->getArch();
|
|
auto opsys = obj_file->getOpSys();
|
|
|
|
if (arch != ObjectFile::Riscv64 && arch != ObjectFile::Riscv32)
|
|
return nullptr;
|
|
|
|
if (opsys == ObjectFile::UnknownOpSys) {
|
|
warn("Unknown operating system; assuming Linux.");
|
|
opsys = ObjectFile::Linux;
|
|
}
|
|
|
|
if (opsys != ObjectFile::Linux)
|
|
return nullptr;
|
|
|
|
if (arch == ObjectFile::Riscv64)
|
|
return new RiscvLinuxProcess64(params, obj_file);
|
|
else
|
|
return new RiscvLinuxProcess32(params, obj_file);
|
|
}
|
|
};
|
|
|
|
RiscvLinuxObjectFileLoader loader;
|
|
|
|
} // anonymous namespace
|
|
|
|
/// Target uname() handler.
|
|
static SyscallReturn
|
|
unameFunc64(SyscallDesc *desc, int callnum, ThreadContext *tc, Addr utsname)
|
|
{
|
|
auto process = tc->getProcessPtr();
|
|
TypedBufferArg<Linux::utsname> name(utsname);
|
|
|
|
strcpy(name->sysname, "Linux");
|
|
strcpy(name->nodename,"sim.gem5.org");
|
|
strcpy(name->release, process->release.c_str());
|
|
strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003");
|
|
strcpy(name->machine, "riscv64");
|
|
|
|
name.copyOut(tc->getVirtProxy());
|
|
return 0;
|
|
}
|
|
|
|
/// Target uname() handler.
|
|
static SyscallReturn
|
|
unameFunc32(SyscallDesc *desc, int callnum, ThreadContext *tc, Addr utsname)
|
|
{
|
|
auto process = tc->getProcessPtr();
|
|
TypedBufferArg<Linux::utsname> name(utsname);
|
|
|
|
strcpy(name->sysname, "Linux");
|
|
strcpy(name->nodename,"sim.gem5.org");
|
|
strcpy(name->release, process->release.c_str());
|
|
strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003");
|
|
strcpy(name->machine, "riscv32");
|
|
|
|
name.copyOut(tc->getVirtProxy());
|
|
return 0;
|
|
}
|
|
|
|
std::map<int, SyscallDescABI<RiscvProcess::SyscallABI>>
|
|
RiscvLinuxProcess64::syscallDescs = {
|
|
{0, { "io_setup" }},
|
|
{1, { "io_destroy" }},
|
|
{2, { "io_submit" }},
|
|
{3, { "io_cancel" }},
|
|
{4, { "io_getevents" }},
|
|
{5, { "setxattr" }},
|
|
{6, { "lsetxattr" }},
|
|
{7, { "fsetxattr" }},
|
|
{8, { "getxattr" }},
|
|
{9, { "lgetxattr" }},
|
|
{10, { "fgetxattr" }},
|
|
{11, { "listxattr" }},
|
|
{12, { "llistxattr" }},
|
|
{13, { "flistxattr" }},
|
|
{14, { "removexattr" }},
|
|
{15, { "lremovexattr" }},
|
|
{16, { "fremovexattr" }},
|
|
{17, { "getcwd", getcwdFunc }},
|
|
{18, { "lookup_dcookie" }},
|
|
{19, { "eventfd2" }},
|
|
{20, { "epoll_create1" }},
|
|
{21, { "epoll_ctl" }},
|
|
{22, { "epoll_pwait" }},
|
|
{23, { "dup", dupFunc }},
|
|
{24, { "dup3" }},
|
|
{25, { "fcntl", fcntl64Func }},
|
|
{26, { "inotify_init1" }},
|
|
{27, { "inotify_add_watch" }},
|
|
{28, { "inotify_rm_watch" }},
|
|
{29, { "ioctl", ioctlFunc<RiscvLinux64> }},
|
|
{30, { "ioprio_get" }},
|
|
{31, { "ioprio_set" }},
|
|
{32, { "flock" }},
|
|
{33, { "mknodat" }},
|
|
{34, { "mkdirat" }},
|
|
{35, { "unlinkat", unlinkatFunc<RiscvLinux64> }},
|
|
{36, { "symlinkat" }},
|
|
{37, { "linkat" }},
|
|
{38, { "renameat", renameatFunc<RiscvLinux64> }},
|
|
{39, { "umount2" }},
|
|
{40, { "mount" }},
|
|
{41, { "pivot_root" }},
|
|
{42, { "nfsservctl" }},
|
|
{43, { "statfs", statfsFunc<RiscvLinux64> }},
|
|
{44, { "fstatfs", fstatfsFunc<RiscvLinux64> }},
|
|
{45, { "truncate", truncateFunc }},
|
|
{46, { "ftruncate", ftruncate64Func }},
|
|
{47, { "fallocate", fallocateFunc }},
|
|
{48, { "faccessat", faccessatFunc<RiscvLinux64> }},
|
|
{49, { "chdir" }},
|
|
{50, { "fchdir" }},
|
|
{51, { "chroot" }},
|
|
{52, { "fchmod", fchmodFunc<RiscvLinux64> }},
|
|
{53, { "fchmodat" }},
|
|
{54, { "fchownat" }},
|
|
{55, { "fchown", fchownFunc }},
|
|
{56, { "openat", openatFunc<RiscvLinux64> }},
|
|
{57, { "close", closeFunc }},
|
|
{58, { "vhangup" }},
|
|
{59, { "pipe2" }},
|
|
{60, { "quotactl" }},
|
|
{61, { "getdents64" }},
|
|
{62, { "lseek", lseekFunc }},
|
|
{63, { "read", readFunc<RiscvLinux64> }},
|
|
{64, { "write", writeFunc<RiscvLinux64> }},
|
|
{66, { "writev", writevFunc<RiscvLinux64> }},
|
|
{67, { "pread64" }},
|
|
{68, { "pwrite64", pwrite64Func<RiscvLinux64> }},
|
|
{69, { "preadv" }},
|
|
{70, { "pwritev" }},
|
|
{71, { "sendfile" }},
|
|
{72, { "pselect6" }},
|
|
{73, { "ppoll" }},
|
|
{74, { "signalfd64" }},
|
|
{75, { "vmsplice" }},
|
|
{76, { "splice" }},
|
|
{77, { "tee" }},
|
|
{78, { "readlinkat", readlinkatFunc<RiscvLinux64> }},
|
|
{79, { "fstatat", fstatat64Func<RiscvLinux64> }},
|
|
{80, { "fstat", fstat64Func<RiscvLinux64> }},
|
|
{81, { "sync" }},
|
|
{82, { "fsync" }},
|
|
{83, { "fdatasync" }},
|
|
{84, { "sync_file_range2" }},
|
|
{85, { "timerfd_create" }},
|
|
{86, { "timerfd_settime" }},
|
|
{87, { "timerfd_gettime" }},
|
|
{88, { "utimensat" }},
|
|
{89, { "acct" }},
|
|
{90, { "capget" }},
|
|
{91, { "capset" }},
|
|
{92, { "personality" }},
|
|
{93, { "exit", exitFunc }},
|
|
{94, { "exit_group", exitGroupFunc }},
|
|
{95, { "waitid" }},
|
|
{96, { "set_tid_address", setTidAddressFunc }},
|
|
{97, { "unshare" }},
|
|
{98, { "futex", futexFunc<RiscvLinux64> }},
|
|
{99, { "set_robust_list", ignoreWarnOnceFunc }},
|
|
{100, { "get_robust_list", ignoreWarnOnceFunc }},
|
|
{101, { "nanosleep", ignoreWarnOnceFunc }},
|
|
{102, { "getitimer" }},
|
|
{103, { "setitimer" }},
|
|
{104, { "kexec_load" }},
|
|
{105, { "init_module" }},
|
|
{106, { "delete_module" }},
|
|
{107, { "timer_create" }},
|
|
{108, { "timer_gettime" }},
|
|
{109, { "timer_getoverrun" }},
|
|
{110, { "timer_settime" }},
|
|
{111, { "timer_delete" }},
|
|
{112, { "clock_settime" }},
|
|
{113, { "clock_gettime", clock_gettimeFunc<RiscvLinux64> }},
|
|
{114, { "clock_getres", clock_getresFunc<RiscvLinux64> }},
|
|
{115, { "clock_nanosleep" }},
|
|
{116, { "syslog" }},
|
|
{117, { "ptrace" }},
|
|
{118, { "sched_setparam" }},
|
|
{119, { "sched_setscheduler" }},
|
|
{120, { "sched_getscheduler" }},
|
|
{121, { "sched_getparam" }},
|
|
{122, { "sched_setaffinity" }},
|
|
{123, { "sched_getaffinity" }},
|
|
{124, { "sched_yield", ignoreWarnOnceFunc }},
|
|
{125, { "sched_get_priority_max" }},
|
|
{126, { "sched_get_priority_min" }},
|
|
{127, { "scheD_rr_get_interval" }},
|
|
{128, { "restart_syscall" }},
|
|
{129, { "kill" }},
|
|
{130, { "tkill" }},
|
|
{131, { "tgkill", tgkillFunc<RiscvLinux64> }},
|
|
{132, { "sigaltstack" }},
|
|
{133, { "rt_sigsuspend", ignoreWarnOnceFunc }},
|
|
{134, { "rt_sigaction", ignoreWarnOnceFunc }},
|
|
{135, { "rt_sigprocmask", ignoreWarnOnceFunc }},
|
|
{136, { "rt_sigpending", ignoreWarnOnceFunc }},
|
|
{137, { "rt_sigtimedwait", ignoreWarnOnceFunc }},
|
|
{138, { "rt_sigqueueinfo", ignoreWarnOnceFunc }},
|
|
{139, { "rt_sigreturn", ignoreWarnOnceFunc }},
|
|
{140, { "setpriority" }},
|
|
{141, { "getpriority" }},
|
|
{142, { "reboot" }},
|
|
{143, { "setregid" }},
|
|
{144, { "setgid" }},
|
|
{145, { "setreuid" }},
|
|
{146, { "setuid", ignoreFunc }},
|
|
{147, { "setresuid" }},
|
|
{148, { "getresuid" }},
|
|
{149, { "getresgid" }},
|
|
{150, { "getresgid" }},
|
|
{151, { "setfsuid" }},
|
|
{152, { "setfsgid" }},
|
|
{153, { "times", timesFunc<RiscvLinux64> }},
|
|
{154, { "setpgid", setpgidFunc }},
|
|
{155, { "getpgid" }},
|
|
{156, { "getsid" }},
|
|
{157, { "setsid" }},
|
|
{158, { "getgroups" }},
|
|
{159, { "setgroups" }},
|
|
{160, { "uname", unameFunc64 }},
|
|
{161, { "sethostname" }},
|
|
{162, { "setdomainname" }},
|
|
{163, { "getrlimit", getrlimitFunc<RiscvLinux64> }},
|
|
{164, { "setrlimit", ignoreFunc }},
|
|
{165, { "getrusage", getrusageFunc<RiscvLinux64> }},
|
|
{166, { "umask", umaskFunc }},
|
|
{167, { "prctl" }},
|
|
{168, { "getcpu" }},
|
|
{169, { "gettimeofday", gettimeofdayFunc<RiscvLinux64> }},
|
|
{170, { "settimeofday" }},
|
|
{171, { "adjtimex" }},
|
|
{172, { "getpid", getpidFunc }},
|
|
{173, { "getppid", getppidFunc }},
|
|
{174, { "getuid", getuidFunc }},
|
|
{175, { "geteuid", geteuidFunc }},
|
|
{176, { "getgid", getgidFunc }},
|
|
{177, { "getegid", getegidFunc }},
|
|
{178, { "gettid", gettidFunc }},
|
|
{179, { "sysinfo", sysinfoFunc<RiscvLinux64> }},
|
|
{180, { "mq_open" }},
|
|
{181, { "mq_unlink" }},
|
|
{182, { "mq_timedsend" }},
|
|
{183, { "mq_timedrecieve" }},
|
|
{184, { "mq_notify" }},
|
|
{185, { "mq_getsetattr" }},
|
|
{186, { "msgget" }},
|
|
{187, { "msgctl" }},
|
|
{188, { "msgrcv" }},
|
|
{189, { "msgsnd" }},
|
|
{190, { "semget" }},
|
|
{191, { "semctl" }},
|
|
{192, { "semtimedop" }},
|
|
{193, { "semop" }},
|
|
{194, { "shmget" }},
|
|
{195, { "shmctl" }},
|
|
{196, { "shmat" }},
|
|
{197, { "shmdt" }},
|
|
{198, { "socket" }},
|
|
{199, { "socketpair" }},
|
|
{200, { "bind" }},
|
|
{201, { "listen" }},
|
|
{202, { "accept" }},
|
|
{203, { "connect" }},
|
|
{204, { "getsockname" }},
|
|
{205, { "getpeername" }},
|
|
{206, { "sendo" }},
|
|
{207, { "recvfrom" }},
|
|
{208, { "setsockopt" }},
|
|
{209, { "getsockopt" }},
|
|
{210, { "shutdown" }},
|
|
{211, { "sendmsg" }},
|
|
{212, { "recvmsg" }},
|
|
{213, { "readahead" }},
|
|
{214, { "brk", brkFunc }},
|
|
{215, { "munmap", munmapFunc }},
|
|
{216, { "mremap", mremapFunc<RiscvLinux64> }},
|
|
{217, { "add_key" }},
|
|
{218, { "request_key" }},
|
|
{219, { "keyctl" }},
|
|
{220, { "clone", cloneBackwardsFunc<RiscvLinux64> }},
|
|
{221, { "execve", execveFunc<RiscvLinux64> }},
|
|
{222, { "mmap", mmapFunc<RiscvLinux64> }},
|
|
{223, { "fadvise64" }},
|
|
{224, { "swapon" }},
|
|
{225, { "swapoff" }},
|
|
{226, { "mprotect", ignoreFunc }},
|
|
{227, { "msync", ignoreFunc }},
|
|
{228, { "mlock", ignoreFunc }},
|
|
{229, { "munlock", ignoreFunc }},
|
|
{230, { "mlockall", ignoreFunc }},
|
|
{231, { "munlockall", ignoreFunc }},
|
|
{232, { "mincore", ignoreFunc }},
|
|
{233, { "madvise", ignoreFunc }},
|
|
{234, { "remap_file_pages" }},
|
|
{235, { "mbind", ignoreFunc }},
|
|
{236, { "get_mempolicy" }},
|
|
{237, { "set_mempolicy" }},
|
|
{238, { "migrate_pages" }},
|
|
{239, { "move_pages" }},
|
|
{240, { "tgsigqueueinfo" }},
|
|
{241, { "perf_event_open" }},
|
|
{242, { "accept4" }},
|
|
{243, { "recvmmsg" }},
|
|
{260, { "wait4" }},
|
|
{261, { "prlimit64", prlimitFunc<RiscvLinux64> }},
|
|
{262, { "fanotify_init" }},
|
|
{263, { "fanotify_mark" }},
|
|
{264, { "name_to_handle_at" }},
|
|
{265, { "open_by_handle_at" }},
|
|
{266, { "clock_adjtime" }},
|
|
{267, { "syncfs" }},
|
|
{268, { "setns" }},
|
|
{269, { "sendmmsg" }},
|
|
{270, { "process_vm_ready" }},
|
|
{271, { "process_vm_writev" }},
|
|
{272, { "kcmp" }},
|
|
{273, { "finit_module" }},
|
|
{274, { "sched_setattr" }},
|
|
{275, { "sched_getattr" }},
|
|
{276, { "renameat2" }},
|
|
{277, { "seccomp" }},
|
|
{278, { "getrandom" }},
|
|
{279, { "memfd_create" }},
|
|
{280, { "bpf" }},
|
|
{281, { "execveat" }},
|
|
{282, { "userfaultid" }},
|
|
{283, { "membarrier" }},
|
|
{284, { "mlock2" }},
|
|
{285, { "copy_file_range" }},
|
|
{286, { "preadv2" }},
|
|
{287, { "pwritev2" }},
|
|
{1024, { "open", openFunc<RiscvLinux64> }},
|
|
{1025, { "link" }},
|
|
{1026, { "unlink", unlinkFunc }},
|
|
{1027, { "mknod" }},
|
|
{1028, { "chmod", chmodFunc<RiscvLinux64> }},
|
|
{1029, { "chown", chownFunc }},
|
|
{1030, { "mkdir", mkdirFunc }},
|
|
{1031, { "rmdir" }},
|
|
{1032, { "lchown" }},
|
|
{1033, { "access", accessFunc }},
|
|
{1034, { "rename", renameFunc }},
|
|
{1035, { "readlink", readlinkFunc }},
|
|
{1036, { "symlink" }},
|
|
{1037, { "utimes", utimesFunc<RiscvLinux64> }},
|
|
{1038, { "stat", stat64Func<RiscvLinux64> }},
|
|
{1039, { "lstat", lstat64Func<RiscvLinux64> }},
|
|
{1040, { "pipe", pipeFunc }},
|
|
{1041, { "dup2", dup2Func }},
|
|
{1042, { "epoll_create" }},
|
|
{1043, { "inotifiy_init" }},
|
|
{1044, { "eventfd" }},
|
|
{1045, { "signalfd" }},
|
|
{1046, { "sendfile" }},
|
|
{1047, { "ftruncate", ftruncate64Func }},
|
|
{1048, { "truncate", truncate64Func }},
|
|
{1049, { "stat", stat64Func<RiscvLinux64> }},
|
|
{1050, { "lstat", lstat64Func<RiscvLinux64> }},
|
|
{1051, { "fstat", fstat64Func<RiscvLinux64> }},
|
|
{1052, { "fcntl", fcntl64Func }},
|
|
{1053, { "fadvise64" }},
|
|
{1054, { "newfstatat" }},
|
|
{1055, { "fstatfs", fstatfsFunc<RiscvLinux64> }},
|
|
{1056, { "statfs", statfsFunc<RiscvLinux64> }},
|
|
{1057, { "lseek", lseekFunc }},
|
|
{1058, { "mmap", mmapFunc<RiscvLinux64> }},
|
|
{1059, { "alarm" }},
|
|
{1060, { "getpgrp" }},
|
|
{1061, { "pause" }},
|
|
{1062, { "time", timeFunc<RiscvLinux64> }},
|
|
{1063, { "utime" }},
|
|
{1064, { "creat" }},
|
|
{1065, { "getdents" }},
|
|
{1066, { "futimesat" }},
|
|
{1067, { "select" }},
|
|
{1068, { "poll" }},
|
|
{1069, { "epoll_wait" }},
|
|
{1070, { "ustat" }},
|
|
{1071, { "vfork" }},
|
|
{1072, { "oldwait4" }},
|
|
{1073, { "recv" }},
|
|
{1074, { "send" }},
|
|
{1075, { "bdflush" }},
|
|
{1076, { "umount" }},
|
|
{1077, { "uselib" }},
|
|
{1078, { "sysctl" }},
|
|
{1079, { "fork" }},
|
|
{2011, { "getmainvars" }}
|
|
};
|
|
|
|
std::map<int, SyscallDescABI<RiscvProcess::SyscallABI>>
|
|
RiscvLinuxProcess32::syscallDescs = {
|
|
{0, { "io_setup" }},
|
|
{1, { "io_destroy" }},
|
|
{2, { "io_submit" }},
|
|
{3, { "io_cancel" }},
|
|
{4, { "io_getevents" }},
|
|
{5, { "setxattr" }},
|
|
{6, { "lsetxattr" }},
|
|
{7, { "fsetxattr" }},
|
|
{8, { "getxattr" }},
|
|
{9, { "lgetxattr" }},
|
|
{10, { "fgetxattr" }},
|
|
{11, { "listxattr" }},
|
|
{12, { "llistxattr" }},
|
|
{13, { "flistxattr" }},
|
|
{14, { "removexattr" }},
|
|
{15, { "lremovexattr" }},
|
|
{16, { "fremovexattr" }},
|
|
{17, { "getcwd", getcwdFunc }},
|
|
{18, { "lookup_dcookie" }},
|
|
{19, { "eventfd2" }},
|
|
{20, { "epoll_create1" }},
|
|
{21, { "epoll_ctl" }},
|
|
{22, { "epoll_pwait" }},
|
|
{23, { "dup", dupFunc }},
|
|
{24, { "dup3" }},
|
|
{25, { "fcntl", fcntlFunc }},
|
|
{26, { "inotify_init1" }},
|
|
{27, { "inotify_add_watch" }},
|
|
{28, { "inotify_rm_watch" }},
|
|
{29, { "ioctl", ioctlFunc<RiscvLinux32> }},
|
|
{30, { "ioprio_get" }},
|
|
{31, { "ioprio_set" }},
|
|
{32, { "flock" }},
|
|
{33, { "mknodat" }},
|
|
{34, { "mkdirat" }},
|
|
{35, { "unlinkat", unlinkatFunc<RiscvLinux32> }},
|
|
{36, { "symlinkat" }},
|
|
{37, { "linkat" }},
|
|
{38, { "renameat", renameatFunc<RiscvLinux32> }},
|
|
{39, { "umount2" }},
|
|
{40, { "mount" }},
|
|
{41, { "pivot_root" }},
|
|
{42, { "nfsservctl" }},
|
|
{43, { "statfs", statfsFunc<RiscvLinux32> }},
|
|
{44, { "fstatfs", fstatfsFunc<RiscvLinux32> }},
|
|
{45, { "truncate", truncateFunc }},
|
|
{46, { "ftruncate", ftruncateFunc }},
|
|
{47, { "fallocate", fallocateFunc }},
|
|
{48, { "faccessat", faccessatFunc<RiscvLinux32> }},
|
|
{49, { "chdir" }},
|
|
{50, { "fchdir" }},
|
|
{51, { "chroot" }},
|
|
{52, { "fchmod", fchmodFunc<RiscvLinux32> }},
|
|
{53, { "fchmodat" }},
|
|
{54, { "fchownat" }},
|
|
{55, { "fchown", fchownFunc }},
|
|
{56, { "openat", openatFunc<RiscvLinux32> }},
|
|
{57, { "close", closeFunc }},
|
|
{58, { "vhangup" }},
|
|
{59, { "pipe2" }},
|
|
{60, { "quotactl" }},
|
|
{61, { "getdents64" }},
|
|
{62, { "lseek", lseekFunc }},
|
|
{63, { "read", readFunc<RiscvLinux32> }},
|
|
{64, { "write", writeFunc<RiscvLinux32> }},
|
|
{66, { "writev", writevFunc<RiscvLinux32> }},
|
|
{67, { "pread64" }},
|
|
{68, { "pwrite64", pwrite64Func<RiscvLinux32> }},
|
|
{69, { "preadv" }},
|
|
{70, { "pwritev" }},
|
|
{71, { "sendfile" }},
|
|
{72, { "pselect6" }},
|
|
{73, { "ppoll" }},
|
|
{74, { "signalfd64" }},
|
|
{75, { "vmsplice" }},
|
|
{76, { "splice" }},
|
|
{77, { "tee" }},
|
|
{78, { "readlinkat", readlinkatFunc<RiscvLinux32> }},
|
|
{79, { "fstatat" }},
|
|
{80, { "fstat", fstatFunc<RiscvLinux32> }},
|
|
{81, { "sync" }},
|
|
{82, { "fsync" }},
|
|
{83, { "fdatasync" }},
|
|
{84, { "sync_file_range2" }},
|
|
{85, { "timerfd_create" }},
|
|
{86, { "timerfd_settime" }},
|
|
{87, { "timerfd_gettime" }},
|
|
{88, { "utimensat" }},
|
|
{89, { "acct" }},
|
|
{90, { "capget" }},
|
|
{91, { "capset" }},
|
|
{92, { "personality" }},
|
|
{93, { "exit", exitFunc }},
|
|
{94, { "exit_group", exitGroupFunc }},
|
|
{95, { "waitid" }},
|
|
{96, { "set_tid_address", setTidAddressFunc }},
|
|
{97, { "unshare" }},
|
|
{98, { "futex", futexFunc<RiscvLinux32> }},
|
|
{99, { "set_robust_list", ignoreWarnOnceFunc }},
|
|
{100, { "get_robust_list", ignoreWarnOnceFunc }},
|
|
{101, { "nanosleep" }},
|
|
{102, { "getitimer" }},
|
|
{103, { "setitimer" }},
|
|
{104, { "kexec_load" }},
|
|
{105, { "init_module" }},
|
|
{106, { "delete_module" }},
|
|
{107, { "timer_create" }},
|
|
{108, { "timer_gettime" }},
|
|
{109, { "timer_getoverrun" }},
|
|
{110, { "timer_settime" }},
|
|
{111, { "timer_delete" }},
|
|
{112, { "clock_settime" }},
|
|
{113, { "clock_gettime", clock_gettimeFunc<RiscvLinux32> }},
|
|
{114, { "clock_getres", clock_getresFunc<RiscvLinux32> }},
|
|
{115, { "clock_nanosleep" }},
|
|
{116, { "syslog" }},
|
|
{117, { "ptrace" }},
|
|
{118, { "sched_setparam" }},
|
|
{119, { "sched_setscheduler" }},
|
|
{120, { "sched_getscheduler" }},
|
|
{121, { "sched_getparam" }},
|
|
{122, { "sched_setaffinity" }},
|
|
{123, { "sched_getaffinity" }},
|
|
{124, { "sched_yield", ignoreWarnOnceFunc }},
|
|
{125, { "sched_get_priority_max" }},
|
|
{126, { "sched_get_priority_min" }},
|
|
{127, { "scheD_rr_get_interval" }},
|
|
{128, { "restart_syscall" }},
|
|
{129, { "kill" }},
|
|
{130, { "tkill" }},
|
|
{131, { "tgkill", tgkillFunc<RiscvLinux32> }},
|
|
{132, { "sigaltstack" }},
|
|
{133, { "rt_sigsuspend", ignoreWarnOnceFunc }},
|
|
{134, { "rt_sigaction", ignoreWarnOnceFunc }},
|
|
{135, { "rt_sigprocmask", ignoreWarnOnceFunc }},
|
|
{136, { "rt_sigpending", ignoreWarnOnceFunc }},
|
|
{137, { "rt_sigtimedwait", ignoreWarnOnceFunc }},
|
|
{138, { "rt_sigqueueinfo", ignoreWarnOnceFunc }},
|
|
{139, { "rt_sigreturn", ignoreWarnOnceFunc }},
|
|
{140, { "setpriority" }},
|
|
{141, { "getpriority" }},
|
|
{142, { "reboot" }},
|
|
{143, { "setregid" }},
|
|
{144, { "setgid" }},
|
|
{145, { "setreuid" }},
|
|
{146, { "setuid", ignoreFunc }},
|
|
{147, { "setresuid" }},
|
|
{148, { "getresuid" }},
|
|
{149, { "getresgid" }},
|
|
{150, { "getresgid" }},
|
|
{151, { "setfsuid" }},
|
|
{152, { "setfsgid" }},
|
|
{153, { "times", timesFunc<RiscvLinux32> }},
|
|
{154, { "setpgid", setpgidFunc }},
|
|
{155, { "getpgid" }},
|
|
{156, { "getsid" }},
|
|
{157, { "setsid" }},
|
|
{158, { "getgroups" }},
|
|
{159, { "setgroups" }},
|
|
{160, { "uname", unameFunc32 }},
|
|
{161, { "sethostname" }},
|
|
{162, { "setdomainname" }},
|
|
{163, { "getrlimit", getrlimitFunc<RiscvLinux32> }},
|
|
{164, { "setrlimit", ignoreFunc }},
|
|
{165, { "getrusage", getrusageFunc<RiscvLinux32> }},
|
|
{166, { "umask", umaskFunc }},
|
|
{167, { "prctl" }},
|
|
{168, { "getcpu" }},
|
|
{169, { "gettimeofday", gettimeofdayFunc<RiscvLinux32> }},
|
|
{170, { "settimeofday" }},
|
|
{171, { "adjtimex" }},
|
|
{172, { "getpid", getpidFunc }},
|
|
{173, { "getppid", getppidFunc }},
|
|
{174, { "getuid", getuidFunc }},
|
|
{175, { "geteuid", geteuidFunc }},
|
|
{176, { "getgid", getgidFunc }},
|
|
{177, { "getegid", getegidFunc }},
|
|
{178, { "gettid", gettidFunc }},
|
|
{179, { "sysinfo", sysinfoFunc<RiscvLinux32> }},
|
|
{180, { "mq_open" }},
|
|
{181, { "mq_unlink" }},
|
|
{182, { "mq_timedsend" }},
|
|
{183, { "mq_timedrecieve" }},
|
|
{184, { "mq_notify" }},
|
|
{185, { "mq_getsetattr" }},
|
|
{186, { "msgget" }},
|
|
{187, { "msgctl" }},
|
|
{188, { "msgrcv" }},
|
|
{189, { "msgsnd" }},
|
|
{190, { "semget" }},
|
|
{191, { "semctl" }},
|
|
{192, { "semtimedop" }},
|
|
{193, { "semop" }},
|
|
{194, { "shmget" }},
|
|
{195, { "shmctl" }},
|
|
{196, { "shmat" }},
|
|
{197, { "shmdt" }},
|
|
{198, { "socket" }},
|
|
{199, { "socketpair" }},
|
|
{200, { "bind" }},
|
|
{201, { "listen" }},
|
|
{202, { "accept" }},
|
|
{203, { "connect" }},
|
|
{204, { "getsockname" }},
|
|
{205, { "getpeername" }},
|
|
{206, { "sendo" }},
|
|
{207, { "recvfrom" }},
|
|
{208, { "setsockopt" }},
|
|
{209, { "getsockopt" }},
|
|
{210, { "shutdown" }},
|
|
{211, { "sendmsg" }},
|
|
{212, { "recvmsg" }},
|
|
{213, { "readahead" }},
|
|
{214, { "brk", brkFunc }},
|
|
{215, { "munmap", munmapFunc }},
|
|
{216, { "mremap", mremapFunc<RiscvLinux32> }},
|
|
{217, { "add_key" }},
|
|
{218, { "request_key" }},
|
|
{219, { "keyctl" }},
|
|
{220, { "clone", cloneBackwardsFunc<RiscvLinux32> }},
|
|
{221, { "execve", execveFunc<RiscvLinux32> }},
|
|
{222, { "mmap", mmapFunc<RiscvLinux32> }},
|
|
{223, { "fadvise64" }},
|
|
{224, { "swapon" }},
|
|
{225, { "swapoff" }},
|
|
{226, { "mprotect", ignoreFunc }},
|
|
{227, { "msync", ignoreFunc }},
|
|
{228, { "mlock", ignoreFunc }},
|
|
{229, { "munlock", ignoreFunc }},
|
|
{230, { "mlockall", ignoreFunc }},
|
|
{231, { "munlockall", ignoreFunc }},
|
|
{232, { "mincore", ignoreFunc }},
|
|
{233, { "madvise", ignoreFunc }},
|
|
{234, { "remap_file_pages" }},
|
|
{235, { "mbind", ignoreFunc }},
|
|
{236, { "get_mempolicy" }},
|
|
{237, { "set_mempolicy" }},
|
|
{238, { "migrate_pages" }},
|
|
{239, { "move_pages" }},
|
|
{240, { "tgsigqueueinfo" }},
|
|
{241, { "perf_event_open" }},
|
|
{242, { "accept4" }},
|
|
{243, { "recvmmsg" }},
|
|
{260, { "wait4" }},
|
|
{261, { "prlimit64", prlimitFunc<RiscvLinux32> }},
|
|
{262, { "fanotify_init" }},
|
|
{263, { "fanotify_mark" }},
|
|
{264, { "name_to_handle_at" }},
|
|
{265, { "open_by_handle_at" }},
|
|
{266, { "clock_adjtime" }},
|
|
{267, { "syncfs" }},
|
|
{268, { "setns" }},
|
|
{269, { "sendmmsg" }},
|
|
{270, { "process_vm_ready" }},
|
|
{271, { "process_vm_writev" }},
|
|
{272, { "kcmp" }},
|
|
{273, { "finit_module" }},
|
|
{274, { "sched_setattr" }},
|
|
{275, { "sched_getattr" }},
|
|
{276, { "renameat2" }},
|
|
{277, { "seccomp" }},
|
|
{278, { "getrandom" }},
|
|
{279, { "memfd_create" }},
|
|
{280, { "bpf" }},
|
|
{281, { "execveat" }},
|
|
{282, { "userfaultid" }},
|
|
{283, { "membarrier" }},
|
|
{284, { "mlock2" }},
|
|
{285, { "copy_file_range" }},
|
|
{286, { "preadv2" }},
|
|
{287, { "pwritev2" }},
|
|
{1024, { "open", openFunc<RiscvLinux32> }},
|
|
{1025, { "link" }},
|
|
{1026, { "unlink", unlinkFunc }},
|
|
{1027, { "mknod" }},
|
|
{1028, { "chmod", chmodFunc<RiscvLinux32> }},
|
|
{1029, { "chown", chownFunc }},
|
|
{1030, { "mkdir", mkdirFunc }},
|
|
{1031, { "rmdir" }},
|
|
{1032, { "lchown" }},
|
|
{1033, { "access", accessFunc }},
|
|
{1034, { "rename", renameFunc }},
|
|
{1035, { "readlink", readlinkFunc }},
|
|
{1036, { "symlink" }},
|
|
{1037, { "utimes", utimesFunc<RiscvLinux32> }},
|
|
{1038, { "stat", statFunc<RiscvLinux32> }},
|
|
{1039, { "lstat", lstatFunc<RiscvLinux32> }},
|
|
{1040, { "pipe", pipeFunc }},
|
|
{1041, { "dup2", dup2Func }},
|
|
{1042, { "epoll_create" }},
|
|
{1043, { "inotifiy_init" }},
|
|
{1044, { "eventfd" }},
|
|
{1045, { "signalfd" }},
|
|
{1046, { "sendfile" }},
|
|
{1047, { "ftruncate", ftruncateFunc }},
|
|
{1048, { "truncate", truncateFunc }},
|
|
{1049, { "stat", statFunc<RiscvLinux32> }},
|
|
{1050, { "lstat", lstatFunc<RiscvLinux32> }},
|
|
{1051, { "fstat", fstatFunc<RiscvLinux32> }},
|
|
{1052, { "fcntl", fcntlFunc }},
|
|
{1053, { "fadvise64" }},
|
|
{1054, { "newfstatat" }},
|
|
{1055, { "fstatfs", fstatfsFunc<RiscvLinux32> }},
|
|
{1056, { "statfs", statfsFunc<RiscvLinux32> }},
|
|
{1057, { "lseek", lseekFunc }},
|
|
{1058, { "mmap", mmapFunc<RiscvLinux32> }},
|
|
{1059, { "alarm" }},
|
|
{1060, { "getpgrp" }},
|
|
{1061, { "pause" }},
|
|
{1062, { "time", timeFunc<RiscvLinux32> }},
|
|
{1063, { "utime" }},
|
|
{1064, { "creat" }},
|
|
{1065, { "getdents" }},
|
|
{1066, { "futimesat" }},
|
|
{1067, { "select" }},
|
|
{1068, { "poll" }},
|
|
{1069, { "epoll_wait" }},
|
|
{1070, { "ustat" }},
|
|
{1071, { "vfork" }},
|
|
{1072, { "oldwait4" }},
|
|
{1073, { "recv" }},
|
|
{1074, { "send" }},
|
|
{1075, { "bdflush" }},
|
|
{1076, { "umount" }},
|
|
{1077, { "uselib" }},
|
|
{1078, { "sysctl" }},
|
|
{1079, { "fork" }},
|
|
{2011, { "getmainvars" }}
|
|
};
|
|
|
|
RiscvLinuxProcess64::RiscvLinuxProcess64(ProcessParams * params,
|
|
ObjectFile *objFile) : RiscvProcess64(params, objFile)
|
|
{}
|
|
|
|
SyscallDesc*
|
|
RiscvLinuxProcess64::getDesc(int callnum)
|
|
{
|
|
return syscallDescs.find(callnum) != syscallDescs.end() ?
|
|
&syscallDescs.at(callnum) : nullptr;
|
|
}
|
|
|
|
void
|
|
RiscvLinuxProcess64::syscall(ThreadContext *tc, Fault *fault)
|
|
{
|
|
doSyscall(tc->readIntReg(SyscallNumReg), tc, fault);
|
|
}
|
|
|
|
RiscvLinuxProcess32::RiscvLinuxProcess32(ProcessParams * params,
|
|
ObjectFile *objFile) : RiscvProcess32(params, objFile)
|
|
{}
|
|
|
|
SyscallDesc*
|
|
RiscvLinuxProcess32::getDesc(int callnum)
|
|
{
|
|
return syscallDescs.find(callnum) != syscallDescs.end() ?
|
|
&syscallDescs.at(callnum) : nullptr;
|
|
}
|
|
|
|
void
|
|
RiscvLinuxProcess32::syscall(ThreadContext *tc, Fault *fault)
|
|
{
|
|
doSyscall(tc->readIntReg(SyscallNumReg), tc, fault);
|
|
}
|