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