process.cc revision 12414
17150Sgblack@eecs.umich.edu/*
27150Sgblack@eecs.umich.edu * Copyright (c) 2005 The Regents of The University of Michigan
37150Sgblack@eecs.umich.edu * Copyright (c) 2007 MIPS Technologies, Inc.
47150Sgblack@eecs.umich.edu * Copyright (c) 2016 The University of Virginia
57150Sgblack@eecs.umich.edu * All rights reserved.
67150Sgblack@eecs.umich.edu *
77150Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without
87150Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are
97150Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright
107150Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer;
117150Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright
127150Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the
137150Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution;
147150Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its
157150Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from
167150Sgblack@eecs.umich.edu * this software without specific prior written permission.
177150Sgblack@eecs.umich.edu *
187150Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
197150Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
207150Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
217150Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
227150Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
237150Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
247150Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
257150Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
267150Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
277150Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
287150Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
297150Sgblack@eecs.umich.edu *
307150Sgblack@eecs.umich.edu * Authors: Gabe Black
317150Sgblack@eecs.umich.edu *          Korey Sewell
327150Sgblack@eecs.umich.edu *          Alec Roelke
337150Sgblack@eecs.umich.edu */
347150Sgblack@eecs.umich.edu
357150Sgblack@eecs.umich.edu#include "arch/riscv/linux/process.hh"
367150Sgblack@eecs.umich.edu
377150Sgblack@eecs.umich.edu#include <map>
387150Sgblack@eecs.umich.edu
397150Sgblack@eecs.umich.edu#include "arch/riscv/isa_traits.hh"
407150Sgblack@eecs.umich.edu#include "arch/riscv/linux/linux.hh"
417150Sgblack@eecs.umich.edu#include "base/trace.hh"
427150Sgblack@eecs.umich.edu#include "cpu/thread_context.hh"
437150Sgblack@eecs.umich.edu#include "debug/SyscallVerbose.hh"
447150Sgblack@eecs.umich.edu#include "kern/linux/linux.hh"
457150Sgblack@eecs.umich.edu#include "sim/eventq.hh"
467150Sgblack@eecs.umich.edu#include "sim/process.hh"
477150Sgblack@eecs.umich.edu#include "sim/syscall_desc.hh"
487150Sgblack@eecs.umich.edu#include "sim/syscall_emul.hh"
497150Sgblack@eecs.umich.edu#include "sim/system.hh"
507150Sgblack@eecs.umich.edu
5110184SCurtis.Dunham@arm.comusing namespace std;
527150Sgblack@eecs.umich.eduusing namespace RiscvISA;
537150Sgblack@eecs.umich.edu
547150Sgblack@eecs.umich.edu/// Target uname() handler.
557150Sgblack@eecs.umich.edustatic SyscallReturn
567848SAli.Saidi@ARM.comunameFunc(SyscallDesc *desc, int callnum, Process *process,
577848SAli.Saidi@ARM.com          ThreadContext *tc)
587848SAli.Saidi@ARM.com{
597848SAli.Saidi@ARM.com    int index = 0;
608146SAli.Saidi@ARM.com    TypedBufferArg<Linux::utsname> name(process->getSyscallArg(tc, index));
618146SAli.Saidi@ARM.com
628146SAli.Saidi@ARM.com    strcpy(name->sysname, "Linux");
637848SAli.Saidi@ARM.com    strcpy(name->nodename,"sim.gem5.org");
648146SAli.Saidi@ARM.com    strcpy(name->release, "3.0.0");
657150Sgblack@eecs.umich.edu    strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003");
667150Sgblack@eecs.umich.edu    strcpy(name->machine, "riscv");
677150Sgblack@eecs.umich.edu
687150Sgblack@eecs.umich.edu    name.copyOut(tc->getMemProxy());
697150Sgblack@eecs.umich.edu    return 0;
707150Sgblack@eecs.umich.edu}
717150Sgblack@eecs.umich.edu
727150Sgblack@eecs.umich.edustd::map<int, SyscallDesc> RiscvLinuxProcess::syscallDescs = {
737150Sgblack@eecs.umich.edu    {0,    SyscallDesc("io_setup")},
747150Sgblack@eecs.umich.edu    {1,    SyscallDesc("io_destroy")},
757150Sgblack@eecs.umich.edu    {2,    SyscallDesc("io_submit")},
768146SAli.Saidi@ARM.com    {3,    SyscallDesc("io_cancel")},
779552Sandreas.hansson@arm.com    {4,    SyscallDesc("io_getevents")},
789552Sandreas.hansson@arm.com    {5,    SyscallDesc("setxattr")},
799552Sandreas.hansson@arm.com    {6,    SyscallDesc("lsetxattr")},
807150Sgblack@eecs.umich.edu    {7,    SyscallDesc("fsetxattr")},
817150Sgblack@eecs.umich.edu    {8,    SyscallDesc("getxattr")},
827150Sgblack@eecs.umich.edu    {9,    SyscallDesc("lgetxattr")},
837150Sgblack@eecs.umich.edu    {10,   SyscallDesc("fgetxattr")},
8410184SCurtis.Dunham@arm.com    {11,   SyscallDesc("listxattr")},
857150Sgblack@eecs.umich.edu    {12,   SyscallDesc("llistxattr")},
867150Sgblack@eecs.umich.edu    {13,   SyscallDesc("flistxattr")},
877150Sgblack@eecs.umich.edu    {14,   SyscallDesc("removexattr")},
887150Sgblack@eecs.umich.edu    {15,   SyscallDesc("lremovexattr")},
897150Sgblack@eecs.umich.edu    {16,   SyscallDesc("fremovexattr")},
907150Sgblack@eecs.umich.edu    {17,   SyscallDesc("getcwd", getcwdFunc)},
917848SAli.Saidi@ARM.com    {18,   SyscallDesc("lookup_dcookie")},
927848SAli.Saidi@ARM.com    {19,   SyscallDesc("eventfd2")},
937848SAli.Saidi@ARM.com    {20,   SyscallDesc("epoll_create1")},
947848SAli.Saidi@ARM.com    {21,   SyscallDesc("epoll_ctl")},
958146SAli.Saidi@ARM.com    {22,   SyscallDesc("epoll_pwait")},
968146SAli.Saidi@ARM.com    {23,   SyscallDesc("dup", dupFunc)},
978146SAli.Saidi@ARM.com    {24,   SyscallDesc("dup3")},
987848SAli.Saidi@ARM.com    {25,   SyscallDesc("fcntl", fcntl64Func)},
997150Sgblack@eecs.umich.edu    {26,   SyscallDesc("inotify_init1")},
1007150Sgblack@eecs.umich.edu    {27,   SyscallDesc("inotify_add_watch")},
1017150Sgblack@eecs.umich.edu    {28,   SyscallDesc("inotify_rm_watch")},
1027150Sgblack@eecs.umich.edu    {29,   SyscallDesc("ioctl", ioctlFunc<RiscvLinux>)},
1037150Sgblack@eecs.umich.edu    {30,   SyscallDesc("ioprio_get")},
1047150Sgblack@eecs.umich.edu    {31,   SyscallDesc("ioprio_set")},
1057150Sgblack@eecs.umich.edu    {32,   SyscallDesc("flock")},
1067150Sgblack@eecs.umich.edu    {33,   SyscallDesc("mknodat")},
1077150Sgblack@eecs.umich.edu    {34,   SyscallDesc("mkdirat")},
1087150Sgblack@eecs.umich.edu    {35,   SyscallDesc("unlinkat", unlinkatFunc<RiscvLinux>)},
1097150Sgblack@eecs.umich.edu    {36,   SyscallDesc("symlinkat")},
1107150Sgblack@eecs.umich.edu    {37,   SyscallDesc("linkat")},
1117150Sgblack@eecs.umich.edu    {38,   SyscallDesc("renameat", renameatFunc<RiscvLinux>)},
1127150Sgblack@eecs.umich.edu    {39,   SyscallDesc("umount2")},
11310184SCurtis.Dunham@arm.com    {40,   SyscallDesc("mount")},
1147150Sgblack@eecs.umich.edu    {41,   SyscallDesc("pivot_root")},
1157150Sgblack@eecs.umich.edu    {42,   SyscallDesc("nfsservctl")},
1167150Sgblack@eecs.umich.edu    {43,   SyscallDesc("statfs", statfsFunc<RiscvLinux>)},
1177150Sgblack@eecs.umich.edu    {44,   SyscallDesc("fstatfs", fstatfsFunc<RiscvLinux>)},
1187848SAli.Saidi@ARM.com    {45,   SyscallDesc("truncate", truncateFunc)},
1197848SAli.Saidi@ARM.com    {46,   SyscallDesc("ftruncate", ftruncate64Func)},
1207848SAli.Saidi@ARM.com    {47,   SyscallDesc("fallocate", fallocateFunc)},
1217848SAli.Saidi@ARM.com    {48,   SyscallDesc("faccessat", faccessatFunc<RiscvLinux>)},
1228146SAli.Saidi@ARM.com    {49,   SyscallDesc("chdir")},
1238146SAli.Saidi@ARM.com    {50,   SyscallDesc("fchdir")},
1248146SAli.Saidi@ARM.com    {51,   SyscallDesc("chroot")},
1257848SAli.Saidi@ARM.com    {52,   SyscallDesc("fchmod", fchmodFunc<RiscvLinux>)},
1268203SAli.Saidi@ARM.com    {53,   SyscallDesc("fchmodat")},
1278203SAli.Saidi@ARM.com    {54,   SyscallDesc("fchownat")},
1287150Sgblack@eecs.umich.edu    {55,   SyscallDesc("fchown", fchownFunc)},
1297150Sgblack@eecs.umich.edu    {56,   SyscallDesc("openat", openatFunc<RiscvLinux>)},
1307150Sgblack@eecs.umich.edu    {57,   SyscallDesc("close", closeFunc)},
1317150Sgblack@eecs.umich.edu    {58,   SyscallDesc("vhangup")},
1327150Sgblack@eecs.umich.edu    {59,   SyscallDesc("pipe2")},
1337150Sgblack@eecs.umich.edu    {60,   SyscallDesc("quotactl")},
1347150Sgblack@eecs.umich.edu    {61,   SyscallDesc("getdents64")},
1357150Sgblack@eecs.umich.edu    {62,   SyscallDesc("lseek", lseekFunc)},
1367150Sgblack@eecs.umich.edu    {63,   SyscallDesc("read", readFunc)},
1377150Sgblack@eecs.umich.edu    {64,   SyscallDesc("write", writeFunc)},
1387150Sgblack@eecs.umich.edu    {66,   SyscallDesc("writev", writevFunc<RiscvLinux>)},
1397150Sgblack@eecs.umich.edu    {67,   SyscallDesc("pread64")},
1407150Sgblack@eecs.umich.edu    {68,   SyscallDesc("pwrite64", pwrite64Func<RiscvLinux>)},
1417150Sgblack@eecs.umich.edu    {69,   SyscallDesc("preadv")},
1427150Sgblack@eecs.umich.edu    {70,   SyscallDesc("pwritev")},
14310184SCurtis.Dunham@arm.com    {71,   SyscallDesc("sendfile")},
1447150Sgblack@eecs.umich.edu    {72,   SyscallDesc("pselect6")},
1457150Sgblack@eecs.umich.edu    {73,   SyscallDesc("ppoll")},
1467150Sgblack@eecs.umich.edu    {74,   SyscallDesc("signalfd64")},
1477150Sgblack@eecs.umich.edu    {75,   SyscallDesc("vmsplice")},
1487150Sgblack@eecs.umich.edu    {76,   SyscallDesc("splice")},
1497150Sgblack@eecs.umich.edu    {77,   SyscallDesc("tee")},
1507848SAli.Saidi@ARM.com    {78,   SyscallDesc("readlinkat", readlinkatFunc<RiscvLinux>)},
1517848SAli.Saidi@ARM.com    {79,   SyscallDesc("fstatat", fstatat64Func<RiscvLinux>)},
1527848SAli.Saidi@ARM.com    {80,   SyscallDesc("fstat", fstat64Func<RiscvLinux>)},
1537848SAli.Saidi@ARM.com    {81,   SyscallDesc("sync")},
1548146SAli.Saidi@ARM.com    {82,   SyscallDesc("fsync")},
1558146SAli.Saidi@ARM.com    {83,   SyscallDesc("fdatasync")},
1568146SAli.Saidi@ARM.com    {84,   SyscallDesc("sync_file_range2")},
1577848SAli.Saidi@ARM.com    {85,   SyscallDesc("timerfd_create")},
1588203SAli.Saidi@ARM.com    {86,   SyscallDesc("timerfd_settime")},
1598203SAli.Saidi@ARM.com    {87,   SyscallDesc("timerfd_gettime")},
1607150Sgblack@eecs.umich.edu    {88,   SyscallDesc("utimensat")},
1617150Sgblack@eecs.umich.edu    {89,   SyscallDesc("acct")},
1627150Sgblack@eecs.umich.edu    {90,   SyscallDesc("capget")},
1637150Sgblack@eecs.umich.edu    {91,   SyscallDesc("capset")},
1647150Sgblack@eecs.umich.edu    {92,   SyscallDesc("personality")},
1657150Sgblack@eecs.umich.edu    {93,   SyscallDesc("exit", exitFunc)},
1667150Sgblack@eecs.umich.edu    {94,   SyscallDesc("exit_group", exitGroupFunc)},
1677150Sgblack@eecs.umich.edu    {95,   SyscallDesc("waitid")},
1687150Sgblack@eecs.umich.edu    {96,   SyscallDesc("set_tid_address", setTidAddressFunc)},
1697150Sgblack@eecs.umich.edu    {97,   SyscallDesc("unshare")},
1707150Sgblack@eecs.umich.edu    {98,   SyscallDesc("futex", futexFunc<RiscvLinux>)},
1717150Sgblack@eecs.umich.edu    {99,   SyscallDesc("set_robust_list")},
1727150Sgblack@eecs.umich.edu    {100,  SyscallDesc("get_robust_list")},
1737150Sgblack@eecs.umich.edu    {101,  SyscallDesc("nanosleep")},
1747150Sgblack@eecs.umich.edu    {102,  SyscallDesc("getitimer")},
1757150Sgblack@eecs.umich.edu    {103,  SyscallDesc("setitimer")},
1767150Sgblack@eecs.umich.edu    {104,  SyscallDesc("kexec_load")},
1777150Sgblack@eecs.umich.edu    {105,  SyscallDesc("init_module")},
1787150Sgblack@eecs.umich.edu    {106,  SyscallDesc("delete_module")},
1797150Sgblack@eecs.umich.edu    {107,  SyscallDesc("timer_create")},
1807150Sgblack@eecs.umich.edu    {108,  SyscallDesc("timer_gettime")},
1817150Sgblack@eecs.umich.edu    {109,  SyscallDesc("timer_getoverrun")},
1827150Sgblack@eecs.umich.edu    {110,  SyscallDesc("timer_settime")},
1837150Sgblack@eecs.umich.edu    {111,  SyscallDesc("timer_delete")},
1847150Sgblack@eecs.umich.edu    {112,  SyscallDesc("clock_settime")},
1857150Sgblack@eecs.umich.edu    {113,  SyscallDesc("clock_gettime", clock_gettimeFunc<RiscvLinux>)},
1867150Sgblack@eecs.umich.edu    {114,  SyscallDesc("clock_getres", clock_getresFunc<RiscvLinux>)},
1877150Sgblack@eecs.umich.edu    {115,  SyscallDesc("clock_nanosleep")},
1887150Sgblack@eecs.umich.edu    {116,  SyscallDesc("syslog")},
1897150Sgblack@eecs.umich.edu    {117,  SyscallDesc("ptrace")},
19010184SCurtis.Dunham@arm.com    {118,  SyscallDesc("sched_setparam")},
1917150Sgblack@eecs.umich.edu    {119,  SyscallDesc("sched_setscheduler")},
1927150Sgblack@eecs.umich.edu    {120,  SyscallDesc("sched_getscheduler")},
1937150Sgblack@eecs.umich.edu    {121,  SyscallDesc("sched_getparam")},
1947150Sgblack@eecs.umich.edu    {122,  SyscallDesc("sched_setaffinity")},
1957150Sgblack@eecs.umich.edu    {123,  SyscallDesc("sched_getaffinity")},
1967848SAli.Saidi@ARM.com    {124,  SyscallDesc("sched_yield")},
1977848SAli.Saidi@ARM.com    {125,  SyscallDesc("sched_get_priority_max")},
1987848SAli.Saidi@ARM.com    {126,  SyscallDesc("sched_get_priority_min")},
1997848SAli.Saidi@ARM.com    {127,  SyscallDesc("scheD_rr_get_interval")},
2008146SAli.Saidi@ARM.com    {128,  SyscallDesc("restart_syscall")},
2018146SAli.Saidi@ARM.com    {129,  SyscallDesc("kill")},
2028146SAli.Saidi@ARM.com    {130,  SyscallDesc("tkill")},
2037848SAli.Saidi@ARM.com    {131,  SyscallDesc("tgkill", tgkillFunc<RiscvLinux>)},
2047150Sgblack@eecs.umich.edu    {132,  SyscallDesc("sigaltstack")},
2057150Sgblack@eecs.umich.edu    {133,  SyscallDesc("rt_sigsuspend", ignoreFunc, SyscallDesc::WarnOnce)},
2067150Sgblack@eecs.umich.edu    {134,  SyscallDesc("rt_sigaction", ignoreFunc, SyscallDesc::WarnOnce)},
2077150Sgblack@eecs.umich.edu    {135,  SyscallDesc("rt_sigprocmask", ignoreFunc, SyscallDesc::WarnOnce)},
2087150Sgblack@eecs.umich.edu    {136,  SyscallDesc("rt_sigpending", ignoreFunc, SyscallDesc::WarnOnce)},
2097150Sgblack@eecs.umich.edu    {137,  SyscallDesc("rt_sigtimedwait", ignoreFunc,SyscallDesc::WarnOnce)},
2107150Sgblack@eecs.umich.edu    {138,  SyscallDesc("rt_sigqueueinfo", ignoreFunc,SyscallDesc::WarnOnce)},
2117150Sgblack@eecs.umich.edu    {139,  SyscallDesc("rt_sigreturn", ignoreFunc, SyscallDesc::WarnOnce)},
2127150Sgblack@eecs.umich.edu    {140,  SyscallDesc("setpriority")},
2137150Sgblack@eecs.umich.edu    {141,  SyscallDesc("getpriority")},
2147150Sgblack@eecs.umich.edu    {142,  SyscallDesc("reboot")},
2157150Sgblack@eecs.umich.edu    {143,  SyscallDesc("setregid")},
2167150Sgblack@eecs.umich.edu    {144,  SyscallDesc("setgid")},
2177150Sgblack@eecs.umich.edu    {145,  SyscallDesc("setreuid")},
2188892Sb.grayson@samsung.com    {146,  SyscallDesc("setuid", setuidFunc)},
2198892Sb.grayson@samsung.com    {147,  SyscallDesc("setresuid")},
2207150Sgblack@eecs.umich.edu    {148,  SyscallDesc("getresuid")},
22110184SCurtis.Dunham@arm.com    {149,  SyscallDesc("getresgid")},
2227150Sgblack@eecs.umich.edu    {150,  SyscallDesc("getresgid")},
2237150Sgblack@eecs.umich.edu    {151,  SyscallDesc("setfsuid")},
2247150Sgblack@eecs.umich.edu    {152,  SyscallDesc("setfsgid")},
2257150Sgblack@eecs.umich.edu    {153,  SyscallDesc("times", timesFunc<RiscvLinux>)},
2267150Sgblack@eecs.umich.edu    {154,  SyscallDesc("setpgid", setpgidFunc)},
2278892Sb.grayson@samsung.com    {155,  SyscallDesc("getpgid")},
2287150Sgblack@eecs.umich.edu    {156,  SyscallDesc("getsid")},
2297150Sgblack@eecs.umich.edu    {157,  SyscallDesc("setsid")},
2308146SAli.Saidi@ARM.com    {158,  SyscallDesc("getgroups")},
2318146SAli.Saidi@ARM.com    {159,  SyscallDesc("setgroups")},
2328146SAli.Saidi@ARM.com    {160,  SyscallDesc("uname", unameFunc)},
2338146SAli.Saidi@ARM.com    {161,  SyscallDesc("sethostname")},
2348146SAli.Saidi@ARM.com    {162,  SyscallDesc("setdomainname")},
2358146SAli.Saidi@ARM.com    {163,  SyscallDesc("getrlimit", getrlimitFunc<RiscvLinux>)},
2368146SAli.Saidi@ARM.com    {164,  SyscallDesc("setrlimit", ignoreFunc)},
2378146SAli.Saidi@ARM.com    {165,  SyscallDesc("getrusage", getrusageFunc<RiscvLinux>)},
2388146SAli.Saidi@ARM.com    {166,  SyscallDesc("umask", umaskFunc)},
2398146SAli.Saidi@ARM.com    {167,  SyscallDesc("prctl")},
2408146SAli.Saidi@ARM.com    {168,  SyscallDesc("getcpu")},
2418146SAli.Saidi@ARM.com    {169,  SyscallDesc("gettimeofday", gettimeofdayFunc<RiscvLinux>)},
2428146SAli.Saidi@ARM.com    {170,  SyscallDesc("settimeofday")},
2438146SAli.Saidi@ARM.com    {171,  SyscallDesc("adjtimex")},
2448146SAli.Saidi@ARM.com    {172,  SyscallDesc("getpid", getpidFunc)},
2458146SAli.Saidi@ARM.com    {173,  SyscallDesc("getppid", getppidFunc)},
2468146SAli.Saidi@ARM.com    {174,  SyscallDesc("getuid", getuidFunc)},
247    {175,  SyscallDesc("geteuid", geteuidFunc)},
248    {176,  SyscallDesc("getgid", getgidFunc)},
249    {177,  SyscallDesc("getegid", getegidFunc)},
250    {178,  SyscallDesc("gettid", gettidFunc)},
251    {179,  SyscallDesc("sysinfo", sysinfoFunc<RiscvLinux>)},
252    {180,  SyscallDesc("mq_open")},
253    {181,  SyscallDesc("mq_unlink")},
254    {182,  SyscallDesc("mq_timedsend")},
255    {183,  SyscallDesc("mq_timedrecieve")},
256    {184,  SyscallDesc("mq_notify")},
257    {185,  SyscallDesc("mq_getsetattr")},
258    {186,  SyscallDesc("msgget")},
259    {187,  SyscallDesc("msgctl")},
260    {188,  SyscallDesc("msgrcv")},
261    {189,  SyscallDesc("msgsnd")},
262    {190,  SyscallDesc("semget")},
263    {191,  SyscallDesc("semctl")},
264    {192,  SyscallDesc("semtimedop")},
265    {193,  SyscallDesc("semop")},
266    {194,  SyscallDesc("shmget")},
267    {195,  SyscallDesc("shmctl")},
268    {196,  SyscallDesc("shmat")},
269    {197,  SyscallDesc("shmdt")},
270    {198,  SyscallDesc("socket")},
271    {199,  SyscallDesc("socketpair")},
272    {200,  SyscallDesc("bind")},
273    {201,  SyscallDesc("listen")},
274    {202,  SyscallDesc("accept")},
275    {203,  SyscallDesc("connect")},
276    {204,  SyscallDesc("getsockname")},
277    {205,  SyscallDesc("getpeername")},
278    {206,  SyscallDesc("sendo")},
279    {207,  SyscallDesc("recvfrom")},
280    {208,  SyscallDesc("setsockopt")},
281    {209,  SyscallDesc("getsockopt")},
282    {210,  SyscallDesc("shutdown")},
283    {211,  SyscallDesc("sendmsg")},
284    {212,  SyscallDesc("recvmsg")},
285    {213,  SyscallDesc("readahead")},
286    {214,  SyscallDesc("brk", brkFunc)},
287    {215,  SyscallDesc("munmap", munmapFunc)},
288    {216,  SyscallDesc("mremap", mremapFunc<RiscvLinux>)},
289    {217,  SyscallDesc("add_key")},
290    {218,  SyscallDesc("request_key")},
291    {219,  SyscallDesc("keyctl")},
292    {220,  SyscallDesc("clone", cloneFunc<RiscvLinux>)},
293    {221,  SyscallDesc("execve", execveFunc<RiscvLinux>)},
294    {222,  SyscallDesc("mmap", mmapFunc<RiscvLinux>)},
295    {223,  SyscallDesc("fadvise64")},
296    {224,  SyscallDesc("swapon")},
297    {225,  SyscallDesc("swapoff")},
298    {226,  SyscallDesc("mprotect", ignoreFunc)},
299    {227,  SyscallDesc("msync", ignoreFunc)},
300    {228,  SyscallDesc("mlock", ignoreFunc)},
301    {229,  SyscallDesc("munlock", ignoreFunc)},
302    {230,  SyscallDesc("mlockall", ignoreFunc)},
303    {231,  SyscallDesc("munlockall", ignoreFunc)},
304    {232,  SyscallDesc("mincore", ignoreFunc)},
305    {233,  SyscallDesc("madvise", ignoreFunc)},
306    {234,  SyscallDesc("remap_file_pages")},
307    {235,  SyscallDesc("mbind", ignoreFunc)},
308    {236,  SyscallDesc("get_mempolicy")},
309    {237,  SyscallDesc("set_mempolicy")},
310    {238,  SyscallDesc("migrate_pages")},
311    {239,  SyscallDesc("move_pages")},
312    {240,  SyscallDesc("tgsigqueueinfo")},
313    {241,  SyscallDesc("perf_event_open")},
314    {242,  SyscallDesc("accept4")},
315    {243,  SyscallDesc("recvmmsg")},
316    {260,  SyscallDesc("wait4")},
317    {261,  SyscallDesc("prlimit64", prlimitFunc<RiscvLinux>)},
318    {262,  SyscallDesc("fanotify_init")},
319    {263,  SyscallDesc("fanotify_mark")},
320    {264,  SyscallDesc("name_to_handle_at")},
321    {265,  SyscallDesc("open_by_handle_at")},
322    {266,  SyscallDesc("clock_adjtime")},
323    {267,  SyscallDesc("syncfs")},
324    {268,  SyscallDesc("setns")},
325    {269,  SyscallDesc("sendmmsg")},
326    {270,  SyscallDesc("process_vm_ready")},
327    {271,  SyscallDesc("process_vm_writev")},
328    {272,  SyscallDesc("kcmp")},
329    {273,  SyscallDesc("finit_module")},
330    {274,  SyscallDesc("sched_setattr")},
331    {275,  SyscallDesc("sched_getattr")},
332    {276,  SyscallDesc("renameat2")},
333    {277,  SyscallDesc("seccomp")},
334    {278,  SyscallDesc("getrandom")},
335    {279,  SyscallDesc("memfd_create")},
336    {280,  SyscallDesc("bpf")},
337    {281,  SyscallDesc("execveat")},
338    {282,  SyscallDesc("userfaultid")},
339    {283,  SyscallDesc("membarrier")},
340    {284,  SyscallDesc("mlock2")},
341    {285,  SyscallDesc("copy_file_range")},
342    {286,  SyscallDesc("preadv2")},
343    {287,  SyscallDesc("pwritev2")},
344    {1024, SyscallDesc("open", openFunc<RiscvLinux>)},
345    {1025, SyscallDesc("link")},
346    {1026, SyscallDesc("unlink", unlinkFunc)},
347    {1027, SyscallDesc("mknod")},
348    {1028, SyscallDesc("chmod", chmodFunc<RiscvLinux>)},
349    {1029, SyscallDesc("chown", chownFunc)},
350    {1030, SyscallDesc("mkdir", mkdirFunc)},
351    {1031, SyscallDesc("rmdir")},
352    {1032, SyscallDesc("lchown")},
353    {1033, SyscallDesc("access", accessFunc)},
354    {1034, SyscallDesc("rename", renameFunc)},
355    {1035, SyscallDesc("readlink", readlinkFunc)},
356    {1036, SyscallDesc("symlink")},
357    {1037, SyscallDesc("utimes", utimesFunc<RiscvLinux>)},
358    {1038, SyscallDesc("stat", stat64Func<RiscvLinux>)},
359    {1039, SyscallDesc("lstat", lstat64Func<RiscvLinux>)},
360    {1040, SyscallDesc("pipe", pipeFunc)},
361    {1041, SyscallDesc("dup2", dup2Func)},
362    {1042, SyscallDesc("epoll_create")},
363    {1043, SyscallDesc("inotifiy_init")},
364    {1044, SyscallDesc("eventfd")},
365    {1045, SyscallDesc("signalfd")},
366    {1046, SyscallDesc("sendfile")},
367    {1047, SyscallDesc("ftruncate", ftruncate64Func)},
368    {1048, SyscallDesc("truncate", truncate64Func)},
369    {1049, SyscallDesc("stat", stat64Func<RiscvLinux>)},
370    {1050, SyscallDesc("lstat", lstat64Func<RiscvLinux>)},
371    {1051, SyscallDesc("fstat", fstat64Func<RiscvLinux>)},
372    {1052, SyscallDesc("fcntl", fcntl64Func)},
373    {1053, SyscallDesc("fadvise64")},
374    {1054, SyscallDesc("newfstatat")},
375    {1055, SyscallDesc("fstatfs", fstatfsFunc<RiscvLinux>)},
376    {1056, SyscallDesc("statfs", statfsFunc<RiscvLinux>)},
377    {1057, SyscallDesc("lseek", lseekFunc)},
378    {1058, SyscallDesc("mmap", mmapFunc<RiscvLinux>)},
379    {1059, SyscallDesc("alarm")},
380    {1060, SyscallDesc("getpgrp")},
381    {1061, SyscallDesc("pause")},
382    {1062, SyscallDesc("time", timeFunc<RiscvLinux>)},
383    {1063, SyscallDesc("utime")},
384    {1064, SyscallDesc("creat")},
385    {1065, SyscallDesc("getdents")},
386    {1066, SyscallDesc("futimesat")},
387    {1067, SyscallDesc("select")},
388    {1068, SyscallDesc("poll")},
389    {1069, SyscallDesc("epoll_wait")},
390    {1070, SyscallDesc("ustat")},
391    {1071, SyscallDesc("vfork")},
392    {1072, SyscallDesc("oldwait4")},
393    {1073, SyscallDesc("recv")},
394    {1074, SyscallDesc("send")},
395    {1075, SyscallDesc("bdflush")},
396    {1076, SyscallDesc("umount")},
397    {1077, SyscallDesc("uselib")},
398    {1078, SyscallDesc("sysctl")},
399    {1079, SyscallDesc("fork")},
400    {2011, SyscallDesc("getmainvars")}
401};
402
403RiscvLinuxProcess::RiscvLinuxProcess(ProcessParams * params,
404    ObjectFile *objFile) : RiscvProcess(params, objFile)
405{}
406
407SyscallDesc*
408RiscvLinuxProcess::getDesc(int callnum)
409{
410    return syscallDescs.find(callnum) != syscallDescs.end() ?
411        &syscallDescs.at(callnum) : nullptr;
412}
413