process.cc revision 13987
16313Sgblack@eecs.umich.edu/*
26313Sgblack@eecs.umich.edu * Copyright (c) 2005 The Regents of The University of Michigan
36313Sgblack@eecs.umich.edu * Copyright (c) 2007 MIPS Technologies, Inc.
46313Sgblack@eecs.umich.edu * Copyright (c) 2016 The University of Virginia
56313Sgblack@eecs.umich.edu * All rights reserved.
66313Sgblack@eecs.umich.edu *
76313Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without
86313Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are
96313Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright
106313Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer;
116313Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright
126313Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the
136313Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution;
146313Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its
156313Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from
166313Sgblack@eecs.umich.edu * this software without specific prior written permission.
176313Sgblack@eecs.umich.edu *
186313Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
196313Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
206313Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
216313Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
226313Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
236313Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
246313Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
256313Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
266313Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
276313Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
286313Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
296313Sgblack@eecs.umich.edu *
306313Sgblack@eecs.umich.edu * Authors: Gabe Black
319376Sgblack@eecs.umich.edu *          Korey Sewell
326313Sgblack@eecs.umich.edu *          Alec Roelke
336336Sgblack@eecs.umich.edu */
346336Sgblack@eecs.umich.edu
356313Sgblack@eecs.umich.edu#include "arch/riscv/linux/process.hh"
369384SAndreas.Sandberg@arm.com
376336Sgblack@eecs.umich.edu#include <map>
386313Sgblack@eecs.umich.edu
396313Sgblack@eecs.umich.edu#include "arch/riscv/isa_traits.hh"
406313Sgblack@eecs.umich.edu#include "arch/riscv/linux/linux.hh"
416313Sgblack@eecs.umich.edu#include "base/loader/object_file.hh"
426313Sgblack@eecs.umich.edu#include "base/trace.hh"
436336Sgblack@eecs.umich.edu#include "cpu/thread_context.hh"
449376Sgblack@eecs.umich.edu#include "debug/SyscallVerbose.hh"
459376Sgblack@eecs.umich.edu#include "kern/linux/linux.hh"
466336Sgblack@eecs.umich.edu#include "sim/eventq.hh"
476712Snate@binkert.org#include "sim/process.hh"
486336Sgblack@eecs.umich.edu#include "sim/syscall_desc.hh"
496336Sgblack@eecs.umich.edu#include "sim/syscall_emul.hh"
506336Sgblack@eecs.umich.edu#include "sim/system.hh"
516336Sgblack@eecs.umich.edu
526336Sgblack@eecs.umich.eduusing namespace std;
536336Sgblack@eecs.umich.eduusing namespace RiscvISA;
546336Sgblack@eecs.umich.edu
556336Sgblack@eecs.umich.edunamespace
566336Sgblack@eecs.umich.edu{
576336Sgblack@eecs.umich.edu
586336Sgblack@eecs.umich.educlass RiscvLinuxObjectFileLoader : public ObjectFile::Loader
596336Sgblack@eecs.umich.edu{
606336Sgblack@eecs.umich.edu  public:
616336Sgblack@eecs.umich.edu    Process *
626336Sgblack@eecs.umich.edu    load(ProcessParams *params, ObjectFile *obj_file) override
636336Sgblack@eecs.umich.edu    {
646336Sgblack@eecs.umich.edu        auto arch = obj_file->getArch();
656336Sgblack@eecs.umich.edu        auto opsys = obj_file->getOpSys();
666336Sgblack@eecs.umich.edu
676336Sgblack@eecs.umich.edu        if (arch != ObjectFile::Riscv64 && arch != ObjectFile::Riscv32)
686336Sgblack@eecs.umich.edu            return nullptr;
696336Sgblack@eecs.umich.edu
706336Sgblack@eecs.umich.edu        if (opsys == ObjectFile::UnknownOpSys) {
716336Sgblack@eecs.umich.edu            warn("Unknown operating system; assuming Linux.");
726336Sgblack@eecs.umich.edu            opsys = ObjectFile::Linux;
736336Sgblack@eecs.umich.edu        }
746336Sgblack@eecs.umich.edu
756336Sgblack@eecs.umich.edu        if (opsys != ObjectFile::Linux)
766336Sgblack@eecs.umich.edu            return nullptr;
776336Sgblack@eecs.umich.edu
786336Sgblack@eecs.umich.edu        if (arch == ObjectFile::Riscv64)
796336Sgblack@eecs.umich.edu            return new RiscvLinuxProcess64(params, obj_file);
806336Sgblack@eecs.umich.edu        else
816336Sgblack@eecs.umich.edu            return new RiscvLinuxProcess32(params, obj_file);
826336Sgblack@eecs.umich.edu    }
836336Sgblack@eecs.umich.edu};
846336Sgblack@eecs.umich.edu
856336Sgblack@eecs.umich.eduRiscvLinuxObjectFileLoader loader;
866336Sgblack@eecs.umich.edu
876336Sgblack@eecs.umich.edu} // anonymous namespace
886336Sgblack@eecs.umich.edu
896336Sgblack@eecs.umich.edu/// Target uname() handler.
906336Sgblack@eecs.umich.edustatic SyscallReturn
916336Sgblack@eecs.umich.eduunameFunc64(SyscallDesc *desc, int callnum, Process *process,
926336Sgblack@eecs.umich.edu          ThreadContext *tc)
936336Sgblack@eecs.umich.edu{
946336Sgblack@eecs.umich.edu    int index = 0;
956336Sgblack@eecs.umich.edu    TypedBufferArg<Linux::utsname> name(process->getSyscallArg(tc, index));
966336Sgblack@eecs.umich.edu
976336Sgblack@eecs.umich.edu    strcpy(name->sysname, "Linux");
986336Sgblack@eecs.umich.edu    strcpy(name->nodename,"sim.gem5.org");
996336Sgblack@eecs.umich.edu    strcpy(name->release, "3.0.0");
1009376Sgblack@eecs.umich.edu    strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003");
1019376Sgblack@eecs.umich.edu    strcpy(name->machine, "riscv64");
1026336Sgblack@eecs.umich.edu
1036336Sgblack@eecs.umich.edu    name.copyOut(tc->getMemProxy());
1046336Sgblack@eecs.umich.edu    return 0;
1056313Sgblack@eecs.umich.edu}
1066313Sgblack@eecs.umich.edu
1076336Sgblack@eecs.umich.edu/// Target uname() handler.
1086336Sgblack@eecs.umich.edustatic SyscallReturn
1096336Sgblack@eecs.umich.eduunameFunc32(SyscallDesc *desc, int callnum, Process *process,
1106336Sgblack@eecs.umich.edu            ThreadContext *tc)
1116336Sgblack@eecs.umich.edu{
1126313Sgblack@eecs.umich.edu    int index = 0;
1136313Sgblack@eecs.umich.edu    TypedBufferArg<Linux::utsname> name(process->getSyscallArg(tc, index));
1149384SAndreas.Sandberg@arm.com
1159384SAndreas.Sandberg@arm.com    strcpy(name->sysname, "Linux");
1169384SAndreas.Sandberg@arm.com    strcpy(name->nodename,"sim.gem5.org");
1179384SAndreas.Sandberg@arm.com    strcpy(name->release, "3.0.0");
1189384SAndreas.Sandberg@arm.com    strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003");
1199384SAndreas.Sandberg@arm.com    strcpy(name->machine, "riscv32");
1209384SAndreas.Sandberg@arm.com
1219384SAndreas.Sandberg@arm.com    name.copyOut(tc->getMemProxy());
1229384SAndreas.Sandberg@arm.com    return 0;
1239384SAndreas.Sandberg@arm.com}
1249384SAndreas.Sandberg@arm.com
1259384SAndreas.Sandberg@arm.comstd::map<int, SyscallDesc> RiscvLinuxProcess64::syscallDescs = {
1266313Sgblack@eecs.umich.edu    {0,    SyscallDesc("io_setup")},
1276313Sgblack@eecs.umich.edu    {1,    SyscallDesc("io_destroy")},
1286313Sgblack@eecs.umich.edu    {2,    SyscallDesc("io_submit")},
1296336Sgblack@eecs.umich.edu    {3,    SyscallDesc("io_cancel")},
1306336Sgblack@eecs.umich.edu    {4,    SyscallDesc("io_getevents")},
1316336Sgblack@eecs.umich.edu    {5,    SyscallDesc("setxattr")},
1326336Sgblack@eecs.umich.edu    {6,    SyscallDesc("lsetxattr")},
1336336Sgblack@eecs.umich.edu    {7,    SyscallDesc("fsetxattr")},
1346336Sgblack@eecs.umich.edu    {8,    SyscallDesc("getxattr")},
1356336Sgblack@eecs.umich.edu    {9,    SyscallDesc("lgetxattr")},
1366336Sgblack@eecs.umich.edu    {10,   SyscallDesc("fgetxattr")},
1376336Sgblack@eecs.umich.edu    {11,   SyscallDesc("listxattr")},
1386336Sgblack@eecs.umich.edu    {12,   SyscallDesc("llistxattr")},
1396313Sgblack@eecs.umich.edu    {13,   SyscallDesc("flistxattr")},
1406313Sgblack@eecs.umich.edu    {14,   SyscallDesc("removexattr")},
1416313Sgblack@eecs.umich.edu    {15,   SyscallDesc("lremovexattr")},
1426336Sgblack@eecs.umich.edu    {16,   SyscallDesc("fremovexattr")},
1436313Sgblack@eecs.umich.edu    {17,   SyscallDesc("getcwd", getcwdFunc)},
1446336Sgblack@eecs.umich.edu    {18,   SyscallDesc("lookup_dcookie")},
1456336Sgblack@eecs.umich.edu    {19,   SyscallDesc("eventfd2")},
1466336Sgblack@eecs.umich.edu    {20,   SyscallDesc("epoll_create1")},
1479372Snilay@cs.wisc.edu    {21,   SyscallDesc("epoll_ctl")},
1489372Snilay@cs.wisc.edu    {22,   SyscallDesc("epoll_pwait")},
1499372Snilay@cs.wisc.edu    {23,   SyscallDesc("dup", dupFunc)},
1509372Snilay@cs.wisc.edu    {24,   SyscallDesc("dup3")},
1519372Snilay@cs.wisc.edu    {25,   SyscallDesc("fcntl", fcntl64Func)},
1529372Snilay@cs.wisc.edu    {26,   SyscallDesc("inotify_init1")},
1539372Snilay@cs.wisc.edu    {27,   SyscallDesc("inotify_add_watch")},
1546336Sgblack@eecs.umich.edu    {28,   SyscallDesc("inotify_rm_watch")},
1556313Sgblack@eecs.umich.edu    {29,   SyscallDesc("ioctl", ioctlFunc<RiscvLinux64>)},
1566313Sgblack@eecs.umich.edu    {30,   SyscallDesc("ioprio_get")},
1576313Sgblack@eecs.umich.edu    {31,   SyscallDesc("ioprio_set")},
1586336Sgblack@eecs.umich.edu    {32,   SyscallDesc("flock")},
1596313Sgblack@eecs.umich.edu    {33,   SyscallDesc("mknodat")},
1606336Sgblack@eecs.umich.edu    {34,   SyscallDesc("mkdirat")},
1616336Sgblack@eecs.umich.edu    {35,   SyscallDesc("unlinkat", unlinkatFunc<RiscvLinux64>)},
1626336Sgblack@eecs.umich.edu    {36,   SyscallDesc("symlinkat")},
1636336Sgblack@eecs.umich.edu    {37,   SyscallDesc("linkat")},
1646336Sgblack@eecs.umich.edu    {38,   SyscallDesc("renameat", renameatFunc<RiscvLinux64>)},
1656336Sgblack@eecs.umich.edu    {39,   SyscallDesc("umount2")},
1666336Sgblack@eecs.umich.edu    {40,   SyscallDesc("mount")},
1676336Sgblack@eecs.umich.edu    {41,   SyscallDesc("pivot_root")},
1686336Sgblack@eecs.umich.edu    {42,   SyscallDesc("nfsservctl")},
1696313Sgblack@eecs.umich.edu    {43,   SyscallDesc("statfs", statfsFunc<RiscvLinux64>)},
1706313Sgblack@eecs.umich.edu    {44,   SyscallDesc("fstatfs", fstatfsFunc<RiscvLinux64>)},
1716313Sgblack@eecs.umich.edu    {45,   SyscallDesc("truncate", truncateFunc)},
1726336Sgblack@eecs.umich.edu    {46,   SyscallDesc("ftruncate", ftruncate64Func)},
1736313Sgblack@eecs.umich.edu    {47,   SyscallDesc("fallocate", fallocateFunc)},
1746336Sgblack@eecs.umich.edu    {48,   SyscallDesc("faccessat", faccessatFunc<RiscvLinux64>)},
1756336Sgblack@eecs.umich.edu    {49,   SyscallDesc("chdir")},
1766336Sgblack@eecs.umich.edu    {50,   SyscallDesc("fchdir")},
1776336Sgblack@eecs.umich.edu    {51,   SyscallDesc("chroot")},
1786336Sgblack@eecs.umich.edu    {52,   SyscallDesc("fchmod", fchmodFunc<RiscvLinux64>)},
1796336Sgblack@eecs.umich.edu    {53,   SyscallDesc("fchmodat")},
1806336Sgblack@eecs.umich.edu    {54,   SyscallDesc("fchownat")},
1816336Sgblack@eecs.umich.edu    {55,   SyscallDesc("fchown", fchownFunc)},
1826336Sgblack@eecs.umich.edu    {56,   SyscallDesc("openat", openatFunc<RiscvLinux64>)},
1836336Sgblack@eecs.umich.edu    {57,   SyscallDesc("close", closeFunc)},
1846336Sgblack@eecs.umich.edu    {58,   SyscallDesc("vhangup")},
1856336Sgblack@eecs.umich.edu    {59,   SyscallDesc("pipe2")},
1866336Sgblack@eecs.umich.edu    {60,   SyscallDesc("quotactl")},
1876336Sgblack@eecs.umich.edu    {61,   SyscallDesc("getdents64")},
1886336Sgblack@eecs.umich.edu    {62,   SyscallDesc("lseek", lseekFunc)},
1896336Sgblack@eecs.umich.edu    {63,   SyscallDesc("read", readFunc<RiscvLinux64>)},
1906336Sgblack@eecs.umich.edu    {64,   SyscallDesc("write", writeFunc<RiscvLinux64>)},
1916336Sgblack@eecs.umich.edu    {66,   SyscallDesc("writev", writevFunc<RiscvLinux64>)},
1926336Sgblack@eecs.umich.edu    {67,   SyscallDesc("pread64")},
1936336Sgblack@eecs.umich.edu    {68,   SyscallDesc("pwrite64", pwrite64Func<RiscvLinux64>)},
1949423SAndreas.Sandberg@arm.com    {69,   SyscallDesc("preadv")},
1959423SAndreas.Sandberg@arm.com    {70,   SyscallDesc("pwritev")},
1966336Sgblack@eecs.umich.edu    {71,   SyscallDesc("sendfile")},
1976336Sgblack@eecs.umich.edu    {72,   SyscallDesc("pselect6")},
1986336Sgblack@eecs.umich.edu    {73,   SyscallDesc("ppoll")},
1996336Sgblack@eecs.umich.edu    {74,   SyscallDesc("signalfd64")},
2006336Sgblack@eecs.umich.edu    {75,   SyscallDesc("vmsplice")},
2016336Sgblack@eecs.umich.edu    {76,   SyscallDesc("splice")},
2026336Sgblack@eecs.umich.edu    {77,   SyscallDesc("tee")},
2036336Sgblack@eecs.umich.edu    {78,   SyscallDesc("readlinkat", readlinkatFunc<RiscvLinux64>)},
2049376Sgblack@eecs.umich.edu    {79,   SyscallDesc("fstatat", fstatat64Func<RiscvLinux64>)},
2059376Sgblack@eecs.umich.edu    {80,   SyscallDesc("fstat", fstat64Func<RiscvLinux64>)},
2066336Sgblack@eecs.umich.edu    {81,   SyscallDesc("sync")},
2076336Sgblack@eecs.umich.edu    {82,   SyscallDesc("fsync")},
2086336Sgblack@eecs.umich.edu    {83,   SyscallDesc("fdatasync")},
2096336Sgblack@eecs.umich.edu    {84,   SyscallDesc("sync_file_range2")},
2106336Sgblack@eecs.umich.edu    {85,   SyscallDesc("timerfd_create")},
2119423SAndreas.Sandberg@arm.com    {86,   SyscallDesc("timerfd_settime")},
2129423SAndreas.Sandberg@arm.com    {87,   SyscallDesc("timerfd_gettime")},
2136336Sgblack@eecs.umich.edu    {88,   SyscallDesc("utimensat")},
2146336Sgblack@eecs.umich.edu    {89,   SyscallDesc("acct")},
2156336Sgblack@eecs.umich.edu    {90,   SyscallDesc("capget")},
2166336Sgblack@eecs.umich.edu    {91,   SyscallDesc("capset")},
2176336Sgblack@eecs.umich.edu    {92,   SyscallDesc("personality")},
2189423SAndreas.Sandberg@arm.com    {93,   SyscallDesc("exit", exitFunc)},
2199423SAndreas.Sandberg@arm.com    {94,   SyscallDesc("exit_group", exitGroupFunc)},
2206336Sgblack@eecs.umich.edu    {95,   SyscallDesc("waitid")},
2216336Sgblack@eecs.umich.edu    {96,   SyscallDesc("set_tid_address", setTidAddressFunc)},
2226336Sgblack@eecs.umich.edu    {97,   SyscallDesc("unshare")},
2236336Sgblack@eecs.umich.edu    {98,   SyscallDesc("futex", futexFunc<RiscvLinux64>)},
2246336Sgblack@eecs.umich.edu    {99,   SyscallDesc("set_robust_list", ignoreFunc, SyscallDesc::WarnOnce)},
2256336Sgblack@eecs.umich.edu    {100,  SyscallDesc("get_robust_list", ignoreFunc, SyscallDesc::WarnOnce)},
2266336Sgblack@eecs.umich.edu    {101,  SyscallDesc("nanosleep", ignoreFunc, SyscallDesc::WarnOnce)},
2276336Sgblack@eecs.umich.edu    {102,  SyscallDesc("getitimer")},
2286336Sgblack@eecs.umich.edu    {103,  SyscallDesc("setitimer")},
2296336Sgblack@eecs.umich.edu    {104,  SyscallDesc("kexec_load")},
2306336Sgblack@eecs.umich.edu    {105,  SyscallDesc("init_module")},
2316336Sgblack@eecs.umich.edu    {106,  SyscallDesc("delete_module")},
2326336Sgblack@eecs.umich.edu    {107,  SyscallDesc("timer_create")},
2336336Sgblack@eecs.umich.edu    {108,  SyscallDesc("timer_gettime")},
2346336Sgblack@eecs.umich.edu    {109,  SyscallDesc("timer_getoverrun")},
2356336Sgblack@eecs.umich.edu    {110,  SyscallDesc("timer_settime")},
2366336Sgblack@eecs.umich.edu    {111,  SyscallDesc("timer_delete")},
2376336Sgblack@eecs.umich.edu    {112,  SyscallDesc("clock_settime")},
2386336Sgblack@eecs.umich.edu    {113,  SyscallDesc("clock_gettime", clock_gettimeFunc<RiscvLinux64>)},
2396336Sgblack@eecs.umich.edu    {114,  SyscallDesc("clock_getres", clock_getresFunc<RiscvLinux64>)},
2406336Sgblack@eecs.umich.edu    {115,  SyscallDesc("clock_nanosleep")},
2416336Sgblack@eecs.umich.edu    {116,  SyscallDesc("syslog")},
2426336Sgblack@eecs.umich.edu    {117,  SyscallDesc("ptrace")},
2436336Sgblack@eecs.umich.edu    {118,  SyscallDesc("sched_setparam")},
2446336Sgblack@eecs.umich.edu    {119,  SyscallDesc("sched_setscheduler")},
2456336Sgblack@eecs.umich.edu    {120,  SyscallDesc("sched_getscheduler")},
2469376Sgblack@eecs.umich.edu    {121,  SyscallDesc("sched_getparam")},
2479376Sgblack@eecs.umich.edu    {122,  SyscallDesc("sched_setaffinity")},
2486336Sgblack@eecs.umich.edu    {123,  SyscallDesc("sched_getaffinity")},
2496336Sgblack@eecs.umich.edu    {124,  SyscallDesc("sched_yield", ignoreFunc, SyscallDesc::WarnOnce)},
2506336Sgblack@eecs.umich.edu    {125,  SyscallDesc("sched_get_priority_max")},
2516336Sgblack@eecs.umich.edu    {126,  SyscallDesc("sched_get_priority_min")},
2526336Sgblack@eecs.umich.edu    {127,  SyscallDesc("scheD_rr_get_interval")},
2536336Sgblack@eecs.umich.edu    {128,  SyscallDesc("restart_syscall")},
2546336Sgblack@eecs.umich.edu    {129,  SyscallDesc("kill")},
2559376Sgblack@eecs.umich.edu    {130,  SyscallDesc("tkill")},
2569376Sgblack@eecs.umich.edu    {131,  SyscallDesc("tgkill", tgkillFunc<RiscvLinux64>)},
2576336Sgblack@eecs.umich.edu    {132,  SyscallDesc("sigaltstack")},
2586336Sgblack@eecs.umich.edu    {133,  SyscallDesc("rt_sigsuspend", ignoreFunc, SyscallDesc::WarnOnce)},
2596336Sgblack@eecs.umich.edu    {134,  SyscallDesc("rt_sigaction", ignoreFunc, SyscallDesc::WarnOnce)},
2606336Sgblack@eecs.umich.edu    {135,  SyscallDesc("rt_sigprocmask", ignoreFunc, SyscallDesc::WarnOnce)},
2616336Sgblack@eecs.umich.edu    {136,  SyscallDesc("rt_sigpending", ignoreFunc, SyscallDesc::WarnOnce)},
2626336Sgblack@eecs.umich.edu    {137,  SyscallDesc("rt_sigtimedwait", ignoreFunc,SyscallDesc::WarnOnce)},
2636336Sgblack@eecs.umich.edu    {138,  SyscallDesc("rt_sigqueueinfo", ignoreFunc,SyscallDesc::WarnOnce)},
2646336Sgblack@eecs.umich.edu    {139,  SyscallDesc("rt_sigreturn", ignoreFunc, SyscallDesc::WarnOnce)},
2656336Sgblack@eecs.umich.edu    {140,  SyscallDesc("setpriority")},
2666336Sgblack@eecs.umich.edu    {141,  SyscallDesc("getpriority")},
2676336Sgblack@eecs.umich.edu    {142,  SyscallDesc("reboot")},
2686336Sgblack@eecs.umich.edu    {143,  SyscallDesc("setregid")},
2696336Sgblack@eecs.umich.edu    {144,  SyscallDesc("setgid")},
2706336Sgblack@eecs.umich.edu    {145,  SyscallDesc("setreuid")},
2716336Sgblack@eecs.umich.edu    {146,  SyscallDesc("setuid", setuidFunc)},
2726336Sgblack@eecs.umich.edu    {147,  SyscallDesc("setresuid")},
2736336Sgblack@eecs.umich.edu    {148,  SyscallDesc("getresuid")},
2746336Sgblack@eecs.umich.edu    {149,  SyscallDesc("getresgid")},
2756336Sgblack@eecs.umich.edu    {150,  SyscallDesc("getresgid")},
2766336Sgblack@eecs.umich.edu    {151,  SyscallDesc("setfsuid")},
2776336Sgblack@eecs.umich.edu    {152,  SyscallDesc("setfsgid")},
2786336Sgblack@eecs.umich.edu    {153,  SyscallDesc("times", timesFunc<RiscvLinux64>)},
2796336Sgblack@eecs.umich.edu    {154,  SyscallDesc("setpgid", setpgidFunc)},
2806336Sgblack@eecs.umich.edu    {155,  SyscallDesc("getpgid")},
2816336Sgblack@eecs.umich.edu    {156,  SyscallDesc("getsid")},
2826336Sgblack@eecs.umich.edu    {157,  SyscallDesc("setsid")},
2836336Sgblack@eecs.umich.edu    {158,  SyscallDesc("getgroups")},
2846336Sgblack@eecs.umich.edu    {159,  SyscallDesc("setgroups")},
2856336Sgblack@eecs.umich.edu    {160,  SyscallDesc("uname", unameFunc64)},
2866336Sgblack@eecs.umich.edu    {161,  SyscallDesc("sethostname")},
2876336Sgblack@eecs.umich.edu    {162,  SyscallDesc("setdomainname")},
2886336Sgblack@eecs.umich.edu    {163,  SyscallDesc("getrlimit", getrlimitFunc<RiscvLinux64>)},
2896336Sgblack@eecs.umich.edu    {164,  SyscallDesc("setrlimit", ignoreFunc)},
2906336Sgblack@eecs.umich.edu    {165,  SyscallDesc("getrusage", getrusageFunc<RiscvLinux64>)},
2916336Sgblack@eecs.umich.edu    {166,  SyscallDesc("umask", umaskFunc)},
2926336Sgblack@eecs.umich.edu    {167,  SyscallDesc("prctl")},
2936336Sgblack@eecs.umich.edu    {168,  SyscallDesc("getcpu")},
2946336Sgblack@eecs.umich.edu    {169,  SyscallDesc("gettimeofday", gettimeofdayFunc<RiscvLinux64>)},
2956336Sgblack@eecs.umich.edu    {170,  SyscallDesc("settimeofday")},
2966336Sgblack@eecs.umich.edu    {171,  SyscallDesc("adjtimex")},
2976336Sgblack@eecs.umich.edu    {172,  SyscallDesc("getpid", getpidFunc)},
2986336Sgblack@eecs.umich.edu    {173,  SyscallDesc("getppid", getppidFunc)},
2996336Sgblack@eecs.umich.edu    {174,  SyscallDesc("getuid", getuidFunc)},
3006336Sgblack@eecs.umich.edu    {175,  SyscallDesc("geteuid", geteuidFunc)},
3016336Sgblack@eecs.umich.edu    {176,  SyscallDesc("getgid", getgidFunc)},
3026336Sgblack@eecs.umich.edu    {177,  SyscallDesc("getegid", getegidFunc)},
3036336Sgblack@eecs.umich.edu    {178,  SyscallDesc("gettid", gettidFunc)},
3046336Sgblack@eecs.umich.edu    {179,  SyscallDesc("sysinfo", sysinfoFunc<RiscvLinux64>)},
3056336Sgblack@eecs.umich.edu    {180,  SyscallDesc("mq_open")},
3066336Sgblack@eecs.umich.edu    {181,  SyscallDesc("mq_unlink")},
3076336Sgblack@eecs.umich.edu    {182,  SyscallDesc("mq_timedsend")},
3086336Sgblack@eecs.umich.edu    {183,  SyscallDesc("mq_timedrecieve")},
3096336Sgblack@eecs.umich.edu    {184,  SyscallDesc("mq_notify")},
3106336Sgblack@eecs.umich.edu    {185,  SyscallDesc("mq_getsetattr")},
3116336Sgblack@eecs.umich.edu    {186,  SyscallDesc("msgget")},
3126336Sgblack@eecs.umich.edu    {187,  SyscallDesc("msgctl")},
3136336Sgblack@eecs.umich.edu    {188,  SyscallDesc("msgrcv")},
3146336Sgblack@eecs.umich.edu    {189,  SyscallDesc("msgsnd")},
3156336Sgblack@eecs.umich.edu    {190,  SyscallDesc("semget")},
3166336Sgblack@eecs.umich.edu    {191,  SyscallDesc("semctl")},
3176336Sgblack@eecs.umich.edu    {192,  SyscallDesc("semtimedop")},
3186336Sgblack@eecs.umich.edu    {193,  SyscallDesc("semop")},
3196336Sgblack@eecs.umich.edu    {194,  SyscallDesc("shmget")},
3206336Sgblack@eecs.umich.edu    {195,  SyscallDesc("shmctl")},
3216336Sgblack@eecs.umich.edu    {196,  SyscallDesc("shmat")},
3226336Sgblack@eecs.umich.edu    {197,  SyscallDesc("shmdt")},
3236336Sgblack@eecs.umich.edu    {198,  SyscallDesc("socket")},
3246336Sgblack@eecs.umich.edu    {199,  SyscallDesc("socketpair")},
3256336Sgblack@eecs.umich.edu    {200,  SyscallDesc("bind")},
3266336Sgblack@eecs.umich.edu    {201,  SyscallDesc("listen")},
3276336Sgblack@eecs.umich.edu    {202,  SyscallDesc("accept")},
3286336Sgblack@eecs.umich.edu    {203,  SyscallDesc("connect")},
3296336Sgblack@eecs.umich.edu    {204,  SyscallDesc("getsockname")},
3306336Sgblack@eecs.umich.edu    {205,  SyscallDesc("getpeername")},
3316336Sgblack@eecs.umich.edu    {206,  SyscallDesc("sendo")},
3326336Sgblack@eecs.umich.edu    {207,  SyscallDesc("recvfrom")},
3336336Sgblack@eecs.umich.edu    {208,  SyscallDesc("setsockopt")},
3346336Sgblack@eecs.umich.edu    {209,  SyscallDesc("getsockopt")},
3356336Sgblack@eecs.umich.edu    {210,  SyscallDesc("shutdown")},
3366336Sgblack@eecs.umich.edu    {211,  SyscallDesc("sendmsg")},
3376336Sgblack@eecs.umich.edu    {212,  SyscallDesc("recvmsg")},
3386336Sgblack@eecs.umich.edu    {213,  SyscallDesc("readahead")},
3396336Sgblack@eecs.umich.edu    {214,  SyscallDesc("brk", brkFunc)},
3406336Sgblack@eecs.umich.edu    {215,  SyscallDesc("munmap", munmapFunc)},
3416336Sgblack@eecs.umich.edu    {216,  SyscallDesc("mremap", mremapFunc<RiscvLinux64>)},
3426336Sgblack@eecs.umich.edu    {217,  SyscallDesc("add_key")},
3436336Sgblack@eecs.umich.edu    {218,  SyscallDesc("request_key")},
3446336Sgblack@eecs.umich.edu    {219,  SyscallDesc("keyctl")},
3456336Sgblack@eecs.umich.edu    {220,  SyscallDesc("clone", cloneFunc<RiscvLinux64>)},
3466336Sgblack@eecs.umich.edu    {221,  SyscallDesc("execve", execveFunc<RiscvLinux64>)},
3476336Sgblack@eecs.umich.edu    {222,  SyscallDesc("mmap", mmapFunc<RiscvLinux64>)},
3486336Sgblack@eecs.umich.edu    {223,  SyscallDesc("fadvise64")},
3496336Sgblack@eecs.umich.edu    {224,  SyscallDesc("swapon")},
3506336Sgblack@eecs.umich.edu    {225,  SyscallDesc("swapoff")},
3516336Sgblack@eecs.umich.edu    {226,  SyscallDesc("mprotect", ignoreFunc)},
3526336Sgblack@eecs.umich.edu    {227,  SyscallDesc("msync", ignoreFunc)},
3536336Sgblack@eecs.umich.edu    {228,  SyscallDesc("mlock", ignoreFunc)},
3546336Sgblack@eecs.umich.edu    {229,  SyscallDesc("munlock", ignoreFunc)},
3556336Sgblack@eecs.umich.edu    {230,  SyscallDesc("mlockall", ignoreFunc)},
3566336Sgblack@eecs.umich.edu    {231,  SyscallDesc("munlockall", ignoreFunc)},
3576336Sgblack@eecs.umich.edu    {232,  SyscallDesc("mincore", ignoreFunc)},
3586336Sgblack@eecs.umich.edu    {233,  SyscallDesc("madvise", ignoreFunc)},
3596336Sgblack@eecs.umich.edu    {234,  SyscallDesc("remap_file_pages")},
3606336Sgblack@eecs.umich.edu    {235,  SyscallDesc("mbind", ignoreFunc)},
3616336Sgblack@eecs.umich.edu    {236,  SyscallDesc("get_mempolicy")},
3626336Sgblack@eecs.umich.edu    {237,  SyscallDesc("set_mempolicy")},
3639376Sgblack@eecs.umich.edu    {238,  SyscallDesc("migrate_pages")},
3649376Sgblack@eecs.umich.edu    {239,  SyscallDesc("move_pages")},
3656336Sgblack@eecs.umich.edu    {240,  SyscallDesc("tgsigqueueinfo")},
3666336Sgblack@eecs.umich.edu    {241,  SyscallDesc("perf_event_open")},
3676336Sgblack@eecs.umich.edu    {242,  SyscallDesc("accept4")},
3686336Sgblack@eecs.umich.edu    {243,  SyscallDesc("recvmmsg")},
3696336Sgblack@eecs.umich.edu    {260,  SyscallDesc("wait4")},
3706336Sgblack@eecs.umich.edu    {261,  SyscallDesc("prlimit64", prlimitFunc<RiscvLinux64>)},
3716336Sgblack@eecs.umich.edu    {262,  SyscallDesc("fanotify_init")},
3726336Sgblack@eecs.umich.edu    {263,  SyscallDesc("fanotify_mark")},
3739425SAndreas.Sandberg@ARM.com    {264,  SyscallDesc("name_to_handle_at")},
3746336Sgblack@eecs.umich.edu    {265,  SyscallDesc("open_by_handle_at")},
3756336Sgblack@eecs.umich.edu    {266,  SyscallDesc("clock_adjtime")},
3766336Sgblack@eecs.umich.edu    {267,  SyscallDesc("syncfs")},
3776336Sgblack@eecs.umich.edu    {268,  SyscallDesc("setns")},
3786336Sgblack@eecs.umich.edu    {269,  SyscallDesc("sendmmsg")},
3799425SAndreas.Sandberg@ARM.com    {270,  SyscallDesc("process_vm_ready")},
3806336Sgblack@eecs.umich.edu    {271,  SyscallDesc("process_vm_writev")},
3816336Sgblack@eecs.umich.edu    {272,  SyscallDesc("kcmp")},
3827533Ssteve.reinhardt@amd.com    {273,  SyscallDesc("finit_module")},
3837533Ssteve.reinhardt@amd.com    {274,  SyscallDesc("sched_setattr")},
3847533Ssteve.reinhardt@amd.com    {275,  SyscallDesc("sched_getattr")},
3857533Ssteve.reinhardt@amd.com    {276,  SyscallDesc("renameat2")},
3869376Sgblack@eecs.umich.edu    {277,  SyscallDesc("seccomp")},
3879376Sgblack@eecs.umich.edu    {278,  SyscallDesc("getrandom")},
3886313Sgblack@eecs.umich.edu    {279,  SyscallDesc("memfd_create")},
3896313Sgblack@eecs.umich.edu    {280,  SyscallDesc("bpf")},
3909461Snilay@cs.wisc.edu    {281,  SyscallDesc("execveat")},
3919461Snilay@cs.wisc.edu    {282,  SyscallDesc("userfaultid")},
3929461Snilay@cs.wisc.edu    {283,  SyscallDesc("membarrier")},
3939461Snilay@cs.wisc.edu    {284,  SyscallDesc("mlock2")},
3949461Snilay@cs.wisc.edu    {285,  SyscallDesc("copy_file_range")},
3959461Snilay@cs.wisc.edu    {286,  SyscallDesc("preadv2")},
3966313Sgblack@eecs.umich.edu    {287,  SyscallDesc("pwritev2")},
3979384SAndreas.Sandberg@arm.com    {1024, SyscallDesc("open", openFunc<RiscvLinux64>)},
3989384SAndreas.Sandberg@arm.com    {1025, SyscallDesc("link")},
3999384SAndreas.Sandberg@arm.com    {1026, SyscallDesc("unlink", unlinkFunc)},
4009384SAndreas.Sandberg@arm.com    {1027, SyscallDesc("mknod")},
4019384SAndreas.Sandberg@arm.com    {1028, SyscallDesc("chmod", chmodFunc<RiscvLinux64>)},
4029384SAndreas.Sandberg@arm.com    {1029, SyscallDesc("chown", chownFunc)},
403    {1030, SyscallDesc("mkdir", mkdirFunc)},
404    {1031, SyscallDesc("rmdir")},
405    {1032, SyscallDesc("lchown")},
406    {1033, SyscallDesc("access", accessFunc)},
407    {1034, SyscallDesc("rename", renameFunc)},
408    {1035, SyscallDesc("readlink", readlinkFunc)},
409    {1036, SyscallDesc("symlink")},
410    {1037, SyscallDesc("utimes", utimesFunc<RiscvLinux64>)},
411    {1038, SyscallDesc("stat", stat64Func<RiscvLinux64>)},
412    {1039, SyscallDesc("lstat", lstat64Func<RiscvLinux64>)},
413    {1040, SyscallDesc("pipe", pipeFunc)},
414    {1041, SyscallDesc("dup2", dup2Func)},
415    {1042, SyscallDesc("epoll_create")},
416    {1043, SyscallDesc("inotifiy_init")},
417    {1044, SyscallDesc("eventfd")},
418    {1045, SyscallDesc("signalfd")},
419    {1046, SyscallDesc("sendfile")},
420    {1047, SyscallDesc("ftruncate", ftruncate64Func)},
421    {1048, SyscallDesc("truncate", truncate64Func)},
422    {1049, SyscallDesc("stat", stat64Func<RiscvLinux64>)},
423    {1050, SyscallDesc("lstat", lstat64Func<RiscvLinux64>)},
424    {1051, SyscallDesc("fstat", fstat64Func<RiscvLinux64>)},
425    {1052, SyscallDesc("fcntl", fcntl64Func)},
426    {1053, SyscallDesc("fadvise64")},
427    {1054, SyscallDesc("newfstatat")},
428    {1055, SyscallDesc("fstatfs", fstatfsFunc<RiscvLinux64>)},
429    {1056, SyscallDesc("statfs", statfsFunc<RiscvLinux64>)},
430    {1057, SyscallDesc("lseek", lseekFunc)},
431    {1058, SyscallDesc("mmap", mmapFunc<RiscvLinux64>)},
432    {1059, SyscallDesc("alarm")},
433    {1060, SyscallDesc("getpgrp")},
434    {1061, SyscallDesc("pause")},
435    {1062, SyscallDesc("time", timeFunc<RiscvLinux64>)},
436    {1063, SyscallDesc("utime")},
437    {1064, SyscallDesc("creat")},
438    {1065, SyscallDesc("getdents")},
439    {1066, SyscallDesc("futimesat")},
440    {1067, SyscallDesc("select")},
441    {1068, SyscallDesc("poll")},
442    {1069, SyscallDesc("epoll_wait")},
443    {1070, SyscallDesc("ustat")},
444    {1071, SyscallDesc("vfork")},
445    {1072, SyscallDesc("oldwait4")},
446    {1073, SyscallDesc("recv")},
447    {1074, SyscallDesc("send")},
448    {1075, SyscallDesc("bdflush")},
449    {1076, SyscallDesc("umount")},
450    {1077, SyscallDesc("uselib")},
451    {1078, SyscallDesc("sysctl")},
452    {1079, SyscallDesc("fork")},
453    {2011, SyscallDesc("getmainvars")}
454};
455
456std::map<int, SyscallDesc> RiscvLinuxProcess32::syscallDescs = {
457    {0,    SyscallDesc("io_setup")},
458    {1,    SyscallDesc("io_destroy")},
459    {2,    SyscallDesc("io_submit")},
460    {3,    SyscallDesc("io_cancel")},
461    {4,    SyscallDesc("io_getevents")},
462    {5,    SyscallDesc("setxattr")},
463    {6,    SyscallDesc("lsetxattr")},
464    {7,    SyscallDesc("fsetxattr")},
465    {8,    SyscallDesc("getxattr")},
466    {9,    SyscallDesc("lgetxattr")},
467    {10,   SyscallDesc("fgetxattr")},
468    {11,   SyscallDesc("listxattr")},
469    {12,   SyscallDesc("llistxattr")},
470    {13,   SyscallDesc("flistxattr")},
471    {14,   SyscallDesc("removexattr")},
472    {15,   SyscallDesc("lremovexattr")},
473    {16,   SyscallDesc("fremovexattr")},
474    {17,   SyscallDesc("getcwd", getcwdFunc)},
475    {18,   SyscallDesc("lookup_dcookie")},
476    {19,   SyscallDesc("eventfd2")},
477    {20,   SyscallDesc("epoll_create1")},
478    {21,   SyscallDesc("epoll_ctl")},
479    {22,   SyscallDesc("epoll_pwait")},
480    {23,   SyscallDesc("dup", dupFunc)},
481    {24,   SyscallDesc("dup3")},
482    {25,   SyscallDesc("fcntl", fcntlFunc)},
483    {26,   SyscallDesc("inotify_init1")},
484    {27,   SyscallDesc("inotify_add_watch")},
485    {28,   SyscallDesc("inotify_rm_watch")},
486    {29,   SyscallDesc("ioctl", ioctlFunc<RiscvLinux32>)},
487    {30,   SyscallDesc("ioprio_get")},
488    {31,   SyscallDesc("ioprio_set")},
489    {32,   SyscallDesc("flock")},
490    {33,   SyscallDesc("mknodat")},
491    {34,   SyscallDesc("mkdirat")},
492    {35,   SyscallDesc("unlinkat", unlinkatFunc<RiscvLinux32>)},
493    {36,   SyscallDesc("symlinkat")},
494    {37,   SyscallDesc("linkat")},
495    {38,   SyscallDesc("renameat", renameatFunc<RiscvLinux32>)},
496    {39,   SyscallDesc("umount2")},
497    {40,   SyscallDesc("mount")},
498    {41,   SyscallDesc("pivot_root")},
499    {42,   SyscallDesc("nfsservctl")},
500    {43,   SyscallDesc("statfs", statfsFunc<RiscvLinux32>)},
501    {44,   SyscallDesc("fstatfs", fstatfsFunc<RiscvLinux32>)},
502    {45,   SyscallDesc("truncate", truncateFunc)},
503    {46,   SyscallDesc("ftruncate", ftruncateFunc)},
504    {47,   SyscallDesc("fallocate", fallocateFunc)},
505    {48,   SyscallDesc("faccessat", faccessatFunc<RiscvLinux32>)},
506    {49,   SyscallDesc("chdir")},
507    {50,   SyscallDesc("fchdir")},
508    {51,   SyscallDesc("chroot")},
509    {52,   SyscallDesc("fchmod", fchmodFunc<RiscvLinux32>)},
510    {53,   SyscallDesc("fchmodat")},
511    {54,   SyscallDesc("fchownat")},
512    {55,   SyscallDesc("fchown", fchownFunc)},
513    {56,   SyscallDesc("openat", openatFunc<RiscvLinux32>)},
514    {57,   SyscallDesc("close", closeFunc)},
515    {58,   SyscallDesc("vhangup")},
516    {59,   SyscallDesc("pipe2")},
517    {60,   SyscallDesc("quotactl")},
518    {61,   SyscallDesc("getdents64")},
519    {62,   SyscallDesc("lseek", lseekFunc)},
520    {63,   SyscallDesc("read", readFunc<RiscvLinux32>)},
521    {64,   SyscallDesc("write", writeFunc<RiscvLinux32>)},
522    {66,   SyscallDesc("writev", writevFunc<RiscvLinux32>)},
523    {67,   SyscallDesc("pread64")},
524    {68,   SyscallDesc("pwrite64", pwrite64Func<RiscvLinux32>)},
525    {69,   SyscallDesc("preadv")},
526    {70,   SyscallDesc("pwritev")},
527    {71,   SyscallDesc("sendfile")},
528    {72,   SyscallDesc("pselect6")},
529    {73,   SyscallDesc("ppoll")},
530    {74,   SyscallDesc("signalfd64")},
531    {75,   SyscallDesc("vmsplice")},
532    {76,   SyscallDesc("splice")},
533    {77,   SyscallDesc("tee")},
534    {78,   SyscallDesc("readlinkat", readlinkatFunc<RiscvLinux32>)},
535    {79,   SyscallDesc("fstatat")},
536    {80,   SyscallDesc("fstat", fstatFunc<RiscvLinux32>)},
537    {81,   SyscallDesc("sync")},
538    {82,   SyscallDesc("fsync")},
539    {83,   SyscallDesc("fdatasync")},
540    {84,   SyscallDesc("sync_file_range2")},
541    {85,   SyscallDesc("timerfd_create")},
542    {86,   SyscallDesc("timerfd_settime")},
543    {87,   SyscallDesc("timerfd_gettime")},
544    {88,   SyscallDesc("utimensat")},
545    {89,   SyscallDesc("acct")},
546    {90,   SyscallDesc("capget")},
547    {91,   SyscallDesc("capset")},
548    {92,   SyscallDesc("personality")},
549    {93,   SyscallDesc("exit", exitFunc)},
550    {94,   SyscallDesc("exit_group", exitGroupFunc)},
551    {95,   SyscallDesc("waitid")},
552    {96,   SyscallDesc("set_tid_address", setTidAddressFunc)},
553    {97,   SyscallDesc("unshare")},
554    {98,   SyscallDesc("futex", futexFunc<RiscvLinux32>)},
555    {99,   SyscallDesc("set_robust_list", ignoreFunc, SyscallDesc::WarnOnce)},
556    {100,  SyscallDesc("get_robust_list", ignoreFunc, SyscallDesc::WarnOnce)},
557    {101,  SyscallDesc("nanosleep")},
558    {102,  SyscallDesc("getitimer")},
559    {103,  SyscallDesc("setitimer")},
560    {104,  SyscallDesc("kexec_load")},
561    {105,  SyscallDesc("init_module")},
562    {106,  SyscallDesc("delete_module")},
563    {107,  SyscallDesc("timer_create")},
564    {108,  SyscallDesc("timer_gettime")},
565    {109,  SyscallDesc("timer_getoverrun")},
566    {110,  SyscallDesc("timer_settime")},
567    {111,  SyscallDesc("timer_delete")},
568    {112,  SyscallDesc("clock_settime")},
569    {113,  SyscallDesc("clock_gettime", clock_gettimeFunc<RiscvLinux32>)},
570    {114,  SyscallDesc("clock_getres", clock_getresFunc<RiscvLinux32>)},
571    {115,  SyscallDesc("clock_nanosleep")},
572    {116,  SyscallDesc("syslog")},
573    {117,  SyscallDesc("ptrace")},
574    {118,  SyscallDesc("sched_setparam")},
575    {119,  SyscallDesc("sched_setscheduler")},
576    {120,  SyscallDesc("sched_getscheduler")},
577    {121,  SyscallDesc("sched_getparam")},
578    {122,  SyscallDesc("sched_setaffinity")},
579    {123,  SyscallDesc("sched_getaffinity")},
580    {124,  SyscallDesc("sched_yield", ignoreFunc, SyscallDesc::WarnOnce)},
581    {125,  SyscallDesc("sched_get_priority_max")},
582    {126,  SyscallDesc("sched_get_priority_min")},
583    {127,  SyscallDesc("scheD_rr_get_interval")},
584    {128,  SyscallDesc("restart_syscall")},
585    {129,  SyscallDesc("kill")},
586    {130,  SyscallDesc("tkill")},
587    {131,  SyscallDesc("tgkill", tgkillFunc<RiscvLinux32>)},
588    {132,  SyscallDesc("sigaltstack")},
589    {133,  SyscallDesc("rt_sigsuspend", ignoreFunc, SyscallDesc::WarnOnce)},
590    {134,  SyscallDesc("rt_sigaction", ignoreFunc, SyscallDesc::WarnOnce)},
591    {135,  SyscallDesc("rt_sigprocmask", ignoreFunc, SyscallDesc::WarnOnce)},
592    {136,  SyscallDesc("rt_sigpending", ignoreFunc, SyscallDesc::WarnOnce)},
593    {137,  SyscallDesc("rt_sigtimedwait", ignoreFunc,SyscallDesc::WarnOnce)},
594    {138,  SyscallDesc("rt_sigqueueinfo", ignoreFunc,SyscallDesc::WarnOnce)},
595    {139,  SyscallDesc("rt_sigreturn", ignoreFunc, SyscallDesc::WarnOnce)},
596    {140,  SyscallDesc("setpriority")},
597    {141,  SyscallDesc("getpriority")},
598    {142,  SyscallDesc("reboot")},
599    {143,  SyscallDesc("setregid")},
600    {144,  SyscallDesc("setgid")},
601    {145,  SyscallDesc("setreuid")},
602    {146,  SyscallDesc("setuid", setuidFunc)},
603    {147,  SyscallDesc("setresuid")},
604    {148,  SyscallDesc("getresuid")},
605    {149,  SyscallDesc("getresgid")},
606    {150,  SyscallDesc("getresgid")},
607    {151,  SyscallDesc("setfsuid")},
608    {152,  SyscallDesc("setfsgid")},
609    {153,  SyscallDesc("times", timesFunc<RiscvLinux32>)},
610    {154,  SyscallDesc("setpgid", setpgidFunc)},
611    {155,  SyscallDesc("getpgid")},
612    {156,  SyscallDesc("getsid")},
613    {157,  SyscallDesc("setsid")},
614    {158,  SyscallDesc("getgroups")},
615    {159,  SyscallDesc("setgroups")},
616    {160,  SyscallDesc("uname", unameFunc32)},
617    {161,  SyscallDesc("sethostname")},
618    {162,  SyscallDesc("setdomainname")},
619    {163,  SyscallDesc("getrlimit", getrlimitFunc<RiscvLinux32>)},
620    {164,  SyscallDesc("setrlimit", ignoreFunc)},
621    {165,  SyscallDesc("getrusage", getrusageFunc<RiscvLinux32>)},
622    {166,  SyscallDesc("umask", umaskFunc)},
623    {167,  SyscallDesc("prctl")},
624    {168,  SyscallDesc("getcpu")},
625    {169,  SyscallDesc("gettimeofday", gettimeofdayFunc<RiscvLinux32>)},
626    {170,  SyscallDesc("settimeofday")},
627    {171,  SyscallDesc("adjtimex")},
628    {172,  SyscallDesc("getpid", getpidFunc)},
629    {173,  SyscallDesc("getppid", getppidFunc)},
630    {174,  SyscallDesc("getuid", getuidFunc)},
631    {175,  SyscallDesc("geteuid", geteuidFunc)},
632    {176,  SyscallDesc("getgid", getgidFunc)},
633    {177,  SyscallDesc("getegid", getegidFunc)},
634    {178,  SyscallDesc("gettid", gettidFunc)},
635    {179,  SyscallDesc("sysinfo", sysinfoFunc<RiscvLinux32>)},
636    {180,  SyscallDesc("mq_open")},
637    {181,  SyscallDesc("mq_unlink")},
638    {182,  SyscallDesc("mq_timedsend")},
639    {183,  SyscallDesc("mq_timedrecieve")},
640    {184,  SyscallDesc("mq_notify")},
641    {185,  SyscallDesc("mq_getsetattr")},
642    {186,  SyscallDesc("msgget")},
643    {187,  SyscallDesc("msgctl")},
644    {188,  SyscallDesc("msgrcv")},
645    {189,  SyscallDesc("msgsnd")},
646    {190,  SyscallDesc("semget")},
647    {191,  SyscallDesc("semctl")},
648    {192,  SyscallDesc("semtimedop")},
649    {193,  SyscallDesc("semop")},
650    {194,  SyscallDesc("shmget")},
651    {195,  SyscallDesc("shmctl")},
652    {196,  SyscallDesc("shmat")},
653    {197,  SyscallDesc("shmdt")},
654    {198,  SyscallDesc("socket")},
655    {199,  SyscallDesc("socketpair")},
656    {200,  SyscallDesc("bind")},
657    {201,  SyscallDesc("listen")},
658    {202,  SyscallDesc("accept")},
659    {203,  SyscallDesc("connect")},
660    {204,  SyscallDesc("getsockname")},
661    {205,  SyscallDesc("getpeername")},
662    {206,  SyscallDesc("sendo")},
663    {207,  SyscallDesc("recvfrom")},
664    {208,  SyscallDesc("setsockopt")},
665    {209,  SyscallDesc("getsockopt")},
666    {210,  SyscallDesc("shutdown")},
667    {211,  SyscallDesc("sendmsg")},
668    {212,  SyscallDesc("recvmsg")},
669    {213,  SyscallDesc("readahead")},
670    {214,  SyscallDesc("brk", brkFunc)},
671    {215,  SyscallDesc("munmap", munmapFunc)},
672    {216,  SyscallDesc("mremap", mremapFunc<RiscvLinux32>)},
673    {217,  SyscallDesc("add_key")},
674    {218,  SyscallDesc("request_key")},
675    {219,  SyscallDesc("keyctl")},
676    {220,  SyscallDesc("clone", cloneFunc<RiscvLinux32>)},
677    {221,  SyscallDesc("execve", execveFunc<RiscvLinux32>)},
678    {222,  SyscallDesc("mmap", mmapFunc<RiscvLinux32>)},
679    {223,  SyscallDesc("fadvise64")},
680    {224,  SyscallDesc("swapon")},
681    {225,  SyscallDesc("swapoff")},
682    {226,  SyscallDesc("mprotect", ignoreFunc)},
683    {227,  SyscallDesc("msync", ignoreFunc)},
684    {228,  SyscallDesc("mlock", ignoreFunc)},
685    {229,  SyscallDesc("munlock", ignoreFunc)},
686    {230,  SyscallDesc("mlockall", ignoreFunc)},
687    {231,  SyscallDesc("munlockall", ignoreFunc)},
688    {232,  SyscallDesc("mincore", ignoreFunc)},
689    {233,  SyscallDesc("madvise", ignoreFunc)},
690    {234,  SyscallDesc("remap_file_pages")},
691    {235,  SyscallDesc("mbind", ignoreFunc)},
692    {236,  SyscallDesc("get_mempolicy")},
693    {237,  SyscallDesc("set_mempolicy")},
694    {238,  SyscallDesc("migrate_pages")},
695    {239,  SyscallDesc("move_pages")},
696    {240,  SyscallDesc("tgsigqueueinfo")},
697    {241,  SyscallDesc("perf_event_open")},
698    {242,  SyscallDesc("accept4")},
699    {243,  SyscallDesc("recvmmsg")},
700    {260,  SyscallDesc("wait4")},
701    {261,  SyscallDesc("prlimit64", prlimitFunc<RiscvLinux32>)},
702    {262,  SyscallDesc("fanotify_init")},
703    {263,  SyscallDesc("fanotify_mark")},
704    {264,  SyscallDesc("name_to_handle_at")},
705    {265,  SyscallDesc("open_by_handle_at")},
706    {266,  SyscallDesc("clock_adjtime")},
707    {267,  SyscallDesc("syncfs")},
708    {268,  SyscallDesc("setns")},
709    {269,  SyscallDesc("sendmmsg")},
710    {270,  SyscallDesc("process_vm_ready")},
711    {271,  SyscallDesc("process_vm_writev")},
712    {272,  SyscallDesc("kcmp")},
713    {273,  SyscallDesc("finit_module")},
714    {274,  SyscallDesc("sched_setattr")},
715    {275,  SyscallDesc("sched_getattr")},
716    {276,  SyscallDesc("renameat2")},
717    {277,  SyscallDesc("seccomp")},
718    {278,  SyscallDesc("getrandom")},
719    {279,  SyscallDesc("memfd_create")},
720    {280,  SyscallDesc("bpf")},
721    {281,  SyscallDesc("execveat")},
722    {282,  SyscallDesc("userfaultid")},
723    {283,  SyscallDesc("membarrier")},
724    {284,  SyscallDesc("mlock2")},
725    {285,  SyscallDesc("copy_file_range")},
726    {286,  SyscallDesc("preadv2")},
727    {287,  SyscallDesc("pwritev2")},
728    {1024, SyscallDesc("open", openFunc<RiscvLinux32>)},
729    {1025, SyscallDesc("link")},
730    {1026, SyscallDesc("unlink", unlinkFunc)},
731    {1027, SyscallDesc("mknod")},
732    {1028, SyscallDesc("chmod", chmodFunc<RiscvLinux32>)},
733    {1029, SyscallDesc("chown", chownFunc)},
734    {1030, SyscallDesc("mkdir", mkdirFunc)},
735    {1031, SyscallDesc("rmdir")},
736    {1032, SyscallDesc("lchown")},
737    {1033, SyscallDesc("access", accessFunc)},
738    {1034, SyscallDesc("rename", renameFunc)},
739    {1035, SyscallDesc("readlink", readlinkFunc)},
740    {1036, SyscallDesc("symlink")},
741    {1037, SyscallDesc("utimes", utimesFunc<RiscvLinux32>)},
742    {1038, SyscallDesc("stat", statFunc<RiscvLinux32>)},
743    {1039, SyscallDesc("lstat", lstatFunc<RiscvLinux32>)},
744    {1040, SyscallDesc("pipe", pipeFunc)},
745    {1041, SyscallDesc("dup2", dup2Func)},
746    {1042, SyscallDesc("epoll_create")},
747    {1043, SyscallDesc("inotifiy_init")},
748    {1044, SyscallDesc("eventfd")},
749    {1045, SyscallDesc("signalfd")},
750    {1046, SyscallDesc("sendfile")},
751    {1047, SyscallDesc("ftruncate", ftruncateFunc)},
752    {1048, SyscallDesc("truncate", truncateFunc)},
753    {1049, SyscallDesc("stat", statFunc<RiscvLinux32>)},
754    {1050, SyscallDesc("lstat", lstatFunc<RiscvLinux32>)},
755    {1051, SyscallDesc("fstat", fstatFunc<RiscvLinux32>)},
756    {1052, SyscallDesc("fcntl", fcntlFunc)},
757    {1053, SyscallDesc("fadvise64")},
758    {1054, SyscallDesc("newfstatat")},
759    {1055, SyscallDesc("fstatfs", fstatfsFunc<RiscvLinux32>)},
760    {1056, SyscallDesc("statfs", statfsFunc<RiscvLinux32>)},
761    {1057, SyscallDesc("lseek", lseekFunc)},
762    {1058, SyscallDesc("mmap", mmapFunc<RiscvLinux32>)},
763    {1059, SyscallDesc("alarm")},
764    {1060, SyscallDesc("getpgrp")},
765    {1061, SyscallDesc("pause")},
766    {1062, SyscallDesc("time", timeFunc<RiscvLinux32>)},
767    {1063, SyscallDesc("utime")},
768    {1064, SyscallDesc("creat")},
769    {1065, SyscallDesc("getdents")},
770    {1066, SyscallDesc("futimesat")},
771    {1067, SyscallDesc("select")},
772    {1068, SyscallDesc("poll")},
773    {1069, SyscallDesc("epoll_wait")},
774    {1070, SyscallDesc("ustat")},
775    {1071, SyscallDesc("vfork")},
776    {1072, SyscallDesc("oldwait4")},
777    {1073, SyscallDesc("recv")},
778    {1074, SyscallDesc("send")},
779    {1075, SyscallDesc("bdflush")},
780    {1076, SyscallDesc("umount")},
781    {1077, SyscallDesc("uselib")},
782    {1078, SyscallDesc("sysctl")},
783    {1079, SyscallDesc("fork")},
784    {2011, SyscallDesc("getmainvars")}
785};
786
787RiscvLinuxProcess64::RiscvLinuxProcess64(ProcessParams * params,
788    ObjectFile *objFile) : RiscvProcess64(params, objFile)
789{}
790
791SyscallDesc*
792RiscvLinuxProcess64::getDesc(int callnum)
793{
794    return syscallDescs.find(callnum) != syscallDescs.end() ?
795        &syscallDescs.at(callnum) : nullptr;
796}
797
798RiscvLinuxProcess32::RiscvLinuxProcess32(ProcessParams * params,
799    ObjectFile *objFile) : RiscvProcess32(params, objFile)
800{}
801
802SyscallDesc*
803RiscvLinuxProcess32::getDesc(int callnum)
804{
805    return syscallDescs.find(callnum) != syscallDescs.end() ?
806        &syscallDescs.at(callnum) : nullptr;
807}
808