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