process.cc (13645:f9cd6956b57b) process.cc (13987:0b79ddd399a4)
1/*
2 * Copyright (c) 2005 The Regents of The University of Michigan
3 * Copyright (c) 2007 MIPS Technologies, Inc.
4 * Copyright (c) 2016 The University of Virginia
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are
9 * met: redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer;
11 * redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution;
14 * neither the name of the copyright holders nor the names of its
15 * contributors may be used to endorse or promote products derived from
16 * this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 *
30 * Authors: Gabe Black
31 * Korey Sewell
32 * Alec Roelke
33 */
34
35#include "arch/riscv/linux/process.hh"
36
37#include <map>
38
39#include "arch/riscv/isa_traits.hh"
40#include "arch/riscv/linux/linux.hh"
1/*
2 * Copyright (c) 2005 The Regents of The University of Michigan
3 * Copyright (c) 2007 MIPS Technologies, Inc.
4 * Copyright (c) 2016 The University of Virginia
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are
9 * met: redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer;
11 * redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution;
14 * neither the name of the copyright holders nor the names of its
15 * contributors may be used to endorse or promote products derived from
16 * this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 *
30 * Authors: Gabe Black
31 * Korey Sewell
32 * Alec Roelke
33 */
34
35#include "arch/riscv/linux/process.hh"
36
37#include <map>
38
39#include "arch/riscv/isa_traits.hh"
40#include "arch/riscv/linux/linux.hh"
41#include "base/loader/object_file.hh"
41#include "base/trace.hh"
42#include "cpu/thread_context.hh"
43#include "debug/SyscallVerbose.hh"
44#include "kern/linux/linux.hh"
45#include "sim/eventq.hh"
46#include "sim/process.hh"
47#include "sim/syscall_desc.hh"
48#include "sim/syscall_emul.hh"
49#include "sim/system.hh"
50
51using namespace std;
52using namespace RiscvISA;
53
42#include "base/trace.hh"
43#include "cpu/thread_context.hh"
44#include "debug/SyscallVerbose.hh"
45#include "kern/linux/linux.hh"
46#include "sim/eventq.hh"
47#include "sim/process.hh"
48#include "sim/syscall_desc.hh"
49#include "sim/syscall_emul.hh"
50#include "sim/system.hh"
51
52using namespace std;
53using namespace RiscvISA;
54
55namespace
56{
57
58class RiscvLinuxObjectFileLoader : public ObjectFile::Loader
59{
60 public:
61 Process *
62 load(ProcessParams *params, ObjectFile *obj_file) override
63 {
64 auto arch = obj_file->getArch();
65 auto opsys = obj_file->getOpSys();
66
67 if (arch != ObjectFile::Riscv64 && arch != ObjectFile::Riscv32)
68 return nullptr;
69
70 if (opsys == ObjectFile::UnknownOpSys) {
71 warn("Unknown operating system; assuming Linux.");
72 opsys = ObjectFile::Linux;
73 }
74
75 if (opsys != ObjectFile::Linux)
76 return nullptr;
77
78 if (arch == ObjectFile::Riscv64)
79 return new RiscvLinuxProcess64(params, obj_file);
80 else
81 return new RiscvLinuxProcess32(params, obj_file);
82 }
83};
84
85RiscvLinuxObjectFileLoader loader;
86
87} // anonymous namespace
88
54/// Target uname() handler.
55static SyscallReturn
56unameFunc64(SyscallDesc *desc, int callnum, Process *process,
57 ThreadContext *tc)
58{
59 int index = 0;
60 TypedBufferArg<Linux::utsname> name(process->getSyscallArg(tc, index));
61
62 strcpy(name->sysname, "Linux");
63 strcpy(name->nodename,"sim.gem5.org");
64 strcpy(name->release, "3.0.0");
65 strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003");
66 strcpy(name->machine, "riscv64");
67
68 name.copyOut(tc->getMemProxy());
69 return 0;
70}
71
72/// Target uname() handler.
73static SyscallReturn
74unameFunc32(SyscallDesc *desc, int callnum, Process *process,
75 ThreadContext *tc)
76{
77 int index = 0;
78 TypedBufferArg<Linux::utsname> name(process->getSyscallArg(tc, index));
79
80 strcpy(name->sysname, "Linux");
81 strcpy(name->nodename,"sim.gem5.org");
82 strcpy(name->release, "3.0.0");
83 strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003");
84 strcpy(name->machine, "riscv32");
85
86 name.copyOut(tc->getMemProxy());
87 return 0;
88}
89
90std::map<int, SyscallDesc> RiscvLinuxProcess64::syscallDescs = {
91 {0, SyscallDesc("io_setup")},
92 {1, SyscallDesc("io_destroy")},
93 {2, SyscallDesc("io_submit")},
94 {3, SyscallDesc("io_cancel")},
95 {4, SyscallDesc("io_getevents")},
96 {5, SyscallDesc("setxattr")},
97 {6, SyscallDesc("lsetxattr")},
98 {7, SyscallDesc("fsetxattr")},
99 {8, SyscallDesc("getxattr")},
100 {9, SyscallDesc("lgetxattr")},
101 {10, SyscallDesc("fgetxattr")},
102 {11, SyscallDesc("listxattr")},
103 {12, SyscallDesc("llistxattr")},
104 {13, SyscallDesc("flistxattr")},
105 {14, SyscallDesc("removexattr")},
106 {15, SyscallDesc("lremovexattr")},
107 {16, SyscallDesc("fremovexattr")},
108 {17, SyscallDesc("getcwd", getcwdFunc)},
109 {18, SyscallDesc("lookup_dcookie")},
110 {19, SyscallDesc("eventfd2")},
111 {20, SyscallDesc("epoll_create1")},
112 {21, SyscallDesc("epoll_ctl")},
113 {22, SyscallDesc("epoll_pwait")},
114 {23, SyscallDesc("dup", dupFunc)},
115 {24, SyscallDesc("dup3")},
116 {25, SyscallDesc("fcntl", fcntl64Func)},
117 {26, SyscallDesc("inotify_init1")},
118 {27, SyscallDesc("inotify_add_watch")},
119 {28, SyscallDesc("inotify_rm_watch")},
120 {29, SyscallDesc("ioctl", ioctlFunc<RiscvLinux64>)},
121 {30, SyscallDesc("ioprio_get")},
122 {31, SyscallDesc("ioprio_set")},
123 {32, SyscallDesc("flock")},
124 {33, SyscallDesc("mknodat")},
125 {34, SyscallDesc("mkdirat")},
126 {35, SyscallDesc("unlinkat", unlinkatFunc<RiscvLinux64>)},
127 {36, SyscallDesc("symlinkat")},
128 {37, SyscallDesc("linkat")},
129 {38, SyscallDesc("renameat", renameatFunc<RiscvLinux64>)},
130 {39, SyscallDesc("umount2")},
131 {40, SyscallDesc("mount")},
132 {41, SyscallDesc("pivot_root")},
133 {42, SyscallDesc("nfsservctl")},
134 {43, SyscallDesc("statfs", statfsFunc<RiscvLinux64>)},
135 {44, SyscallDesc("fstatfs", fstatfsFunc<RiscvLinux64>)},
136 {45, SyscallDesc("truncate", truncateFunc)},
137 {46, SyscallDesc("ftruncate", ftruncate64Func)},
138 {47, SyscallDesc("fallocate", fallocateFunc)},
139 {48, SyscallDesc("faccessat", faccessatFunc<RiscvLinux64>)},
140 {49, SyscallDesc("chdir")},
141 {50, SyscallDesc("fchdir")},
142 {51, SyscallDesc("chroot")},
143 {52, SyscallDesc("fchmod", fchmodFunc<RiscvLinux64>)},
144 {53, SyscallDesc("fchmodat")},
145 {54, SyscallDesc("fchownat")},
146 {55, SyscallDesc("fchown", fchownFunc)},
147 {56, SyscallDesc("openat", openatFunc<RiscvLinux64>)},
148 {57, SyscallDesc("close", closeFunc)},
149 {58, SyscallDesc("vhangup")},
150 {59, SyscallDesc("pipe2")},
151 {60, SyscallDesc("quotactl")},
152 {61, SyscallDesc("getdents64")},
153 {62, SyscallDesc("lseek", lseekFunc)},
154 {63, SyscallDesc("read", readFunc<RiscvLinux64>)},
155 {64, SyscallDesc("write", writeFunc<RiscvLinux64>)},
156 {66, SyscallDesc("writev", writevFunc<RiscvLinux64>)},
157 {67, SyscallDesc("pread64")},
158 {68, SyscallDesc("pwrite64", pwrite64Func<RiscvLinux64>)},
159 {69, SyscallDesc("preadv")},
160 {70, SyscallDesc("pwritev")},
161 {71, SyscallDesc("sendfile")},
162 {72, SyscallDesc("pselect6")},
163 {73, SyscallDesc("ppoll")},
164 {74, SyscallDesc("signalfd64")},
165 {75, SyscallDesc("vmsplice")},
166 {76, SyscallDesc("splice")},
167 {77, SyscallDesc("tee")},
168 {78, SyscallDesc("readlinkat", readlinkatFunc<RiscvLinux64>)},
169 {79, SyscallDesc("fstatat", fstatat64Func<RiscvLinux64>)},
170 {80, SyscallDesc("fstat", fstat64Func<RiscvLinux64>)},
171 {81, SyscallDesc("sync")},
172 {82, SyscallDesc("fsync")},
173 {83, SyscallDesc("fdatasync")},
174 {84, SyscallDesc("sync_file_range2")},
175 {85, SyscallDesc("timerfd_create")},
176 {86, SyscallDesc("timerfd_settime")},
177 {87, SyscallDesc("timerfd_gettime")},
178 {88, SyscallDesc("utimensat")},
179 {89, SyscallDesc("acct")},
180 {90, SyscallDesc("capget")},
181 {91, SyscallDesc("capset")},
182 {92, SyscallDesc("personality")},
183 {93, SyscallDesc("exit", exitFunc)},
184 {94, SyscallDesc("exit_group", exitGroupFunc)},
185 {95, SyscallDesc("waitid")},
186 {96, SyscallDesc("set_tid_address", setTidAddressFunc)},
187 {97, SyscallDesc("unshare")},
188 {98, SyscallDesc("futex", futexFunc<RiscvLinux64>)},
189 {99, SyscallDesc("set_robust_list", ignoreFunc, SyscallDesc::WarnOnce)},
190 {100, SyscallDesc("get_robust_list", ignoreFunc, SyscallDesc::WarnOnce)},
191 {101, SyscallDesc("nanosleep", ignoreFunc, SyscallDesc::WarnOnce)},
192 {102, SyscallDesc("getitimer")},
193 {103, SyscallDesc("setitimer")},
194 {104, SyscallDesc("kexec_load")},
195 {105, SyscallDesc("init_module")},
196 {106, SyscallDesc("delete_module")},
197 {107, SyscallDesc("timer_create")},
198 {108, SyscallDesc("timer_gettime")},
199 {109, SyscallDesc("timer_getoverrun")},
200 {110, SyscallDesc("timer_settime")},
201 {111, SyscallDesc("timer_delete")},
202 {112, SyscallDesc("clock_settime")},
203 {113, SyscallDesc("clock_gettime", clock_gettimeFunc<RiscvLinux64>)},
204 {114, SyscallDesc("clock_getres", clock_getresFunc<RiscvLinux64>)},
205 {115, SyscallDesc("clock_nanosleep")},
206 {116, SyscallDesc("syslog")},
207 {117, SyscallDesc("ptrace")},
208 {118, SyscallDesc("sched_setparam")},
209 {119, SyscallDesc("sched_setscheduler")},
210 {120, SyscallDesc("sched_getscheduler")},
211 {121, SyscallDesc("sched_getparam")},
212 {122, SyscallDesc("sched_setaffinity")},
213 {123, SyscallDesc("sched_getaffinity")},
214 {124, SyscallDesc("sched_yield", ignoreFunc, SyscallDesc::WarnOnce)},
215 {125, SyscallDesc("sched_get_priority_max")},
216 {126, SyscallDesc("sched_get_priority_min")},
217 {127, SyscallDesc("scheD_rr_get_interval")},
218 {128, SyscallDesc("restart_syscall")},
219 {129, SyscallDesc("kill")},
220 {130, SyscallDesc("tkill")},
221 {131, SyscallDesc("tgkill", tgkillFunc<RiscvLinux64>)},
222 {132, SyscallDesc("sigaltstack")},
223 {133, SyscallDesc("rt_sigsuspend", ignoreFunc, SyscallDesc::WarnOnce)},
224 {134, SyscallDesc("rt_sigaction", ignoreFunc, SyscallDesc::WarnOnce)},
225 {135, SyscallDesc("rt_sigprocmask", ignoreFunc, SyscallDesc::WarnOnce)},
226 {136, SyscallDesc("rt_sigpending", ignoreFunc, SyscallDesc::WarnOnce)},
227 {137, SyscallDesc("rt_sigtimedwait", ignoreFunc,SyscallDesc::WarnOnce)},
228 {138, SyscallDesc("rt_sigqueueinfo", ignoreFunc,SyscallDesc::WarnOnce)},
229 {139, SyscallDesc("rt_sigreturn", ignoreFunc, SyscallDesc::WarnOnce)},
230 {140, SyscallDesc("setpriority")},
231 {141, SyscallDesc("getpriority")},
232 {142, SyscallDesc("reboot")},
233 {143, SyscallDesc("setregid")},
234 {144, SyscallDesc("setgid")},
235 {145, SyscallDesc("setreuid")},
236 {146, SyscallDesc("setuid", setuidFunc)},
237 {147, SyscallDesc("setresuid")},
238 {148, SyscallDesc("getresuid")},
239 {149, SyscallDesc("getresgid")},
240 {150, SyscallDesc("getresgid")},
241 {151, SyscallDesc("setfsuid")},
242 {152, SyscallDesc("setfsgid")},
243 {153, SyscallDesc("times", timesFunc<RiscvLinux64>)},
244 {154, SyscallDesc("setpgid", setpgidFunc)},
245 {155, SyscallDesc("getpgid")},
246 {156, SyscallDesc("getsid")},
247 {157, SyscallDesc("setsid")},
248 {158, SyscallDesc("getgroups")},
249 {159, SyscallDesc("setgroups")},
250 {160, SyscallDesc("uname", unameFunc64)},
251 {161, SyscallDesc("sethostname")},
252 {162, SyscallDesc("setdomainname")},
253 {163, SyscallDesc("getrlimit", getrlimitFunc<RiscvLinux64>)},
254 {164, SyscallDesc("setrlimit", ignoreFunc)},
255 {165, SyscallDesc("getrusage", getrusageFunc<RiscvLinux64>)},
256 {166, SyscallDesc("umask", umaskFunc)},
257 {167, SyscallDesc("prctl")},
258 {168, SyscallDesc("getcpu")},
259 {169, SyscallDesc("gettimeofday", gettimeofdayFunc<RiscvLinux64>)},
260 {170, SyscallDesc("settimeofday")},
261 {171, SyscallDesc("adjtimex")},
262 {172, SyscallDesc("getpid", getpidFunc)},
263 {173, SyscallDesc("getppid", getppidFunc)},
264 {174, SyscallDesc("getuid", getuidFunc)},
265 {175, SyscallDesc("geteuid", geteuidFunc)},
266 {176, SyscallDesc("getgid", getgidFunc)},
267 {177, SyscallDesc("getegid", getegidFunc)},
268 {178, SyscallDesc("gettid", gettidFunc)},
269 {179, SyscallDesc("sysinfo", sysinfoFunc<RiscvLinux64>)},
270 {180, SyscallDesc("mq_open")},
271 {181, SyscallDesc("mq_unlink")},
272 {182, SyscallDesc("mq_timedsend")},
273 {183, SyscallDesc("mq_timedrecieve")},
274 {184, SyscallDesc("mq_notify")},
275 {185, SyscallDesc("mq_getsetattr")},
276 {186, SyscallDesc("msgget")},
277 {187, SyscallDesc("msgctl")},
278 {188, SyscallDesc("msgrcv")},
279 {189, SyscallDesc("msgsnd")},
280 {190, SyscallDesc("semget")},
281 {191, SyscallDesc("semctl")},
282 {192, SyscallDesc("semtimedop")},
283 {193, SyscallDesc("semop")},
284 {194, SyscallDesc("shmget")},
285 {195, SyscallDesc("shmctl")},
286 {196, SyscallDesc("shmat")},
287 {197, SyscallDesc("shmdt")},
288 {198, SyscallDesc("socket")},
289 {199, SyscallDesc("socketpair")},
290 {200, SyscallDesc("bind")},
291 {201, SyscallDesc("listen")},
292 {202, SyscallDesc("accept")},
293 {203, SyscallDesc("connect")},
294 {204, SyscallDesc("getsockname")},
295 {205, SyscallDesc("getpeername")},
296 {206, SyscallDesc("sendo")},
297 {207, SyscallDesc("recvfrom")},
298 {208, SyscallDesc("setsockopt")},
299 {209, SyscallDesc("getsockopt")},
300 {210, SyscallDesc("shutdown")},
301 {211, SyscallDesc("sendmsg")},
302 {212, SyscallDesc("recvmsg")},
303 {213, SyscallDesc("readahead")},
304 {214, SyscallDesc("brk", brkFunc)},
305 {215, SyscallDesc("munmap", munmapFunc)},
306 {216, SyscallDesc("mremap", mremapFunc<RiscvLinux64>)},
307 {217, SyscallDesc("add_key")},
308 {218, SyscallDesc("request_key")},
309 {219, SyscallDesc("keyctl")},
310 {220, SyscallDesc("clone", cloneFunc<RiscvLinux64>)},
311 {221, SyscallDesc("execve", execveFunc<RiscvLinux64>)},
312 {222, SyscallDesc("mmap", mmapFunc<RiscvLinux64>)},
313 {223, SyscallDesc("fadvise64")},
314 {224, SyscallDesc("swapon")},
315 {225, SyscallDesc("swapoff")},
316 {226, SyscallDesc("mprotect", ignoreFunc)},
317 {227, SyscallDesc("msync", ignoreFunc)},
318 {228, SyscallDesc("mlock", ignoreFunc)},
319 {229, SyscallDesc("munlock", ignoreFunc)},
320 {230, SyscallDesc("mlockall", ignoreFunc)},
321 {231, SyscallDesc("munlockall", ignoreFunc)},
322 {232, SyscallDesc("mincore", ignoreFunc)},
323 {233, SyscallDesc("madvise", ignoreFunc)},
324 {234, SyscallDesc("remap_file_pages")},
325 {235, SyscallDesc("mbind", ignoreFunc)},
326 {236, SyscallDesc("get_mempolicy")},
327 {237, SyscallDesc("set_mempolicy")},
328 {238, SyscallDesc("migrate_pages")},
329 {239, SyscallDesc("move_pages")},
330 {240, SyscallDesc("tgsigqueueinfo")},
331 {241, SyscallDesc("perf_event_open")},
332 {242, SyscallDesc("accept4")},
333 {243, SyscallDesc("recvmmsg")},
334 {260, SyscallDesc("wait4")},
335 {261, SyscallDesc("prlimit64", prlimitFunc<RiscvLinux64>)},
336 {262, SyscallDesc("fanotify_init")},
337 {263, SyscallDesc("fanotify_mark")},
338 {264, SyscallDesc("name_to_handle_at")},
339 {265, SyscallDesc("open_by_handle_at")},
340 {266, SyscallDesc("clock_adjtime")},
341 {267, SyscallDesc("syncfs")},
342 {268, SyscallDesc("setns")},
343 {269, SyscallDesc("sendmmsg")},
344 {270, SyscallDesc("process_vm_ready")},
345 {271, SyscallDesc("process_vm_writev")},
346 {272, SyscallDesc("kcmp")},
347 {273, SyscallDesc("finit_module")},
348 {274, SyscallDesc("sched_setattr")},
349 {275, SyscallDesc("sched_getattr")},
350 {276, SyscallDesc("renameat2")},
351 {277, SyscallDesc("seccomp")},
352 {278, SyscallDesc("getrandom")},
353 {279, SyscallDesc("memfd_create")},
354 {280, SyscallDesc("bpf")},
355 {281, SyscallDesc("execveat")},
356 {282, SyscallDesc("userfaultid")},
357 {283, SyscallDesc("membarrier")},
358 {284, SyscallDesc("mlock2")},
359 {285, SyscallDesc("copy_file_range")},
360 {286, SyscallDesc("preadv2")},
361 {287, SyscallDesc("pwritev2")},
362 {1024, SyscallDesc("open", openFunc<RiscvLinux64>)},
363 {1025, SyscallDesc("link")},
364 {1026, SyscallDesc("unlink", unlinkFunc)},
365 {1027, SyscallDesc("mknod")},
366 {1028, SyscallDesc("chmod", chmodFunc<RiscvLinux64>)},
367 {1029, SyscallDesc("chown", chownFunc)},
368 {1030, SyscallDesc("mkdir", mkdirFunc)},
369 {1031, SyscallDesc("rmdir")},
370 {1032, SyscallDesc("lchown")},
371 {1033, SyscallDesc("access", accessFunc)},
372 {1034, SyscallDesc("rename", renameFunc)},
373 {1035, SyscallDesc("readlink", readlinkFunc)},
374 {1036, SyscallDesc("symlink")},
375 {1037, SyscallDesc("utimes", utimesFunc<RiscvLinux64>)},
376 {1038, SyscallDesc("stat", stat64Func<RiscvLinux64>)},
377 {1039, SyscallDesc("lstat", lstat64Func<RiscvLinux64>)},
378 {1040, SyscallDesc("pipe", pipeFunc)},
379 {1041, SyscallDesc("dup2", dup2Func)},
380 {1042, SyscallDesc("epoll_create")},
381 {1043, SyscallDesc("inotifiy_init")},
382 {1044, SyscallDesc("eventfd")},
383 {1045, SyscallDesc("signalfd")},
384 {1046, SyscallDesc("sendfile")},
385 {1047, SyscallDesc("ftruncate", ftruncate64Func)},
386 {1048, SyscallDesc("truncate", truncate64Func)},
387 {1049, SyscallDesc("stat", stat64Func<RiscvLinux64>)},
388 {1050, SyscallDesc("lstat", lstat64Func<RiscvLinux64>)},
389 {1051, SyscallDesc("fstat", fstat64Func<RiscvLinux64>)},
390 {1052, SyscallDesc("fcntl", fcntl64Func)},
391 {1053, SyscallDesc("fadvise64")},
392 {1054, SyscallDesc("newfstatat")},
393 {1055, SyscallDesc("fstatfs", fstatfsFunc<RiscvLinux64>)},
394 {1056, SyscallDesc("statfs", statfsFunc<RiscvLinux64>)},
395 {1057, SyscallDesc("lseek", lseekFunc)},
396 {1058, SyscallDesc("mmap", mmapFunc<RiscvLinux64>)},
397 {1059, SyscallDesc("alarm")},
398 {1060, SyscallDesc("getpgrp")},
399 {1061, SyscallDesc("pause")},
400 {1062, SyscallDesc("time", timeFunc<RiscvLinux64>)},
401 {1063, SyscallDesc("utime")},
402 {1064, SyscallDesc("creat")},
403 {1065, SyscallDesc("getdents")},
404 {1066, SyscallDesc("futimesat")},
405 {1067, SyscallDesc("select")},
406 {1068, SyscallDesc("poll")},
407 {1069, SyscallDesc("epoll_wait")},
408 {1070, SyscallDesc("ustat")},
409 {1071, SyscallDesc("vfork")},
410 {1072, SyscallDesc("oldwait4")},
411 {1073, SyscallDesc("recv")},
412 {1074, SyscallDesc("send")},
413 {1075, SyscallDesc("bdflush")},
414 {1076, SyscallDesc("umount")},
415 {1077, SyscallDesc("uselib")},
416 {1078, SyscallDesc("sysctl")},
417 {1079, SyscallDesc("fork")},
418 {2011, SyscallDesc("getmainvars")}
419};
420
421std::map<int, SyscallDesc> RiscvLinuxProcess32::syscallDescs = {
422 {0, SyscallDesc("io_setup")},
423 {1, SyscallDesc("io_destroy")},
424 {2, SyscallDesc("io_submit")},
425 {3, SyscallDesc("io_cancel")},
426 {4, SyscallDesc("io_getevents")},
427 {5, SyscallDesc("setxattr")},
428 {6, SyscallDesc("lsetxattr")},
429 {7, SyscallDesc("fsetxattr")},
430 {8, SyscallDesc("getxattr")},
431 {9, SyscallDesc("lgetxattr")},
432 {10, SyscallDesc("fgetxattr")},
433 {11, SyscallDesc("listxattr")},
434 {12, SyscallDesc("llistxattr")},
435 {13, SyscallDesc("flistxattr")},
436 {14, SyscallDesc("removexattr")},
437 {15, SyscallDesc("lremovexattr")},
438 {16, SyscallDesc("fremovexattr")},
439 {17, SyscallDesc("getcwd", getcwdFunc)},
440 {18, SyscallDesc("lookup_dcookie")},
441 {19, SyscallDesc("eventfd2")},
442 {20, SyscallDesc("epoll_create1")},
443 {21, SyscallDesc("epoll_ctl")},
444 {22, SyscallDesc("epoll_pwait")},
445 {23, SyscallDesc("dup", dupFunc)},
446 {24, SyscallDesc("dup3")},
447 {25, SyscallDesc("fcntl", fcntlFunc)},
448 {26, SyscallDesc("inotify_init1")},
449 {27, SyscallDesc("inotify_add_watch")},
450 {28, SyscallDesc("inotify_rm_watch")},
451 {29, SyscallDesc("ioctl", ioctlFunc<RiscvLinux32>)},
452 {30, SyscallDesc("ioprio_get")},
453 {31, SyscallDesc("ioprio_set")},
454 {32, SyscallDesc("flock")},
455 {33, SyscallDesc("mknodat")},
456 {34, SyscallDesc("mkdirat")},
457 {35, SyscallDesc("unlinkat", unlinkatFunc<RiscvLinux32>)},
458 {36, SyscallDesc("symlinkat")},
459 {37, SyscallDesc("linkat")},
460 {38, SyscallDesc("renameat", renameatFunc<RiscvLinux32>)},
461 {39, SyscallDesc("umount2")},
462 {40, SyscallDesc("mount")},
463 {41, SyscallDesc("pivot_root")},
464 {42, SyscallDesc("nfsservctl")},
465 {43, SyscallDesc("statfs", statfsFunc<RiscvLinux32>)},
466 {44, SyscallDesc("fstatfs", fstatfsFunc<RiscvLinux32>)},
467 {45, SyscallDesc("truncate", truncateFunc)},
468 {46, SyscallDesc("ftruncate", ftruncateFunc)},
469 {47, SyscallDesc("fallocate", fallocateFunc)},
470 {48, SyscallDesc("faccessat", faccessatFunc<RiscvLinux32>)},
471 {49, SyscallDesc("chdir")},
472 {50, SyscallDesc("fchdir")},
473 {51, SyscallDesc("chroot")},
474 {52, SyscallDesc("fchmod", fchmodFunc<RiscvLinux32>)},
475 {53, SyscallDesc("fchmodat")},
476 {54, SyscallDesc("fchownat")},
477 {55, SyscallDesc("fchown", fchownFunc)},
478 {56, SyscallDesc("openat", openatFunc<RiscvLinux32>)},
479 {57, SyscallDesc("close", closeFunc)},
480 {58, SyscallDesc("vhangup")},
481 {59, SyscallDesc("pipe2")},
482 {60, SyscallDesc("quotactl")},
483 {61, SyscallDesc("getdents64")},
484 {62, SyscallDesc("lseek", lseekFunc)},
485 {63, SyscallDesc("read", readFunc<RiscvLinux32>)},
486 {64, SyscallDesc("write", writeFunc<RiscvLinux32>)},
487 {66, SyscallDesc("writev", writevFunc<RiscvLinux32>)},
488 {67, SyscallDesc("pread64")},
489 {68, SyscallDesc("pwrite64", pwrite64Func<RiscvLinux32>)},
490 {69, SyscallDesc("preadv")},
491 {70, SyscallDesc("pwritev")},
492 {71, SyscallDesc("sendfile")},
493 {72, SyscallDesc("pselect6")},
494 {73, SyscallDesc("ppoll")},
495 {74, SyscallDesc("signalfd64")},
496 {75, SyscallDesc("vmsplice")},
497 {76, SyscallDesc("splice")},
498 {77, SyscallDesc("tee")},
499 {78, SyscallDesc("readlinkat", readlinkatFunc<RiscvLinux32>)},
500 {79, SyscallDesc("fstatat")},
501 {80, SyscallDesc("fstat", fstatFunc<RiscvLinux32>)},
502 {81, SyscallDesc("sync")},
503 {82, SyscallDesc("fsync")},
504 {83, SyscallDesc("fdatasync")},
505 {84, SyscallDesc("sync_file_range2")},
506 {85, SyscallDesc("timerfd_create")},
507 {86, SyscallDesc("timerfd_settime")},
508 {87, SyscallDesc("timerfd_gettime")},
509 {88, SyscallDesc("utimensat")},
510 {89, SyscallDesc("acct")},
511 {90, SyscallDesc("capget")},
512 {91, SyscallDesc("capset")},
513 {92, SyscallDesc("personality")},
514 {93, SyscallDesc("exit", exitFunc)},
515 {94, SyscallDesc("exit_group", exitGroupFunc)},
516 {95, SyscallDesc("waitid")},
517 {96, SyscallDesc("set_tid_address", setTidAddressFunc)},
518 {97, SyscallDesc("unshare")},
519 {98, SyscallDesc("futex", futexFunc<RiscvLinux32>)},
520 {99, SyscallDesc("set_robust_list", ignoreFunc, SyscallDesc::WarnOnce)},
521 {100, SyscallDesc("get_robust_list", ignoreFunc, SyscallDesc::WarnOnce)},
522 {101, SyscallDesc("nanosleep")},
523 {102, SyscallDesc("getitimer")},
524 {103, SyscallDesc("setitimer")},
525 {104, SyscallDesc("kexec_load")},
526 {105, SyscallDesc("init_module")},
527 {106, SyscallDesc("delete_module")},
528 {107, SyscallDesc("timer_create")},
529 {108, SyscallDesc("timer_gettime")},
530 {109, SyscallDesc("timer_getoverrun")},
531 {110, SyscallDesc("timer_settime")},
532 {111, SyscallDesc("timer_delete")},
533 {112, SyscallDesc("clock_settime")},
534 {113, SyscallDesc("clock_gettime", clock_gettimeFunc<RiscvLinux32>)},
535 {114, SyscallDesc("clock_getres", clock_getresFunc<RiscvLinux32>)},
536 {115, SyscallDesc("clock_nanosleep")},
537 {116, SyscallDesc("syslog")},
538 {117, SyscallDesc("ptrace")},
539 {118, SyscallDesc("sched_setparam")},
540 {119, SyscallDesc("sched_setscheduler")},
541 {120, SyscallDesc("sched_getscheduler")},
542 {121, SyscallDesc("sched_getparam")},
543 {122, SyscallDesc("sched_setaffinity")},
544 {123, SyscallDesc("sched_getaffinity")},
545 {124, SyscallDesc("sched_yield", ignoreFunc, SyscallDesc::WarnOnce)},
546 {125, SyscallDesc("sched_get_priority_max")},
547 {126, SyscallDesc("sched_get_priority_min")},
548 {127, SyscallDesc("scheD_rr_get_interval")},
549 {128, SyscallDesc("restart_syscall")},
550 {129, SyscallDesc("kill")},
551 {130, SyscallDesc("tkill")},
552 {131, SyscallDesc("tgkill", tgkillFunc<RiscvLinux32>)},
553 {132, SyscallDesc("sigaltstack")},
554 {133, SyscallDesc("rt_sigsuspend", ignoreFunc, SyscallDesc::WarnOnce)},
555 {134, SyscallDesc("rt_sigaction", ignoreFunc, SyscallDesc::WarnOnce)},
556 {135, SyscallDesc("rt_sigprocmask", ignoreFunc, SyscallDesc::WarnOnce)},
557 {136, SyscallDesc("rt_sigpending", ignoreFunc, SyscallDesc::WarnOnce)},
558 {137, SyscallDesc("rt_sigtimedwait", ignoreFunc,SyscallDesc::WarnOnce)},
559 {138, SyscallDesc("rt_sigqueueinfo", ignoreFunc,SyscallDesc::WarnOnce)},
560 {139, SyscallDesc("rt_sigreturn", ignoreFunc, SyscallDesc::WarnOnce)},
561 {140, SyscallDesc("setpriority")},
562 {141, SyscallDesc("getpriority")},
563 {142, SyscallDesc("reboot")},
564 {143, SyscallDesc("setregid")},
565 {144, SyscallDesc("setgid")},
566 {145, SyscallDesc("setreuid")},
567 {146, SyscallDesc("setuid", setuidFunc)},
568 {147, SyscallDesc("setresuid")},
569 {148, SyscallDesc("getresuid")},
570 {149, SyscallDesc("getresgid")},
571 {150, SyscallDesc("getresgid")},
572 {151, SyscallDesc("setfsuid")},
573 {152, SyscallDesc("setfsgid")},
574 {153, SyscallDesc("times", timesFunc<RiscvLinux32>)},
575 {154, SyscallDesc("setpgid", setpgidFunc)},
576 {155, SyscallDesc("getpgid")},
577 {156, SyscallDesc("getsid")},
578 {157, SyscallDesc("setsid")},
579 {158, SyscallDesc("getgroups")},
580 {159, SyscallDesc("setgroups")},
581 {160, SyscallDesc("uname", unameFunc32)},
582 {161, SyscallDesc("sethostname")},
583 {162, SyscallDesc("setdomainname")},
584 {163, SyscallDesc("getrlimit", getrlimitFunc<RiscvLinux32>)},
585 {164, SyscallDesc("setrlimit", ignoreFunc)},
586 {165, SyscallDesc("getrusage", getrusageFunc<RiscvLinux32>)},
587 {166, SyscallDesc("umask", umaskFunc)},
588 {167, SyscallDesc("prctl")},
589 {168, SyscallDesc("getcpu")},
590 {169, SyscallDesc("gettimeofday", gettimeofdayFunc<RiscvLinux32>)},
591 {170, SyscallDesc("settimeofday")},
592 {171, SyscallDesc("adjtimex")},
593 {172, SyscallDesc("getpid", getpidFunc)},
594 {173, SyscallDesc("getppid", getppidFunc)},
595 {174, SyscallDesc("getuid", getuidFunc)},
596 {175, SyscallDesc("geteuid", geteuidFunc)},
597 {176, SyscallDesc("getgid", getgidFunc)},
598 {177, SyscallDesc("getegid", getegidFunc)},
599 {178, SyscallDesc("gettid", gettidFunc)},
600 {179, SyscallDesc("sysinfo", sysinfoFunc<RiscvLinux32>)},
601 {180, SyscallDesc("mq_open")},
602 {181, SyscallDesc("mq_unlink")},
603 {182, SyscallDesc("mq_timedsend")},
604 {183, SyscallDesc("mq_timedrecieve")},
605 {184, SyscallDesc("mq_notify")},
606 {185, SyscallDesc("mq_getsetattr")},
607 {186, SyscallDesc("msgget")},
608 {187, SyscallDesc("msgctl")},
609 {188, SyscallDesc("msgrcv")},
610 {189, SyscallDesc("msgsnd")},
611 {190, SyscallDesc("semget")},
612 {191, SyscallDesc("semctl")},
613 {192, SyscallDesc("semtimedop")},
614 {193, SyscallDesc("semop")},
615 {194, SyscallDesc("shmget")},
616 {195, SyscallDesc("shmctl")},
617 {196, SyscallDesc("shmat")},
618 {197, SyscallDesc("shmdt")},
619 {198, SyscallDesc("socket")},
620 {199, SyscallDesc("socketpair")},
621 {200, SyscallDesc("bind")},
622 {201, SyscallDesc("listen")},
623 {202, SyscallDesc("accept")},
624 {203, SyscallDesc("connect")},
625 {204, SyscallDesc("getsockname")},
626 {205, SyscallDesc("getpeername")},
627 {206, SyscallDesc("sendo")},
628 {207, SyscallDesc("recvfrom")},
629 {208, SyscallDesc("setsockopt")},
630 {209, SyscallDesc("getsockopt")},
631 {210, SyscallDesc("shutdown")},
632 {211, SyscallDesc("sendmsg")},
633 {212, SyscallDesc("recvmsg")},
634 {213, SyscallDesc("readahead")},
635 {214, SyscallDesc("brk", brkFunc)},
636 {215, SyscallDesc("munmap", munmapFunc)},
637 {216, SyscallDesc("mremap", mremapFunc<RiscvLinux32>)},
638 {217, SyscallDesc("add_key")},
639 {218, SyscallDesc("request_key")},
640 {219, SyscallDesc("keyctl")},
641 {220, SyscallDesc("clone", cloneFunc<RiscvLinux32>)},
642 {221, SyscallDesc("execve", execveFunc<RiscvLinux32>)},
643 {222, SyscallDesc("mmap", mmapFunc<RiscvLinux32>)},
644 {223, SyscallDesc("fadvise64")},
645 {224, SyscallDesc("swapon")},
646 {225, SyscallDesc("swapoff")},
647 {226, SyscallDesc("mprotect", ignoreFunc)},
648 {227, SyscallDesc("msync", ignoreFunc)},
649 {228, SyscallDesc("mlock", ignoreFunc)},
650 {229, SyscallDesc("munlock", ignoreFunc)},
651 {230, SyscallDesc("mlockall", ignoreFunc)},
652 {231, SyscallDesc("munlockall", ignoreFunc)},
653 {232, SyscallDesc("mincore", ignoreFunc)},
654 {233, SyscallDesc("madvise", ignoreFunc)},
655 {234, SyscallDesc("remap_file_pages")},
656 {235, SyscallDesc("mbind", ignoreFunc)},
657 {236, SyscallDesc("get_mempolicy")},
658 {237, SyscallDesc("set_mempolicy")},
659 {238, SyscallDesc("migrate_pages")},
660 {239, SyscallDesc("move_pages")},
661 {240, SyscallDesc("tgsigqueueinfo")},
662 {241, SyscallDesc("perf_event_open")},
663 {242, SyscallDesc("accept4")},
664 {243, SyscallDesc("recvmmsg")},
665 {260, SyscallDesc("wait4")},
666 {261, SyscallDesc("prlimit64", prlimitFunc<RiscvLinux32>)},
667 {262, SyscallDesc("fanotify_init")},
668 {263, SyscallDesc("fanotify_mark")},
669 {264, SyscallDesc("name_to_handle_at")},
670 {265, SyscallDesc("open_by_handle_at")},
671 {266, SyscallDesc("clock_adjtime")},
672 {267, SyscallDesc("syncfs")},
673 {268, SyscallDesc("setns")},
674 {269, SyscallDesc("sendmmsg")},
675 {270, SyscallDesc("process_vm_ready")},
676 {271, SyscallDesc("process_vm_writev")},
677 {272, SyscallDesc("kcmp")},
678 {273, SyscallDesc("finit_module")},
679 {274, SyscallDesc("sched_setattr")},
680 {275, SyscallDesc("sched_getattr")},
681 {276, SyscallDesc("renameat2")},
682 {277, SyscallDesc("seccomp")},
683 {278, SyscallDesc("getrandom")},
684 {279, SyscallDesc("memfd_create")},
685 {280, SyscallDesc("bpf")},
686 {281, SyscallDesc("execveat")},
687 {282, SyscallDesc("userfaultid")},
688 {283, SyscallDesc("membarrier")},
689 {284, SyscallDesc("mlock2")},
690 {285, SyscallDesc("copy_file_range")},
691 {286, SyscallDesc("preadv2")},
692 {287, SyscallDesc("pwritev2")},
693 {1024, SyscallDesc("open", openFunc<RiscvLinux32>)},
694 {1025, SyscallDesc("link")},
695 {1026, SyscallDesc("unlink", unlinkFunc)},
696 {1027, SyscallDesc("mknod")},
697 {1028, SyscallDesc("chmod", chmodFunc<RiscvLinux32>)},
698 {1029, SyscallDesc("chown", chownFunc)},
699 {1030, SyscallDesc("mkdir", mkdirFunc)},
700 {1031, SyscallDesc("rmdir")},
701 {1032, SyscallDesc("lchown")},
702 {1033, SyscallDesc("access", accessFunc)},
703 {1034, SyscallDesc("rename", renameFunc)},
704 {1035, SyscallDesc("readlink", readlinkFunc)},
705 {1036, SyscallDesc("symlink")},
706 {1037, SyscallDesc("utimes", utimesFunc<RiscvLinux32>)},
707 {1038, SyscallDesc("stat", statFunc<RiscvLinux32>)},
708 {1039, SyscallDesc("lstat", lstatFunc<RiscvLinux32>)},
709 {1040, SyscallDesc("pipe", pipeFunc)},
710 {1041, SyscallDesc("dup2", dup2Func)},
711 {1042, SyscallDesc("epoll_create")},
712 {1043, SyscallDesc("inotifiy_init")},
713 {1044, SyscallDesc("eventfd")},
714 {1045, SyscallDesc("signalfd")},
715 {1046, SyscallDesc("sendfile")},
716 {1047, SyscallDesc("ftruncate", ftruncateFunc)},
717 {1048, SyscallDesc("truncate", truncateFunc)},
718 {1049, SyscallDesc("stat", statFunc<RiscvLinux32>)},
719 {1050, SyscallDesc("lstat", lstatFunc<RiscvLinux32>)},
720 {1051, SyscallDesc("fstat", fstatFunc<RiscvLinux32>)},
721 {1052, SyscallDesc("fcntl", fcntlFunc)},
722 {1053, SyscallDesc("fadvise64")},
723 {1054, SyscallDesc("newfstatat")},
724 {1055, SyscallDesc("fstatfs", fstatfsFunc<RiscvLinux32>)},
725 {1056, SyscallDesc("statfs", statfsFunc<RiscvLinux32>)},
726 {1057, SyscallDesc("lseek", lseekFunc)},
727 {1058, SyscallDesc("mmap", mmapFunc<RiscvLinux32>)},
728 {1059, SyscallDesc("alarm")},
729 {1060, SyscallDesc("getpgrp")},
730 {1061, SyscallDesc("pause")},
731 {1062, SyscallDesc("time", timeFunc<RiscvLinux32>)},
732 {1063, SyscallDesc("utime")},
733 {1064, SyscallDesc("creat")},
734 {1065, SyscallDesc("getdents")},
735 {1066, SyscallDesc("futimesat")},
736 {1067, SyscallDesc("select")},
737 {1068, SyscallDesc("poll")},
738 {1069, SyscallDesc("epoll_wait")},
739 {1070, SyscallDesc("ustat")},
740 {1071, SyscallDesc("vfork")},
741 {1072, SyscallDesc("oldwait4")},
742 {1073, SyscallDesc("recv")},
743 {1074, SyscallDesc("send")},
744 {1075, SyscallDesc("bdflush")},
745 {1076, SyscallDesc("umount")},
746 {1077, SyscallDesc("uselib")},
747 {1078, SyscallDesc("sysctl")},
748 {1079, SyscallDesc("fork")},
749 {2011, SyscallDesc("getmainvars")}
750};
751
752RiscvLinuxProcess64::RiscvLinuxProcess64(ProcessParams * params,
753 ObjectFile *objFile) : RiscvProcess64(params, objFile)
754{}
755
756SyscallDesc*
757RiscvLinuxProcess64::getDesc(int callnum)
758{
759 return syscallDescs.find(callnum) != syscallDescs.end() ?
760 &syscallDescs.at(callnum) : nullptr;
761}
762
763RiscvLinuxProcess32::RiscvLinuxProcess32(ProcessParams * params,
764 ObjectFile *objFile) : RiscvProcess32(params, objFile)
765{}
766
767SyscallDesc*
768RiscvLinuxProcess32::getDesc(int callnum)
769{
770 return syscallDescs.find(callnum) != syscallDescs.end() ?
771 &syscallDescs.at(callnum) : nullptr;
772}
89/// Target uname() handler.
90static SyscallReturn
91unameFunc64(SyscallDesc *desc, int callnum, Process *process,
92 ThreadContext *tc)
93{
94 int index = 0;
95 TypedBufferArg<Linux::utsname> name(process->getSyscallArg(tc, index));
96
97 strcpy(name->sysname, "Linux");
98 strcpy(name->nodename,"sim.gem5.org");
99 strcpy(name->release, "3.0.0");
100 strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003");
101 strcpy(name->machine, "riscv64");
102
103 name.copyOut(tc->getMemProxy());
104 return 0;
105}
106
107/// Target uname() handler.
108static SyscallReturn
109unameFunc32(SyscallDesc *desc, int callnum, Process *process,
110 ThreadContext *tc)
111{
112 int index = 0;
113 TypedBufferArg<Linux::utsname> name(process->getSyscallArg(tc, index));
114
115 strcpy(name->sysname, "Linux");
116 strcpy(name->nodename,"sim.gem5.org");
117 strcpy(name->release, "3.0.0");
118 strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003");
119 strcpy(name->machine, "riscv32");
120
121 name.copyOut(tc->getMemProxy());
122 return 0;
123}
124
125std::map<int, SyscallDesc> RiscvLinuxProcess64::syscallDescs = {
126 {0, SyscallDesc("io_setup")},
127 {1, SyscallDesc("io_destroy")},
128 {2, SyscallDesc("io_submit")},
129 {3, SyscallDesc("io_cancel")},
130 {4, SyscallDesc("io_getevents")},
131 {5, SyscallDesc("setxattr")},
132 {6, SyscallDesc("lsetxattr")},
133 {7, SyscallDesc("fsetxattr")},
134 {8, SyscallDesc("getxattr")},
135 {9, SyscallDesc("lgetxattr")},
136 {10, SyscallDesc("fgetxattr")},
137 {11, SyscallDesc("listxattr")},
138 {12, SyscallDesc("llistxattr")},
139 {13, SyscallDesc("flistxattr")},
140 {14, SyscallDesc("removexattr")},
141 {15, SyscallDesc("lremovexattr")},
142 {16, SyscallDesc("fremovexattr")},
143 {17, SyscallDesc("getcwd", getcwdFunc)},
144 {18, SyscallDesc("lookup_dcookie")},
145 {19, SyscallDesc("eventfd2")},
146 {20, SyscallDesc("epoll_create1")},
147 {21, SyscallDesc("epoll_ctl")},
148 {22, SyscallDesc("epoll_pwait")},
149 {23, SyscallDesc("dup", dupFunc)},
150 {24, SyscallDesc("dup3")},
151 {25, SyscallDesc("fcntl", fcntl64Func)},
152 {26, SyscallDesc("inotify_init1")},
153 {27, SyscallDesc("inotify_add_watch")},
154 {28, SyscallDesc("inotify_rm_watch")},
155 {29, SyscallDesc("ioctl", ioctlFunc<RiscvLinux64>)},
156 {30, SyscallDesc("ioprio_get")},
157 {31, SyscallDesc("ioprio_set")},
158 {32, SyscallDesc("flock")},
159 {33, SyscallDesc("mknodat")},
160 {34, SyscallDesc("mkdirat")},
161 {35, SyscallDesc("unlinkat", unlinkatFunc<RiscvLinux64>)},
162 {36, SyscallDesc("symlinkat")},
163 {37, SyscallDesc("linkat")},
164 {38, SyscallDesc("renameat", renameatFunc<RiscvLinux64>)},
165 {39, SyscallDesc("umount2")},
166 {40, SyscallDesc("mount")},
167 {41, SyscallDesc("pivot_root")},
168 {42, SyscallDesc("nfsservctl")},
169 {43, SyscallDesc("statfs", statfsFunc<RiscvLinux64>)},
170 {44, SyscallDesc("fstatfs", fstatfsFunc<RiscvLinux64>)},
171 {45, SyscallDesc("truncate", truncateFunc)},
172 {46, SyscallDesc("ftruncate", ftruncate64Func)},
173 {47, SyscallDesc("fallocate", fallocateFunc)},
174 {48, SyscallDesc("faccessat", faccessatFunc<RiscvLinux64>)},
175 {49, SyscallDesc("chdir")},
176 {50, SyscallDesc("fchdir")},
177 {51, SyscallDesc("chroot")},
178 {52, SyscallDesc("fchmod", fchmodFunc<RiscvLinux64>)},
179 {53, SyscallDesc("fchmodat")},
180 {54, SyscallDesc("fchownat")},
181 {55, SyscallDesc("fchown", fchownFunc)},
182 {56, SyscallDesc("openat", openatFunc<RiscvLinux64>)},
183 {57, SyscallDesc("close", closeFunc)},
184 {58, SyscallDesc("vhangup")},
185 {59, SyscallDesc("pipe2")},
186 {60, SyscallDesc("quotactl")},
187 {61, SyscallDesc("getdents64")},
188 {62, SyscallDesc("lseek", lseekFunc)},
189 {63, SyscallDesc("read", readFunc<RiscvLinux64>)},
190 {64, SyscallDesc("write", writeFunc<RiscvLinux64>)},
191 {66, SyscallDesc("writev", writevFunc<RiscvLinux64>)},
192 {67, SyscallDesc("pread64")},
193 {68, SyscallDesc("pwrite64", pwrite64Func<RiscvLinux64>)},
194 {69, SyscallDesc("preadv")},
195 {70, SyscallDesc("pwritev")},
196 {71, SyscallDesc("sendfile")},
197 {72, SyscallDesc("pselect6")},
198 {73, SyscallDesc("ppoll")},
199 {74, SyscallDesc("signalfd64")},
200 {75, SyscallDesc("vmsplice")},
201 {76, SyscallDesc("splice")},
202 {77, SyscallDesc("tee")},
203 {78, SyscallDesc("readlinkat", readlinkatFunc<RiscvLinux64>)},
204 {79, SyscallDesc("fstatat", fstatat64Func<RiscvLinux64>)},
205 {80, SyscallDesc("fstat", fstat64Func<RiscvLinux64>)},
206 {81, SyscallDesc("sync")},
207 {82, SyscallDesc("fsync")},
208 {83, SyscallDesc("fdatasync")},
209 {84, SyscallDesc("sync_file_range2")},
210 {85, SyscallDesc("timerfd_create")},
211 {86, SyscallDesc("timerfd_settime")},
212 {87, SyscallDesc("timerfd_gettime")},
213 {88, SyscallDesc("utimensat")},
214 {89, SyscallDesc("acct")},
215 {90, SyscallDesc("capget")},
216 {91, SyscallDesc("capset")},
217 {92, SyscallDesc("personality")},
218 {93, SyscallDesc("exit", exitFunc)},
219 {94, SyscallDesc("exit_group", exitGroupFunc)},
220 {95, SyscallDesc("waitid")},
221 {96, SyscallDesc("set_tid_address", setTidAddressFunc)},
222 {97, SyscallDesc("unshare")},
223 {98, SyscallDesc("futex", futexFunc<RiscvLinux64>)},
224 {99, SyscallDesc("set_robust_list", ignoreFunc, SyscallDesc::WarnOnce)},
225 {100, SyscallDesc("get_robust_list", ignoreFunc, SyscallDesc::WarnOnce)},
226 {101, SyscallDesc("nanosleep", ignoreFunc, SyscallDesc::WarnOnce)},
227 {102, SyscallDesc("getitimer")},
228 {103, SyscallDesc("setitimer")},
229 {104, SyscallDesc("kexec_load")},
230 {105, SyscallDesc("init_module")},
231 {106, SyscallDesc("delete_module")},
232 {107, SyscallDesc("timer_create")},
233 {108, SyscallDesc("timer_gettime")},
234 {109, SyscallDesc("timer_getoverrun")},
235 {110, SyscallDesc("timer_settime")},
236 {111, SyscallDesc("timer_delete")},
237 {112, SyscallDesc("clock_settime")},
238 {113, SyscallDesc("clock_gettime", clock_gettimeFunc<RiscvLinux64>)},
239 {114, SyscallDesc("clock_getres", clock_getresFunc<RiscvLinux64>)},
240 {115, SyscallDesc("clock_nanosleep")},
241 {116, SyscallDesc("syslog")},
242 {117, SyscallDesc("ptrace")},
243 {118, SyscallDesc("sched_setparam")},
244 {119, SyscallDesc("sched_setscheduler")},
245 {120, SyscallDesc("sched_getscheduler")},
246 {121, SyscallDesc("sched_getparam")},
247 {122, SyscallDesc("sched_setaffinity")},
248 {123, SyscallDesc("sched_getaffinity")},
249 {124, SyscallDesc("sched_yield", ignoreFunc, SyscallDesc::WarnOnce)},
250 {125, SyscallDesc("sched_get_priority_max")},
251 {126, SyscallDesc("sched_get_priority_min")},
252 {127, SyscallDesc("scheD_rr_get_interval")},
253 {128, SyscallDesc("restart_syscall")},
254 {129, SyscallDesc("kill")},
255 {130, SyscallDesc("tkill")},
256 {131, SyscallDesc("tgkill", tgkillFunc<RiscvLinux64>)},
257 {132, SyscallDesc("sigaltstack")},
258 {133, SyscallDesc("rt_sigsuspend", ignoreFunc, SyscallDesc::WarnOnce)},
259 {134, SyscallDesc("rt_sigaction", ignoreFunc, SyscallDesc::WarnOnce)},
260 {135, SyscallDesc("rt_sigprocmask", ignoreFunc, SyscallDesc::WarnOnce)},
261 {136, SyscallDesc("rt_sigpending", ignoreFunc, SyscallDesc::WarnOnce)},
262 {137, SyscallDesc("rt_sigtimedwait", ignoreFunc,SyscallDesc::WarnOnce)},
263 {138, SyscallDesc("rt_sigqueueinfo", ignoreFunc,SyscallDesc::WarnOnce)},
264 {139, SyscallDesc("rt_sigreturn", ignoreFunc, SyscallDesc::WarnOnce)},
265 {140, SyscallDesc("setpriority")},
266 {141, SyscallDesc("getpriority")},
267 {142, SyscallDesc("reboot")},
268 {143, SyscallDesc("setregid")},
269 {144, SyscallDesc("setgid")},
270 {145, SyscallDesc("setreuid")},
271 {146, SyscallDesc("setuid", setuidFunc)},
272 {147, SyscallDesc("setresuid")},
273 {148, SyscallDesc("getresuid")},
274 {149, SyscallDesc("getresgid")},
275 {150, SyscallDesc("getresgid")},
276 {151, SyscallDesc("setfsuid")},
277 {152, SyscallDesc("setfsgid")},
278 {153, SyscallDesc("times", timesFunc<RiscvLinux64>)},
279 {154, SyscallDesc("setpgid", setpgidFunc)},
280 {155, SyscallDesc("getpgid")},
281 {156, SyscallDesc("getsid")},
282 {157, SyscallDesc("setsid")},
283 {158, SyscallDesc("getgroups")},
284 {159, SyscallDesc("setgroups")},
285 {160, SyscallDesc("uname", unameFunc64)},
286 {161, SyscallDesc("sethostname")},
287 {162, SyscallDesc("setdomainname")},
288 {163, SyscallDesc("getrlimit", getrlimitFunc<RiscvLinux64>)},
289 {164, SyscallDesc("setrlimit", ignoreFunc)},
290 {165, SyscallDesc("getrusage", getrusageFunc<RiscvLinux64>)},
291 {166, SyscallDesc("umask", umaskFunc)},
292 {167, SyscallDesc("prctl")},
293 {168, SyscallDesc("getcpu")},
294 {169, SyscallDesc("gettimeofday", gettimeofdayFunc<RiscvLinux64>)},
295 {170, SyscallDesc("settimeofday")},
296 {171, SyscallDesc("adjtimex")},
297 {172, SyscallDesc("getpid", getpidFunc)},
298 {173, SyscallDesc("getppid", getppidFunc)},
299 {174, SyscallDesc("getuid", getuidFunc)},
300 {175, SyscallDesc("geteuid", geteuidFunc)},
301 {176, SyscallDesc("getgid", getgidFunc)},
302 {177, SyscallDesc("getegid", getegidFunc)},
303 {178, SyscallDesc("gettid", gettidFunc)},
304 {179, SyscallDesc("sysinfo", sysinfoFunc<RiscvLinux64>)},
305 {180, SyscallDesc("mq_open")},
306 {181, SyscallDesc("mq_unlink")},
307 {182, SyscallDesc("mq_timedsend")},
308 {183, SyscallDesc("mq_timedrecieve")},
309 {184, SyscallDesc("mq_notify")},
310 {185, SyscallDesc("mq_getsetattr")},
311 {186, SyscallDesc("msgget")},
312 {187, SyscallDesc("msgctl")},
313 {188, SyscallDesc("msgrcv")},
314 {189, SyscallDesc("msgsnd")},
315 {190, SyscallDesc("semget")},
316 {191, SyscallDesc("semctl")},
317 {192, SyscallDesc("semtimedop")},
318 {193, SyscallDesc("semop")},
319 {194, SyscallDesc("shmget")},
320 {195, SyscallDesc("shmctl")},
321 {196, SyscallDesc("shmat")},
322 {197, SyscallDesc("shmdt")},
323 {198, SyscallDesc("socket")},
324 {199, SyscallDesc("socketpair")},
325 {200, SyscallDesc("bind")},
326 {201, SyscallDesc("listen")},
327 {202, SyscallDesc("accept")},
328 {203, SyscallDesc("connect")},
329 {204, SyscallDesc("getsockname")},
330 {205, SyscallDesc("getpeername")},
331 {206, SyscallDesc("sendo")},
332 {207, SyscallDesc("recvfrom")},
333 {208, SyscallDesc("setsockopt")},
334 {209, SyscallDesc("getsockopt")},
335 {210, SyscallDesc("shutdown")},
336 {211, SyscallDesc("sendmsg")},
337 {212, SyscallDesc("recvmsg")},
338 {213, SyscallDesc("readahead")},
339 {214, SyscallDesc("brk", brkFunc)},
340 {215, SyscallDesc("munmap", munmapFunc)},
341 {216, SyscallDesc("mremap", mremapFunc<RiscvLinux64>)},
342 {217, SyscallDesc("add_key")},
343 {218, SyscallDesc("request_key")},
344 {219, SyscallDesc("keyctl")},
345 {220, SyscallDesc("clone", cloneFunc<RiscvLinux64>)},
346 {221, SyscallDesc("execve", execveFunc<RiscvLinux64>)},
347 {222, SyscallDesc("mmap", mmapFunc<RiscvLinux64>)},
348 {223, SyscallDesc("fadvise64")},
349 {224, SyscallDesc("swapon")},
350 {225, SyscallDesc("swapoff")},
351 {226, SyscallDesc("mprotect", ignoreFunc)},
352 {227, SyscallDesc("msync", ignoreFunc)},
353 {228, SyscallDesc("mlock", ignoreFunc)},
354 {229, SyscallDesc("munlock", ignoreFunc)},
355 {230, SyscallDesc("mlockall", ignoreFunc)},
356 {231, SyscallDesc("munlockall", ignoreFunc)},
357 {232, SyscallDesc("mincore", ignoreFunc)},
358 {233, SyscallDesc("madvise", ignoreFunc)},
359 {234, SyscallDesc("remap_file_pages")},
360 {235, SyscallDesc("mbind", ignoreFunc)},
361 {236, SyscallDesc("get_mempolicy")},
362 {237, SyscallDesc("set_mempolicy")},
363 {238, SyscallDesc("migrate_pages")},
364 {239, SyscallDesc("move_pages")},
365 {240, SyscallDesc("tgsigqueueinfo")},
366 {241, SyscallDesc("perf_event_open")},
367 {242, SyscallDesc("accept4")},
368 {243, SyscallDesc("recvmmsg")},
369 {260, SyscallDesc("wait4")},
370 {261, SyscallDesc("prlimit64", prlimitFunc<RiscvLinux64>)},
371 {262, SyscallDesc("fanotify_init")},
372 {263, SyscallDesc("fanotify_mark")},
373 {264, SyscallDesc("name_to_handle_at")},
374 {265, SyscallDesc("open_by_handle_at")},
375 {266, SyscallDesc("clock_adjtime")},
376 {267, SyscallDesc("syncfs")},
377 {268, SyscallDesc("setns")},
378 {269, SyscallDesc("sendmmsg")},
379 {270, SyscallDesc("process_vm_ready")},
380 {271, SyscallDesc("process_vm_writev")},
381 {272, SyscallDesc("kcmp")},
382 {273, SyscallDesc("finit_module")},
383 {274, SyscallDesc("sched_setattr")},
384 {275, SyscallDesc("sched_getattr")},
385 {276, SyscallDesc("renameat2")},
386 {277, SyscallDesc("seccomp")},
387 {278, SyscallDesc("getrandom")},
388 {279, SyscallDesc("memfd_create")},
389 {280, SyscallDesc("bpf")},
390 {281, SyscallDesc("execveat")},
391 {282, SyscallDesc("userfaultid")},
392 {283, SyscallDesc("membarrier")},
393 {284, SyscallDesc("mlock2")},
394 {285, SyscallDesc("copy_file_range")},
395 {286, SyscallDesc("preadv2")},
396 {287, SyscallDesc("pwritev2")},
397 {1024, SyscallDesc("open", openFunc<RiscvLinux64>)},
398 {1025, SyscallDesc("link")},
399 {1026, SyscallDesc("unlink", unlinkFunc)},
400 {1027, SyscallDesc("mknod")},
401 {1028, SyscallDesc("chmod", chmodFunc<RiscvLinux64>)},
402 {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}