gem5  v19.0.0.0
process.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2010-2013, 2015 ARM Limited
3  * All rights reserved
4  *
5  * The license below extends only to copyright in the software and shall
6  * not be construed as granting a license to any other intellectual
7  * property including but not limited to intellectual property relating
8  * to a hardware implementation of the functionality of the software
9  * licensed hereunder. You may use the software subject to the license
10  * terms below provided that you ensure that this notice is replicated
11  * unmodified and in its entirety in all distributions of the software,
12  * modified or unmodified, in source code or in binary form.
13  *
14  * Copyright (c) 2003-2005 The Regents of The University of Michigan
15  * Copyright (c) 2007-2008 The Florida State University
16  * All rights reserved.
17  *
18  * Redistribution and use in source and binary forms, with or without
19  * modification, are permitted provided that the following conditions are
20  * met: redistributions of source code must retain the above copyright
21  * notice, this list of conditions and the following disclaimer;
22  * redistributions in binary form must reproduce the above copyright
23  * notice, this list of conditions and the following disclaimer in the
24  * documentation and/or other materials provided with the distribution;
25  * neither the name of the copyright holders nor the names of its
26  * contributors may be used to endorse or promote products derived from
27  * this software without specific prior written permission.
28  *
29  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
30  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
31  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
32  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
33  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
34  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
35  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
36  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
37  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
38  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
39  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40  *
41  * Authors: Korey Sewell
42  * Stephen Hines
43  * Ali Saidi
44  * Giacomo Gabrielli
45  */
46 
48 
49 #include <sys/syscall.h>
50 
51 #include "arch/arm/isa_traits.hh"
52 #include "arch/arm/linux/linux.hh"
54 #include "base/trace.hh"
55 #include "cpu/thread_context.hh"
56 #include "kern/linux/linux.hh"
57 #include "sim/process.hh"
58 #include "sim/syscall_desc.hh"
59 #include "sim/syscall_emul.hh"
60 #include "sim/system.hh"
61 
62 using namespace std;
63 using namespace ArmISA;
64 
65 namespace
66 {
67 
68 class ArmLinuxObjectFileLoader : public Process::Loader
69 {
70  public:
71  Process *
72  load(ProcessParams *params, ObjectFile *obj_file) override
73  {
74  auto arch = obj_file->getArch();
75  auto opsys = obj_file->getOpSys();
76 
77  if (arch != ObjectFile::Arm && arch != ObjectFile::Thumb &&
78  arch != ObjectFile::Arm64) {
79  return nullptr;
80  }
81 
82  if (opsys == ObjectFile::UnknownOpSys) {
83  warn("Unknown operating system; assuming Linux.");
84  opsys = ObjectFile::Linux;
85  }
86 
87  if (opsys == ObjectFile::LinuxArmOABI) {
88  fatal("gem5 does not support ARM OABI binaries. Please recompile "
89  "with an EABI compiler.");
90  }
91 
92  if (opsys != ObjectFile::Linux)
93  return nullptr;
94 
95  if (arch == ObjectFile::Arm64)
96  return new ArmLinuxProcess64(params, obj_file, arch);
97  else
98  return new ArmLinuxProcess32(params, obj_file, arch);
99  }
100 };
101 
102 ArmLinuxObjectFileLoader loader;
103 
104 } // anonymous namespace
105 
107 static SyscallReturn
108 unameFunc32(SyscallDesc *desc, int callnum, ThreadContext *tc)
109 {
110  int index = 0;
111  auto process = tc->getProcessPtr();
112  TypedBufferArg<Linux::utsname> name(process->getSyscallArg(tc, index));
113 
114  strcpy(name->sysname, "Linux");
115  strcpy(name->nodename, "m5.eecs.umich.edu");
116  strcpy(name->release, process->release.c_str());
117  strcpy(name->version, "#1 SMP Sat Dec 1 00:00:00 GMT 2012");
118  strcpy(name->machine, "armv7l");
119 
120  name.copyOut(tc->getVirtProxy());
121  return 0;
122 }
123 
125 static SyscallReturn
126 unameFunc64(SyscallDesc *desc, int callnum, ThreadContext *tc)
127 {
128  int index = 0;
129  auto process = tc->getProcessPtr();
130  TypedBufferArg<Linux::utsname> name(process->getSyscallArg(tc, index));
131 
132  strcpy(name->sysname, "Linux");
133  strcpy(name->nodename, "gem5");
134  strcpy(name->release, process->release.c_str());
135  strcpy(name->version, "#1 SMP Sat Dec 1 00:00:00 GMT 2012");
136  strcpy(name->machine, "armv8l");
137 
138  name.copyOut(tc->getVirtProxy());
139  return 0;
140 }
141 
143 static SyscallReturn
144 setTLSFunc32(SyscallDesc *desc, int callnum, ThreadContext *tc)
145 {
146  int index = 0;
147  auto process = tc->getProcessPtr();
148  uint32_t tlsPtr = process->getSyscallArg(tc, index);
149 
151  &tlsPtr, sizeof(tlsPtr));
152  tc->setMiscReg(MISCREG_TPIDRURO,tlsPtr);
153  return 0;
154 }
155 
156 static SyscallReturn
157 setTLSFunc64(SyscallDesc *desc, int callnum, ThreadContext *tc)
158 {
159  int index = 0;
160  auto process = tc->getProcessPtr();
161  uint32_t tlsPtr = process->getSyscallArg(tc, index);
162 
163  tc->setMiscReg(MISCREG_TPIDRRO_EL0, tlsPtr);
164  return 0;
165 }
166 
168  /* 0 */ { "syscall" },
169  /* 1 */ { "exit", exitFunc },
170  /* 2 */ { "fork" },
171  /* 3 */ { "read", readFunc<ArmLinux32> },
172  /* 4 */ { "write", writeFunc<ArmLinux32> },
173  /* 5 */ { "open", openFunc<ArmLinux32> },
174  /* 6 */ { "close", closeFunc },
175  /* 7 */ { "unused#7" },
176  /* 8 */ { "creat" },
177  /* 9 */ { "link" },
178  /* 10 */ { "unlink", unlinkFunc },
179  /* 11 */ { "execve", execveFunc<ArmLinux32> },
180  /* 12 */ { "chdir" },
181  /* 13 */ { "time", timeFunc<ArmLinux32> },
182  /* 14 */ { "mknod" },
183  /* 15 */ { "chmod", chmodFunc<ArmLinux32> },
184  /* 16 */ { "lchown", chownFunc },
185  /* 17 */ { "unused#17" },
186  /* 18 */ { "unused#18" },
187  /* 19 */ { "lseek", lseekFunc },
188  /* 20 */ { "getpid", getpidFunc },
189  /* 21 */ { "mount" },
190  /* 22 */ { "umount" },
191  /* 23 */ { "setuid", ignoreFunc },
192  /* 24 */ { "getuid", getuidFunc },
193  /* 25 */ { "stime" },
194  /* 26 */ { "ptrace" },
195  /* 27 */ { "alarm" },
196  /* 28 */ { "unused#28" },
197  /* 29 */ { "pause" },
198  /* 30 */ { "utime" },
199  /* 31 */ { "unused#31" },
200  /* 32 */ { "unused#32" },
201  /* 33 */ { "access", accessFunc },
202  /* 34 */ { "nice" },
203  /* 35 */ { "unused#35" },
204  /* 36 */ { "sync" },
205  /* 37 */ { "kill", ignoreFunc },
206  /* 38 */ { "rename", renameFunc },
207  /* 39 */ { "mkdir", mkdirFunc },
208  /* 40 */ { "rmdir" },
209  /* 41 */ { "dup", dupFunc },
210  /* 42 */ { "pipe", pipePseudoFunc },
211  /* 43 */ { "times", timesFunc<ArmLinux32> },
212  /* 44 */ { "unused#44" },
213  /* 45 */ { "brk", brkFunc },
214  /* 46 */ { "setgid" },
215  /* 47 */ { "getgid", getgidFunc },
216  /* 48 */ { "unused#48" },
217  /* 49 */ { "geteuid", geteuidFunc },
218  /* 50 */ { "getegid", getegidFunc },
219  /* 51 */ { "acct" },
220  /* 52 */ { "umount2" },
221  /* 53 */ { "unused#53" },
222  /* 54 */ { "ioctl", ioctlFunc<ArmLinux32> },
223  /* 55 */ { "fcntl", fcntlFunc },
224  /* 56 */ { "unused#56" },
225  /* 57 */ { "setpgid" },
226  /* 58 */ { "unused#58" },
227  /* 59 */ { "unused#59" },
228  /* 60 */ { "umask", umaskFunc },
229  /* 61 */ { "chroot" },
230  /* 62 */ { "ustat" },
231  /* 63 */ { "dup2" },
232  /* 64 */ { "getppid", getppidFunc },
233  /* 65 */ { "getpgrp" },
234  /* 66 */ { "setsid" },
235  /* 67 */ { "sigaction" },
236  /* 68 */ { "unused#68" },
237  /* 69 */ { "unused#69" },
238  /* 70 */ { "setreuid" },
239  /* 71 */ { "setregid" },
240  /* 72 */ { "sigsuspend" },
241  /* 73 */ { "sigpending" },
242  /* 74 */ { "sethostname", ignoreFunc },
243  /* 75 */ { "setrlimit", ignoreFunc },
244  /* 76 */ { "getrlimit", getrlimitFunc<ArmLinux32> },
245  /* 77 */ { "getrusage", getrusageFunc<ArmLinux32> },
246  /* 78 */ { "gettimeofday", gettimeofdayFunc<ArmLinux32> },
247  /* 79 */ { "settimeofday" },
248  /* 80 */ { "getgroups" },
249  /* 81 */ { "setgroups" },
250  /* 82 */ { "reserved#82" },
251  /* 83 */ { "symlink" },
252  /* 84 */ { "unused#84" },
253  /* 85 */ { "readlink", readlinkFunc },
254  /* 86 */ { "uselib" },
255  /* 87 */ { "swapon" },
256  /* 88 */ { "reboot" },
257  /* 89 */ { "readdir" },
258  /* 90 */ { "mmap", mmapFunc<ArmLinux32> },
259  /* 91 */ { "munmap", munmapFunc },
260  /* 92 */ { "truncate", truncateFunc },
261  /* 93 */ { "ftruncate", ftruncateFunc },
262  /* 94 */ { "fchmod" },
263  /* 95 */ { "fchown" },
264  /* 96 */ { "getpriority" },
265  /* 97 */ { "setpriority" },
266  /* 98 */ { "unused#98" },
267  /* 99 */ { "statfs" },
268  /* 100 */ { "fstatfs" },
269  /* 101 */ { "unused#101" },
270  /* 102 */ { "socketcall" },
271  /* 103 */ { "syslog" },
272  /* 104 */ { "setitimer" },
273  /* 105 */ { "getitimer" },
274  /* 106 */ { "stat", statFunc<ArmLinux32> },
275  /* 107 */ { "lstat" },
276  /* 108 */ { "fstat", fstatFunc<ArmLinux32> },
277  /* 109 */ { "unused#109" },
278  /* 110 */ { "unused#101" },
279  /* 111 */ { "vhangup" },
280  /* 112 */ { "unused#112" },
281  /* 113 */ { "syscall" },
282  /* 114 */ { "wait4" },
283  /* 115 */ { "swapoff" },
284  /* 116 */ { "sysinfo", sysinfoFunc<ArmLinux32> },
285  /* 117 */ { "ipc" },
286  /* 118 */ { "fsync" },
287  /* 119 */ { "sigreturn" },
288  /* 120 */ { "clone", cloneFunc<ArmLinux32> },
289  /* 121 */ { "setdomainname" },
290  /* 122 */ { "uname", unameFunc32 },
291  /* 123 */ { "unused#123" },
292  /* 124 */ { "adjtimex" },
293  /* 125 */ { "mprotect", ignoreFunc },
294  /* 126 */ { "sigprocmask", ignoreWarnOnceFunc },
295  /* 127 */ { "unused#127" },
296  /* 128 */ { "init_module" },
297  /* 129 */ { "delete_module" },
298  /* 130 */ { "unused#130" },
299  /* 131 */ { "quotactl" },
300  /* 132 */ { "getpgid" },
301  /* 133 */ { "fchdir" },
302  /* 134 */ { "bdflush" },
303  /* 135 */ { "sysfs" },
304  /* 136 */ { "personality" },
305  /* 137 */ { "reserved#138" },
306  /* 138 */ { "setfsuid" },
307  /* 139 */ { "setfsgid" },
308  /* 140 */ { "llseek", _llseekFunc },
309 #if defined(SYS_getdents)
310  /* 141 */ { "getdents", getdentsFunc },
311 #else
312  /* 141 */ { "getdents" },
313 #endif
314  /* 142 */ { "newselect" },
315  /* 143 */ { "flock" },
316  /* 144 */ { "msync" },
317  /* 145 */ { "readv" },
318  /* 146 */ { "writev", writevFunc<ArmLinux32> },
319  /* 147 */ { "getsid" },
320  /* 148 */ { "fdatasync" },
321  /* 149 */ { "sysctl" },
322  /* 150 */ { "mlock" },
323  /* 151 */ { "munlock" },
324  /* 152 */ { "mlockall" },
325  /* 153 */ { "munlockall" },
326  /* 154 */ { "sched_setparam" },
327  /* 155 */ { "sched_getparam" },
328  /* 156 */ { "sched_setscheduler" },
329  /* 157 */ { "sched_getscheduler" },
330  /* 158 */ { "sched_yield" },
331  /* 159 */ { "sched_get_priority_max" },
332  /* 160 */ { "sched_get_priority_min" },
333  /* 161 */ { "sched_rr_get_interval" },
334  /* 162 */ { "nanosleep", ignoreWarnOnceFunc },
335  /* 163 */ { "mremap", mremapFunc<ArmLinux32> }, // ARM-specific
336  /* 164 */ { "setresuid" },
337  /* 165 */ { "getresuid" },
338  /* 166 */ { "unused#166" },
339  /* 167 */ { "unused#167" },
340  /* 168 */ { "poll" },
341  /* 169 */ { "nfsservctl" },
342  /* 170 */ { "setresgid" },
343  /* 171 */ { "getresgid" },
344  /* 172 */ { "prctl" },
345  /* 173 */ { "rt_sigreturn" },
346  /* 174 */ { "rt_sigaction", ignoreWarnOnceFunc },
347  /* 175 */ { "rt_sigprocmask", ignoreWarnOnceFunc },
348  /* 176 */ { "rt_sigpending" },
349  /* 177 */ { "rt_sigtimedwait" },
350  /* 178 */ { "rt_sigqueueinfo", ignoreFunc },
351  /* 179 */ { "rt_sigsuspend" },
352  /* 180 */ { "pread64" },
353  /* 181 */ { "pwrite64" },
354  /* 182 */ { "chown" },
355  /* 183 */ { "getcwd", getcwdFunc },
356  /* 184 */ { "capget" },
357  /* 185 */ { "capset" },
358  /* 186 */ { "sigaltstack" },
359  /* 187 */ { "sendfile" },
360  /* 188 */ { "unused#188" },
361  /* 189 */ { "unused#189" },
362  /* 190 */ { "vfork" },
363  /* 191 */ { "getrlimit", getrlimitFunc<ArmLinux32> },
364  /* 192 */ { "mmap2", mmapFunc<ArmLinux32> },
365  /* 193 */ { "truncate64" },
366  /* 194 */ { "ftruncate64", ftruncate64Func },
367  /* 195 */ { "stat64", stat64Func<ArmLinux32> },
368  /* 196 */ { "lstat64", lstat64Func<ArmLinux32> },
369  /* 197 */ { "fstat64", fstat64Func<ArmLinux32> },
370  /* 198 */ { "lchown" },
371  /* 199 */ { "getuid", getuidFunc },
372  /* 200 */ { "getgid", getgidFunc },
373  /* 201 */ { "geteuid", geteuidFunc },
374  /* 202 */ { "getegid", getegidFunc },
375  /* 203 */ { "setreuid" },
376  /* 204 */ { "setregid" },
377  /* 205 */ { "getgroups" },
378  /* 206 */ { "setgroups" },
379  /* 207 */ { "fchown" },
380  /* 208 */ { "setresuid" },
381  /* 209 */ { "getresuid" },
382  /* 210 */ { "setresgid" },
383  /* 211 */ { "getresgid" },
384  /* 212 */ { "chown" },
385  /* 213 */ { "setuid" },
386  /* 214 */ { "setgid" },
387  /* 215 */ { "setfsuid" },
388  /* 216 */ { "setfsgid" },
389 #if defined(SYS_getdents64)
390  /* 217 */ { "getdents64", getdents64Func },
391 #else
392  /* 217 */ { "getdents64" },
393 #endif
394  /* 218 */ { "pivot_root" },
395  /* 219 */ { "mincore" },
396  /* 220 */ { "madvise", ignoreFunc },
397  /* 221 */ { "fcntl64", fcntl64Func },
398  /* 222 */ { "unused#222" },
399  /* 223 */ { "unknown#223" },
400  /* 224 */ { "gettid", gettidFunc },
401  /* 225 */ { "readahead" },
402  /* 226 */ { "setxattr" },
403  /* 227 */ { "lsetxattr" },
404  /* 228 */ { "fsetxattr" },
405  /* 229 */ { "getxattr" },
406  /* 230 */ { "lgetxattr" },
407  /* 231 */ { "fgetxattr" },
408  /* 232 */ { "listxattr" },
409  /* 233 */ { "llistxattr" },
410  /* 234 */ { "flistxattr" },
411  /* 235 */ { "removexattr" },
412  /* 236 */ { "lremovexattr" },
413  /* 237 */ { "fremovexattr" },
414  /* 238 */ { "tkill" },
415  /* 239 */ { "sendfile64" },
416  /* 240 */ { "futex", futexFunc<ArmLinux32> },
417  /* 241 */ { "sched_setaffinity" },
418  /* 242 */ { "sched_getaffinity", ignoreFunc },
419  /* 243 */ { "io_setup" },
420  /* 244 */ { "io_destroy" },
421  /* 245 */ { "io_getevents" },
422  /* 246 */ { "io_submit" },
423  /* 247 */ { "io_cancel" },
424  /* 248 */ { "exit_group", exitGroupFunc },
425  /* 249 */ { "lookup_dcookie" },
426  /* 250 */ { "epoll_create" },
427  /* 251 */ { "epoll_ctl" },
428  /* 252 */ { "epoll_wait" },
429  /* 253 */ { "remap_file_pages" },
430  /* 254 */ { "unused#254" },
431  /* 255 */ { "unused#255" },
432  /* 256 */ { "set_tid_address", setTidAddressFunc },
433  /* 257 */ { "timer_create" },
434  /* 258 */ { "timer_settime" },
435  /* 259 */ { "timer_gettime" },
436  /* 260 */ { "timer_getoverrun" },
437  /* 261 */ { "timer_delete" },
438  /* 262 */ { "clock_settime" },
439  /* 263 */ { "clock_gettime", clock_gettimeFunc<ArmLinux32> },
440  /* 264 */ { "clock_getres", clock_getresFunc<ArmLinux32> },
441  /* 265 */ { "clock_nanosleep" },
442  /* 266 */ { "statfs64" },
443  /* 267 */ { "fstatfs64" },
444  /* 268 */ { "tgkill", tgkillFunc<ArmLinux32> },
445  /* 269 */ { "utimes" },
446  /* 270 */ { "arm_fadvise64_64" },
447  /* 271 */ { "pciconfig_iobase" },
448  /* 272 */ { "pciconfig_read" },
449  /* 273 */ { "pciconfig_write" },
450  /* 274 */ { "mq_open" },
451  /* 275 */ { "mq_unlink" },
452  /* 276 */ { "mq_timedsend" },
453  /* 277 */ { "mq_timedreceive" },
454  /* 278 */ { "mq_notify" },
455  /* 279 */ { "mq_getsetattr" },
456  /* 280 */ { "waitid" },
457  /* 281 */ { "socket" },
458  /* 282 */ { "bind" },
459  /* 283 */ { "connect" },
460  /* 284 */ { "listen" },
461  /* 285 */ { "accept" },
462  /* 286 */ { "getsockname" },
463  /* 287 */ { "getpeername" },
464  /* 288 */ { "socketpair" },
465  /* 289 */ { "send" },
466  /* 290 */ { "sendto" },
467  /* 291 */ { "recv" },
468  /* 292 */ { "recvfrom" },
469  /* 293 */ { "shutdown" },
470  /* 294 */ { "setsockopt" },
471  /* 295 */ { "getsockopt" },
472  /* 296 */ { "sendmsg" },
473  /* 297 */ { "rcvmsg" },
474  /* 298 */ { "semop" },
475  /* 299 */ { "semget" },
476  /* 300 */ { "semctl" },
477  /* 301 */ { "msgsend" },
478  /* 302 */ { "msgrcv" },
479  /* 303 */ { "msgget" },
480  /* 304 */ { "msgctl" },
481  /* 305 */ { "shmat" },
482  /* 306 */ { "shmdt" },
483  /* 307 */ { "shmget" },
484  /* 308 */ { "shmctl" },
485  /* 309 */ { "add_key" },
486  /* 310 */ { "request_key" },
487  /* 311 */ { "keyctl" },
488  /* 312 */ { "semtimedop" },
489  /* 313 */ { "unused#313" },
490  /* 314 */ { "ioprio_set" },
491  /* 315 */ { "ioprio_get" },
492  /* 316 */ { "inotify_init" },
493  /* 317 */ { "inotify_add_watch" },
494  /* 318 */ { "inotify_rm_watch" },
495  /* 319 */ { "mbind" },
496  /* 320 */ { "get_mempolicy" },
497  /* 321 */ { "set_mempolicy" },
498  /* 322 */ { "openat", openatFunc<ArmLinux32> },
499  /* 323 */ { "mkdirat" },
500  /* 324 */ { "mknodat" },
501  /* 325 */ { "fchownat" },
502  /* 326 */ { "futimesat" },
503  /* 327 */ { "fstatat64" },
504  /* 328 */ { "unlinkat" },
505  /* 329 */ { "renameat" },
506  /* 330 */ { "linkat" },
507  /* 331 */ { "symlinkat" },
508  /* 332 */ { "readlinkat" },
509  /* 333 */ { "fchmodat" },
510  /* 334 */ { "faccessat" },
511  /* 335 */ { "pselect6" },
512  /* 336 */ { "ppoll" },
513  /* 337 */ { "unshare" },
514  /* 338 */ { "set_robust_list", ignoreFunc },
515  /* 339 */ { "get_robust_list" },
516  /* 340 */ { "splice" },
517  /* 341 */ { "arm_sync_file_range" },
518  /* 342 */ { "tee" },
519  /* 343 */ { "vmsplice" },
520  /* 344 */ { "move_pages" },
521  /* 345 */ { "getcpu" },
522  /* 346 */ { "epoll_pwait" },
523  /* 347 */ { "sys_kexec_load" },
524  /* 348 */ { "sys_utimensat" },
525  /* 349 */ { "sys_signalfd" },
526  /* 350 */ { "sys_timerfd_create" },
527  /* 351 */ { "sys_eventfd" },
528  /* 352 */ { "sys_fallocate" },
529  /* 353 */ { "sys_timerfd_settime" },
530  /* 354 */ { "sys_timerfd_gettime" },
531  /* 355 */ { "sys_signalfd4" },
532  /* 356 */ { "sys_eventfd2" },
533  /* 357 */ { "sys_epoll_create1" },
534  /* 358 */ { "sys_dup3" },
535  /* 359 */ { "sys_pipe2" },
536  /* 360 */ { "sys_inotify_init1" },
537  /* 361 */ { "sys_preadv" },
538  /* 362 */ { "sys_pwritev" },
539  /* 363 */ { "sys_rt_tgsigqueueinfo" },
540  /* 364 */ { "sys_perf_event_open" },
541  /* 365 */ { "sys_recvmmsg" },
542 };
543 
545  /* 0 */ { "io_setup" },
546  /* 1 */ { "io_destroy" },
547  /* 2 */ { "io_submit" },
548  /* 3 */ { "io_cancel" },
549  /* 4 */ { "io_getevents" },
550  /* 5 */ { "setxattr" },
551  /* 6 */ { "lsetxattr" },
552  /* 7 */ { "fsetxattr" },
553  /* 8 */ { "getxattr" },
554  /* 9 */ { "lgetxattr" },
555  /* 10 */ { "fgetxattr" },
556  /* 11 */ { "listxattr" },
557  /* 12 */ { "llistxattr" },
558  /* 13 */ { "flistxattr" },
559  /* 14 */ { "removexattr" },
560  /* 15 */ { "lremovexattr" },
561  /* 16 */ { "fremovexattr" },
562  /* 17 */ { "getcwd", getcwdFunc },
563  /* 18 */ { "lookup_dcookie" },
564  /* 19 */ { "eventfd2" },
565  /* 20 */ { "epoll_create1" },
566  /* 21 */ { "epoll_ctl" },
567  /* 22 */ { "epoll_pwait" },
568  /* 23 */ { "dup", dupFunc },
569  /* 24 */ { "dup3" },
570  /* 25 */ { "fcntl64", fcntl64Func },
571  /* 26 */ { "inotify_init1" },
572  /* 27 */ { "inotify_add_watch" },
573  /* 28 */ { "inotify_rm_watch" },
574  /* 29 */ { "ioctl", ioctlFunc<ArmLinux64> },
575  /* 30 */ { "ioprio_set" },
576  /* 31 */ { "ioprio_get" },
577  /* 32 */ { "flock" },
578  /* 33 */ { "mknodat" },
579  /* 34 */ { "mkdirat" },
580  /* 35 */ { "unlinkat", unlinkatFunc<ArmLinux64> },
581  /* 36 */ { "symlinkat" },
582  /* 37 */ { "linkat" },
583  /* 38 */ { "renameat", renameatFunc<ArmLinux64> },
584  /* 39 */ { "umount2" },
585  /* 40 */ { "mount" },
586  /* 41 */ { "pivot_root" },
587  /* 42 */ { "nfsservctl" },
588  /* 43 */ { "statfs64" },
589  /* 44 */ { "fstatfs64" },
590  /* 45 */ { "truncate64" },
591  /* 46 */ { "ftruncate64", ftruncate64Func },
592  /* 47 */ { "fallocate" },
593  /* 48 */ { "faccessat", faccessatFunc<ArmLinux64> },
594  /* 49 */ { "chdir" },
595  /* 50 */ { "fchdir" },
596  /* 51 */ { "chroot" },
597  /* 52 */ { "fchmod" },
598  /* 53 */ { "fchmodat" },
599  /* 54 */ { "fchownat" },
600  /* 55 */ { "fchown" },
601  /* 56 */ { "openat", openatFunc<ArmLinux64> },
602  /* 57 */ { "close", closeFunc },
603  /* 58 */ { "vhangup" },
604  /* 59 */ { "pipe2" },
605  /* 60 */ { "quotactl" },
606 #if defined(SYS_getdents64)
607  /* 61 */ { "getdents64", getdents64Func },
608 #else
609  /* 61 */ { "getdents64" },
610 #endif
611  /* 62 */ { "llseek", lseekFunc },
612  /* 63 */ { "read", readFunc<ArmLinux64> },
613  /* 64 */ { "write", writeFunc<ArmLinux64> },
614  /* 65 */ { "readv" },
615  /* 66 */ { "writev", writevFunc<ArmLinux64> },
616  /* 67 */ { "pread64" },
617  /* 68 */ { "pwrite64" },
618  /* 69 */ { "preadv" },
619  /* 70 */ { "pwritev" },
620  /* 71 */ { "sendfile64" },
621  /* 72 */ { "pselect6" },
622  /* 73 */ { "ppoll" },
623  /* 74 */ { "signalfd4" },
624  /* 75 */ { "vmsplice" },
625  /* 76 */ { "splice" },
626  /* 77 */ { "tee" },
627  /* 78 */ { "readlinkat", readlinkatFunc<ArmLinux64> },
628  /* 79 */ { "fstatat64", fstatat64Func<ArmLinux64> },
629  /* 80 */ { "fstat64", fstat64Func<ArmLinux64> },
630  /* 81 */ { "sync" },
631  /* 82 */ { "fsync" },
632  /* 83 */ { "fdatasync" },
633  /* 84 */ { "sync_file_range" },
634  /* 85 */ { "timerfd_create" },
635  /* 86 */ { "timerfd_settime" },
636  /* 87 */ { "timerfd_gettime" },
637  /* 88 */ { "utimensat" },
638  /* 89 */ { "acct" },
639  /* 90 */ { "capget" },
640  /* 91 */ { "capset" },
641  /* 92 */ { "personality" },
642  /* 93 */ { "exit", exitFunc },
643  /* 94 */ { "exit_group", exitGroupFunc },
644  /* 95 */ { "waitid" },
645  /* 96 */ { "set_tid_address", setTidAddressFunc },
646  /* 97 */ { "unshare" },
647  /* 98 */ { "futex", futexFunc<ArmLinux64> },
648  /* 99 */ { "set_robust_list", ignoreFunc },
649  /* 100 */ { "get_robust_list" },
650  /* 101 */ { "nanosleep", ignoreWarnOnceFunc },
651  /* 102 */ { "getitimer" },
652  /* 103 */ { "setitimer" },
653  /* 104 */ { "kexec_load" },
654  /* 105 */ { "init_module" },
655  /* 106 */ { "delete_module" },
656  /* 107 */ { "timer_create" },
657  /* 108 */ { "timer_gettime" },
658  /* 109 */ { "timer_getoverrun" },
659  /* 110 */ { "timer_settime" },
660  /* 111 */ { "timer_delete" },
661  /* 112 */ { "clock_settime" },
662  /* 113 */ { "clock_gettime", clock_gettimeFunc<ArmLinux64> },
663  /* 114 */ { "clock_getres" },
664  /* 115 */ { "clock_nanosleep" },
665  /* 116 */ { "syslog" },
666  /* 117 */ { "ptrace" },
667  /* 118 */ { "sched_setparam" },
668  /* 119 */ { "sched_setscheduler" },
669  /* 120 */ { "sched_getscheduler" },
670  /* 121 */ { "sched_getparam" },
671  /* 122 */ { "sched_setaffinity" },
672  /* 123 */ { "sched_getaffinity", ignoreFunc },
673  /* 124 */ { "sched_yield" },
674  /* 125 */ { "sched_get_priority_max" },
675  /* 126 */ { "sched_get_priority_min" },
676  /* 127 */ { "sched_rr_get_interval" },
677  /* 128 */ { "restart_syscall" },
678  /* 129 */ { "kill", ignoreFunc },
679  /* 130 */ { "tkill" },
680  /* 131 */ { "tgkill", tgkillFunc<ArmLinux64> },
681  /* 132 */ { "sigaltstack" },
682  /* 133 */ { "rt_sigsuspend" },
683  /* 134 */ { "rt_sigaction", ignoreFunc },
684  /* 135 */ { "rt_sigprocmask", ignoreWarnOnceFunc },
685  /* 136 */ { "rt_sigpending" },
686  /* 137 */ { "rt_sigtimedwait" },
687  /* 138 */ { "rt_sigqueueinfo", ignoreFunc },
688  /* 139 */ { "rt_sigreturn" },
689  /* 140 */ { "setpriority" },
690  /* 141 */ { "getpriority" },
691  /* 142 */ { "reboot" },
692  /* 143 */ { "setregid" },
693  /* 144 */ { "setgid" },
694  /* 145 */ { "setreuid" },
695  /* 146 */ { "setuid" },
696  /* 147 */ { "setresuid" },
697  /* 148 */ { "getresuid" },
698  /* 149 */ { "setresgid" },
699  /* 150 */ { "getresgid" },
700  /* 151 */ { "setfsuid" },
701  /* 152 */ { "setfsgid" },
702  /* 153 */ { "times", timesFunc<ArmLinux64> },
703  /* 154 */ { "setpgid" },
704  /* 155 */ { "getpgid" },
705  /* 156 */ { "getsid" },
706  /* 157 */ { "setsid" },
707  /* 158 */ { "getgroups" },
708  /* 159 */ { "setgroups" },
709  /* 160 */ { "uname", unameFunc64 },
710  /* 161 */ { "sethostname", ignoreFunc },
711  /* 162 */ { "setdomainname" },
712  /* 163 */ { "getrlimit", getrlimitFunc<ArmLinux64> },
713  /* 164 */ { "setrlimit", ignoreFunc },
714  /* 165 */ { "getrusage", getrusageFunc<ArmLinux64> },
715  /* 166 */ { "umask" },
716  /* 167 */ { "prctl" },
717  /* 168 */ { "getcpu" },
718  /* 169 */ { "gettimeofday", gettimeofdayFunc<ArmLinux64> },
719  /* 170 */ { "settimeofday" },
720  /* 171 */ { "adjtimex" },
721  /* 172 */ { "getpid", getpidFunc },
722  /* 173 */ { "getppid", getppidFunc },
723  /* 174 */ { "getuid", getuidFunc },
724  /* 175 */ { "geteuid", geteuidFunc },
725  /* 176 */ { "getgid", getgidFunc },
726  /* 177 */ { "getegid", getegidFunc },
727  /* 178 */ { "gettid", gettidFunc },
728  /* 179 */ { "sysinfo", sysinfoFunc<ArmLinux64> },
729  /* 180 */ { "mq_open" },
730  /* 181 */ { "mq_unlink" },
731  /* 182 */ { "mq_timedsend" },
732  /* 183 */ { "mq_timedreceive" },
733  /* 184 */ { "mq_notify" },
734  /* 185 */ { "mq_getsetattr" },
735  /* 186 */ { "msgget" },
736  /* 187 */ { "msgctl" },
737  /* 188 */ { "msgrcv" },
738  /* 189 */ { "msgsnd" },
739  /* 190 */ { "semget" },
740  /* 191 */ { "semctl" },
741  /* 192 */ { "semtimedop" },
742  /* 193 */ { "semop" },
743  /* 194 */ { "shmget" },
744  /* 195 */ { "shmctl" },
745  /* 196 */ { "shmat" },
746  /* 197 */ { "shmdt" },
747  /* 198 */ { "socket" },
748  /* 199 */ { "socketpair" },
749  /* 200 */ { "bind" },
750  /* 201 */ { "listen" },
751  /* 202 */ { "accept" },
752  /* 203 */ { "connect" },
753  /* 204 */ { "getsockname" },
754  /* 205 */ { "getpeername" },
755  /* 206 */ { "sendto" },
756  /* 207 */ { "recvfrom" },
757  /* 208 */ { "setsockopt" },
758  /* 209 */ { "getsockopt" },
759  /* 210 */ { "shutdown" },
760  /* 211 */ { "sendmsg" },
761  /* 212 */ { "recvmsg" },
762  /* 213 */ { "readahead" },
763  /* 214 */ { "brk", brkFunc },
764  /* 215 */ { "munmap", munmapFunc },
765  /* 216 */ { "mremap", mremapFunc<ArmLinux64> },
766  /* 217 */ { "add_key" },
767  /* 218 */ { "request_key" },
768  /* 219 */ { "keyctl" },
769  /* 220 */ { "clone", cloneFunc<ArmLinux64> },
770  /* 221 */ { "execve", execveFunc<ArmLinux64> },
771  /* 222 */ { "mmap2", mmapFunc<ArmLinux64> },
772  /* 223 */ { "fadvise64_64" },
773  /* 224 */ { "swapon" },
774  /* 225 */ { "swapoff" },
775  /* 226 */ { "mprotect", ignoreFunc },
776  /* 227 */ { "msync" },
777  /* 228 */ { "mlock" },
778  /* 229 */ { "munlock" },
779  /* 230 */ { "mlockall" },
780  /* 231 */ { "munlockall" },
781  /* 232 */ { "mincore" },
782  /* 233 */ { "madvise", ignoreFunc },
783  /* 234 */ { "remap_file_pages" },
784  /* 235 */ { "mbind" },
785  /* 236 */ { "get_mempolicy" },
786  /* 237 */ { "set_mempolicy" },
787  /* 238 */ { "migrate_pages" },
788  /* 239 */ { "move_pages" },
789  /* 240 */ { "rt_tgsigqueueinfo" },
790  /* 241 */ { "perf_event_open" },
791  /* 242 */ { "accept4" },
792  /* 243 */ { "recvmmsg" },
793  /* 244 */ { "unused#244" },
794  /* 245 */ { "unused#245" },
795  /* 246 */ { "unused#246" },
796  /* 247 */ { "unused#247" },
797  /* 248 */ { "unused#248" },
798  /* 249 */ { "unused#249" },
799  /* 250 */ { "unused#250" },
800  /* 251 */ { "unused#251" },
801  /* 252 */ { "unused#252" },
802  /* 253 */ { "unused#253" },
803  /* 254 */ { "unused#254" },
804  /* 255 */ { "unused#255" },
805  /* 256 */ { "unused#256" },
806  /* 257 */ { "unused#257" },
807  /* 258 */ { "unused#258" },
808  /* 259 */ { "unused#259" },
809  /* 260 */ { "wait4" },
810  /* 261 */ { "prlimit64", prlimitFunc<ArmLinux64> },
811  /* 262 */ { "fanotify_init" },
812  /* 263 */ { "fanotify_mark" },
813  /* 264 */ { "name_to_handle_at" },
814  /* 265 */ { "open_by_handle_at" },
815  /* 266 */ { "clock_adjtime" },
816  /* 267 */ { "syncfs" },
817  /* 268 */ { "setns" },
818  /* 269 */ { "sendmmsg" },
819  /* 270 */ { "process_vm_readv" },
820  /* 271 */ { "process_vm_writev" },
821  /* 272 */ { "unused#272" },
822  /* 273 */ { "unused#273" },
823  /* 274 */ { "unused#274" },
824  /* 275 */ { "unused#275" },
825  /* 276 */ { "unused#276" },
826  /* 277 */ { "unused#277" },
827  /* 278 */ { "unused#278" },
828  /* 279 */ { "unused#279" },
829  /* 280 */ { "unused#280" },
830  /* 281 */ { "unused#281" },
831  /* 282 */ { "unused#282" },
832  /* 283 */ { "unused#283" },
833  /* 284 */ { "unused#284" },
834  /* 285 */ { "unused#285" },
835  /* 286 */ { "unused#286" },
836  /* 287 */ { "unused#287" },
837  /* 288 */ { "unused#288" },
838  /* 289 */ { "unused#289" },
839  /* 290 */ { "unused#290" },
840  /* 291 */ { "unused#291" },
841  /* 292 */ { "unused#292" },
842  /* 293 */ { "unused#293" },
843  /* 294 */ { "unused#294" },
844  /* 295 */ { "unused#295" },
845  /* 296 */ { "unused#296" },
846  /* 297 */ { "unused#297" },
847  /* 298 */ { "unused#298" },
848  /* 299 */ { "unused#299" },
849  /* 300 */ { "unused#300" },
850  /* 301 */ { "unused#301" },
851  /* 302 */ { "unused#302" },
852  /* 303 */ { "unused#303" },
853  /* 304 */ { "unused#304" },
854  /* 305 */ { "unused#305" },
855  /* 306 */ { "unused#306" },
856  /* 307 */ { "unused#307" },
857  /* 308 */ { "unused#308" },
858  /* 309 */ { "unused#309" },
859  /* 310 */ { "unused#310" },
860  /* 311 */ { "unused#311" },
861  /* 312 */ { "unused#312" },
862  /* 313 */ { "unused#313" },
863  /* 314 */ { "unused#314" },
864  /* 315 */ { "unused#315" },
865  /* 316 */ { "unused#316" },
866  /* 317 */ { "unused#317" },
867  /* 318 */ { "unused#318" },
868  /* 319 */ { "unused#319" },
869  /* 320 */ { "unused#320" },
870  /* 321 */ { "unused#321" },
871  /* 322 */ { "unused#322" },
872  /* 323 */ { "unused#323" },
873  /* 324 */ { "unused#324" },
874  /* 325 */ { "unused#325" },
875  /* 326 */ { "unused#326" },
876  /* 327 */ { "unused#327" },
877  /* 328 */ { "unused#328" },
878  /* 329 */ { "unused#329" },
879  /* 330 */ { "unused#330" },
880  /* 331 */ { "unused#331" },
881  /* 332 */ { "unused#332" },
882  /* 333 */ { "unused#333" },
883  /* 334 */ { "unused#334" },
884  /* 335 */ { "unused#335" },
885  /* 336 */ { "unused#336" },
886  /* 337 */ { "unused#337" },
887  /* 338 */ { "unused#338" },
888  /* 339 */ { "unused#339" },
889  /* 340 */ { "unused#340" },
890  /* 341 */ { "unused#341" },
891  /* 342 */ { "unused#342" },
892  /* 343 */ { "unused#343" },
893  /* 344 */ { "unused#344" },
894  /* 345 */ { "unused#345" },
895  /* 346 */ { "unused#346" },
896  /* 347 */ { "unused#347" },
897  /* 348 */ { "unused#348" },
898  /* 349 */ { "unused#349" },
899  /* 350 */ { "unused#350" },
900  /* 351 */ { "unused#351" },
901  /* 352 */ { "unused#352" },
902  /* 353 */ { "unused#353" },
903  /* 354 */ { "unused#354" },
904  /* 355 */ { "unused#355" },
905  /* 356 */ { "unused#356" },
906  /* 357 */ { "unused#357" },
907  /* 358 */ { "unused#358" },
908  /* 359 */ { "unused#359" },
909  /* 360 */ { "unused#360" },
910  /* 361 */ { "unused#361" },
911  /* 362 */ { "unused#362" },
912  /* 363 */ { "unused#363" },
913  /* 364 */ { "unused#364" },
914  /* 365 */ { "unused#365" },
915  /* 366 */ { "unused#366" },
916  /* 367 */ { "unused#367" },
917  /* 368 */ { "unused#368" },
918  /* 369 */ { "unused#369" },
919  /* 370 */ { "unused#370" },
920  /* 371 */ { "unused#371" },
921  /* 372 */ { "unused#372" },
922  /* 373 */ { "unused#373" },
923  /* 374 */ { "unused#374" },
924  /* 375 */ { "unused#375" },
925  /* 376 */ { "unused#376" },
926  /* 377 */ { "unused#377" },
927  /* 378 */ { "unused#378" },
928  /* 379 */ { "unused#379" },
929  /* 380 */ { "unused#380" },
930  /* 381 */ { "unused#381" },
931  /* 382 */ { "unused#382" },
932  /* 383 */ { "unused#383" },
933  /* 384 */ { "unused#384" },
934  /* 385 */ { "unused#385" },
935  /* 386 */ { "unused#386" },
936  /* 387 */ { "unused#387" },
937  /* 388 */ { "unused#388" },
938  /* 389 */ { "unused#389" },
939  /* 390 */ { "unused#390" },
940  /* 391 */ { "unused#391" },
941  /* 392 */ { "unused#392" },
942  /* 393 */ { "unused#393" },
943  /* 394 */ { "unused#394" },
944  /* 395 */ { "unused#395" },
945  /* 396 */ { "unused#396" },
946  /* 397 */ { "unused#397" },
947  /* 398 */ { "unused#398" },
948  /* 399 */ { "unused#399" },
949  /* 400 */ { "unused#400" },
950  /* 401 */ { "unused#401" },
951  /* 402 */ { "unused#402" },
952  /* 403 */ { "unused#403" },
953  /* 404 */ { "unused#404" },
954  /* 405 */ { "unused#405" },
955  /* 406 */ { "unused#406" },
956  /* 407 */ { "unused#407" },
957  /* 408 */ { "unused#408" },
958  /* 409 */ { "unused#409" },
959  /* 410 */ { "unused#410" },
960  /* 411 */ { "unused#411" },
961  /* 412 */ { "unused#412" },
962  /* 413 */ { "unused#413" },
963  /* 414 */ { "unused#414" },
964  /* 415 */ { "unused#415" },
965  /* 416 */ { "unused#416" },
966  /* 417 */ { "unused#417" },
967  /* 418 */ { "unused#418" },
968  /* 419 */ { "unused#419" },
969  /* 420 */ { "unused#420" },
970  /* 421 */ { "unused#421" },
971  /* 422 */ { "unused#422" },
972  /* 423 */ { "unused#423" },
973  /* 424 */ { "unused#424" },
974  /* 425 */ { "unused#425" },
975  /* 426 */ { "unused#426" },
976  /* 427 */ { "unused#427" },
977  /* 428 */ { "unused#428" },
978  /* 429 */ { "unused#429" },
979  /* 430 */ { "unused#430" },
980  /* 431 */ { "unused#431" },
981  /* 432 */ { "unused#432" },
982  /* 433 */ { "unused#433" },
983  /* 434 */ { "unused#434" },
984  /* 435 */ { "unused#435" },
985  /* 436 */ { "unused#436" },
986  /* 437 */ { "unused#437" },
987  /* 438 */ { "unused#438" },
988  /* 439 */ { "unused#439" },
989  /* 440 */ { "unused#440" },
990  /* 441 */ { "unused#441" },
991  /* 442 */ { "unused#442" },
992  /* 443 */ { "unused#443" },
993  /* 444 */ { "unused#444" },
994  /* 445 */ { "unused#445" },
995  /* 446 */ { "unused#446" },
996  /* 447 */ { "unused#447" },
997  /* 448 */ { "unused#448" },
998  /* 449 */ { "unused#449" },
999  /* 450 */ { "unused#450" },
1000  /* 451 */ { "unused#451" },
1001  /* 452 */ { "unused#452" },
1002  /* 453 */ { "unused#453" },
1003  /* 454 */ { "unused#454" },
1004  /* 455 */ { "unused#455" },
1005  /* 456 */ { "unused#456" },
1006  /* 457 */ { "unused#457" },
1007  /* 458 */ { "unused#458" },
1008  /* 459 */ { "unused#459" },
1009  /* 460 */ { "unused#460" },
1010  /* 461 */ { "unused#461" },
1011  /* 462 */ { "unused#462" },
1012  /* 463 */ { "unused#463" },
1013  /* 464 */ { "unused#464" },
1014  /* 465 */ { "unused#465" },
1015  /* 466 */ { "unused#466" },
1016  /* 467 */ { "unused#467" },
1017  /* 468 */ { "unused#468" },
1018  /* 469 */ { "unused#469" },
1019  /* 470 */ { "unused#470" },
1020  /* 471 */ { "unused#471" },
1021  /* 472 */ { "unused#472" },
1022  /* 473 */ { "unused#473" },
1023  /* 474 */ { "unused#474" },
1024  /* 475 */ { "unused#475" },
1025  /* 476 */ { "unused#476" },
1026  /* 477 */ { "unused#477" },
1027  /* 478 */ { "unused#478" },
1028  /* 479 */ { "unused#479" },
1029  /* 480 */ { "unused#480" },
1030  /* 481 */ { "unused#481" },
1031  /* 482 */ { "unused#482" },
1032  /* 483 */ { "unused#483" },
1033  /* 484 */ { "unused#484" },
1034  /* 485 */ { "unused#485" },
1035  /* 486 */ { "unused#486" },
1036  /* 487 */ { "unused#487" },
1037  /* 488 */ { "unused#488" },
1038  /* 489 */ { "unused#489" },
1039  /* 490 */ { "unused#490" },
1040  /* 491 */ { "unused#491" },
1041  /* 492 */ { "unused#492" },
1042  /* 493 */ { "unused#493" },
1043  /* 494 */ { "unused#494" },
1044  /* 495 */ { "unused#495" },
1045  /* 496 */ { "unused#496" },
1046  /* 497 */ { "unused#497" },
1047  /* 498 */ { "unused#498" },
1048  /* 499 */ { "unused#499" },
1049  /* 500 */ { "unused#500" },
1050  /* 501 */ { "unused#501" },
1051  /* 502 */ { "unused#502" },
1052  /* 503 */ { "unused#503" },
1053  /* 504 */ { "unused#504" },
1054  /* 505 */ { "unused#505" },
1055  /* 506 */ { "unused#506" },
1056  /* 507 */ { "unused#507" },
1057  /* 508 */ { "unused#508" },
1058  /* 509 */ { "unused#509" },
1059  /* 510 */ { "unused#510" },
1060  /* 511 */ { "unused#511" },
1061  /* 512 */ { "unused#512" },
1062  /* 513 */ { "unused#513" },
1063  /* 514 */ { "unused#514" },
1064  /* 515 */ { "unused#515" },
1065  /* 516 */ { "unused#516" },
1066  /* 517 */ { "unused#517" },
1067  /* 518 */ { "unused#518" },
1068  /* 519 */ { "unused#519" },
1069  /* 520 */ { "unused#520" },
1070  /* 521 */ { "unused#521" },
1071  /* 522 */ { "unused#522" },
1072  /* 523 */ { "unused#523" },
1073  /* 524 */ { "unused#524" },
1074  /* 525 */ { "unused#525" },
1075  /* 526 */ { "unused#526" },
1076  /* 527 */ { "unused#527" },
1077  /* 528 */ { "unused#528" },
1078  /* 529 */ { "unused#529" },
1079  /* 530 */ { "unused#530" },
1080  /* 531 */ { "unused#531" },
1081  /* 532 */ { "unused#532" },
1082  /* 533 */ { "unused#533" },
1083  /* 534 */ { "unused#534" },
1084  /* 535 */ { "unused#535" },
1085  /* 536 */ { "unused#536" },
1086  /* 537 */ { "unused#537" },
1087  /* 538 */ { "unused#538" },
1088  /* 539 */ { "unused#539" },
1089  /* 540 */ { "unused#540" },
1090  /* 541 */ { "unused#541" },
1091  /* 542 */ { "unused#542" },
1092  /* 543 */ { "unused#543" },
1093  /* 544 */ { "unused#544" },
1094  /* 545 */ { "unused#545" },
1095  /* 546 */ { "unused#546" },
1096  /* 547 */ { "unused#547" },
1097  /* 548 */ { "unused#548" },
1098  /* 549 */ { "unused#549" },
1099  /* 550 */ { "unused#550" },
1100  /* 551 */ { "unused#551" },
1101  /* 552 */ { "unused#552" },
1102  /* 553 */ { "unused#553" },
1103  /* 554 */ { "unused#554" },
1104  /* 555 */ { "unused#555" },
1105  /* 556 */ { "unused#556" },
1106  /* 557 */ { "unused#557" },
1107  /* 558 */ { "unused#558" },
1108  /* 559 */ { "unused#559" },
1109  /* 560 */ { "unused#560" },
1110  /* 561 */ { "unused#561" },
1111  /* 562 */ { "unused#562" },
1112  /* 563 */ { "unused#563" },
1113  /* 564 */ { "unused#564" },
1114  /* 565 */ { "unused#565" },
1115  /* 566 */ { "unused#566" },
1116  /* 567 */ { "unused#567" },
1117  /* 568 */ { "unused#568" },
1118  /* 569 */ { "unused#569" },
1119  /* 570 */ { "unused#570" },
1120  /* 571 */ { "unused#571" },
1121  /* 572 */ { "unused#572" },
1122  /* 573 */ { "unused#573" },
1123  /* 574 */ { "unused#574" },
1124  /* 575 */ { "unused#575" },
1125  /* 576 */ { "unused#576" },
1126  /* 577 */ { "unused#577" },
1127  /* 578 */ { "unused#578" },
1128  /* 579 */ { "unused#579" },
1129  /* 580 */ { "unused#580" },
1130  /* 581 */ { "unused#581" },
1131  /* 582 */ { "unused#582" },
1132  /* 583 */ { "unused#583" },
1133  /* 584 */ { "unused#584" },
1134  /* 585 */ { "unused#585" },
1135  /* 586 */ { "unused#586" },
1136  /* 587 */ { "unused#587" },
1137  /* 588 */ { "unused#588" },
1138  /* 589 */ { "unused#589" },
1139  /* 590 */ { "unused#590" },
1140  /* 591 */ { "unused#591" },
1141  /* 592 */ { "unused#592" },
1142  /* 593 */ { "unused#593" },
1143  /* 594 */ { "unused#594" },
1144  /* 595 */ { "unused#595" },
1145  /* 596 */ { "unused#596" },
1146  /* 597 */ { "unused#597" },
1147  /* 598 */ { "unused#598" },
1148  /* 599 */ { "unused#599" },
1149  /* 600 */ { "unused#600" },
1150  /* 601 */ { "unused#601" },
1151  /* 602 */ { "unused#602" },
1152  /* 603 */ { "unused#603" },
1153  /* 604 */ { "unused#604" },
1154  /* 605 */ { "unused#605" },
1155  /* 606 */ { "unused#606" },
1156  /* 607 */ { "unused#607" },
1157  /* 608 */ { "unused#608" },
1158  /* 609 */ { "unused#609" },
1159  /* 610 */ { "unused#610" },
1160  /* 611 */ { "unused#611" },
1161  /* 612 */ { "unused#612" },
1162  /* 613 */ { "unused#613" },
1163  /* 614 */ { "unused#614" },
1164  /* 615 */ { "unused#615" },
1165  /* 616 */ { "unused#616" },
1166  /* 617 */ { "unused#617" },
1167  /* 618 */ { "unused#618" },
1168  /* 619 */ { "unused#619" },
1169  /* 620 */ { "unused#620" },
1170  /* 621 */ { "unused#621" },
1171  /* 622 */ { "unused#622" },
1172  /* 623 */ { "unused#623" },
1173  /* 624 */ { "unused#624" },
1174  /* 625 */ { "unused#625" },
1175  /* 626 */ { "unused#626" },
1176  /* 627 */ { "unused#627" },
1177  /* 628 */ { "unused#628" },
1178  /* 629 */ { "unused#629" },
1179  /* 630 */ { "unused#630" },
1180  /* 631 */ { "unused#631" },
1181  /* 632 */ { "unused#632" },
1182  /* 633 */ { "unused#633" },
1183  /* 634 */ { "unused#634" },
1184  /* 635 */ { "unused#635" },
1185  /* 636 */ { "unused#636" },
1186  /* 637 */ { "unused#637" },
1187  /* 638 */ { "unused#638" },
1188  /* 639 */ { "unused#639" },
1189  /* 640 */ { "unused#640" },
1190  /* 641 */ { "unused#641" },
1191  /* 642 */ { "unused#642" },
1192  /* 643 */ { "unused#643" },
1193  /* 644 */ { "unused#644" },
1194  /* 645 */ { "unused#645" },
1195  /* 646 */ { "unused#646" },
1196  /* 647 */ { "unused#647" },
1197  /* 648 */ { "unused#648" },
1198  /* 649 */ { "unused#649" },
1199  /* 650 */ { "unused#650" },
1200  /* 651 */ { "unused#651" },
1201  /* 652 */ { "unused#652" },
1202  /* 653 */ { "unused#653" },
1203  /* 654 */ { "unused#654" },
1204  /* 655 */ { "unused#655" },
1205  /* 656 */ { "unused#656" },
1206  /* 657 */ { "unused#657" },
1207  /* 658 */ { "unused#658" },
1208  /* 659 */ { "unused#659" },
1209  /* 660 */ { "unused#660" },
1210  /* 661 */ { "unused#661" },
1211  /* 662 */ { "unused#662" },
1212  /* 663 */ { "unused#663" },
1213  /* 664 */ { "unused#664" },
1214  /* 665 */ { "unused#665" },
1215  /* 666 */ { "unused#666" },
1216  /* 667 */ { "unused#667" },
1217  /* 668 */ { "unused#668" },
1218  /* 669 */ { "unused#669" },
1219  /* 670 */ { "unused#670" },
1220  /* 671 */ { "unused#671" },
1221  /* 672 */ { "unused#672" },
1222  /* 673 */ { "unused#673" },
1223  /* 674 */ { "unused#674" },
1224  /* 675 */ { "unused#675" },
1225  /* 676 */ { "unused#676" },
1226  /* 677 */ { "unused#677" },
1227  /* 678 */ { "unused#678" },
1228  /* 679 */ { "unused#679" },
1229  /* 680 */ { "unused#680" },
1230  /* 681 */ { "unused#681" },
1231  /* 682 */ { "unused#682" },
1232  /* 683 */ { "unused#683" },
1233  /* 684 */ { "unused#684" },
1234  /* 685 */ { "unused#685" },
1235  /* 686 */ { "unused#686" },
1236  /* 687 */ { "unused#687" },
1237  /* 688 */ { "unused#688" },
1238  /* 689 */ { "unused#689" },
1239  /* 690 */ { "unused#690" },
1240  /* 691 */ { "unused#691" },
1241  /* 692 */ { "unused#692" },
1242  /* 693 */ { "unused#693" },
1243  /* 694 */ { "unused#694" },
1244  /* 695 */ { "unused#695" },
1245  /* 696 */ { "unused#696" },
1246  /* 697 */ { "unused#697" },
1247  /* 698 */ { "unused#698" },
1248  /* 699 */ { "unused#699" },
1249  /* 700 */ { "unused#700" },
1250  /* 701 */ { "unused#701" },
1251  /* 702 */ { "unused#702" },
1252  /* 703 */ { "unused#703" },
1253  /* 704 */ { "unused#704" },
1254  /* 705 */ { "unused#705" },
1255  /* 706 */ { "unused#706" },
1256  /* 707 */ { "unused#707" },
1257  /* 708 */ { "unused#708" },
1258  /* 709 */ { "unused#709" },
1259  /* 710 */ { "unused#710" },
1260  /* 711 */ { "unused#711" },
1261  /* 712 */ { "unused#712" },
1262  /* 713 */ { "unused#713" },
1263  /* 714 */ { "unused#714" },
1264  /* 715 */ { "unused#715" },
1265  /* 716 */ { "unused#716" },
1266  /* 717 */ { "unused#717" },
1267  /* 718 */ { "unused#718" },
1268  /* 719 */ { "unused#719" },
1269  /* 720 */ { "unused#720" },
1270  /* 721 */ { "unused#721" },
1271  /* 722 */ { "unused#722" },
1272  /* 723 */ { "unused#723" },
1273  /* 724 */ { "unused#724" },
1274  /* 725 */ { "unused#725" },
1275  /* 726 */ { "unused#726" },
1276  /* 727 */ { "unused#727" },
1277  /* 728 */ { "unused#728" },
1278  /* 729 */ { "unused#729" },
1279  /* 730 */ { "unused#730" },
1280  /* 731 */ { "unused#731" },
1281  /* 732 */ { "unused#732" },
1282  /* 733 */ { "unused#733" },
1283  /* 734 */ { "unused#734" },
1284  /* 735 */ { "unused#735" },
1285  /* 736 */ { "unused#736" },
1286  /* 737 */ { "unused#737" },
1287  /* 738 */ { "unused#738" },
1288  /* 739 */ { "unused#739" },
1289  /* 740 */ { "unused#740" },
1290  /* 741 */ { "unused#741" },
1291  /* 742 */ { "unused#742" },
1292  /* 743 */ { "unused#743" },
1293  /* 744 */ { "unused#744" },
1294  /* 745 */ { "unused#745" },
1295  /* 746 */ { "unused#746" },
1296  /* 747 */ { "unused#747" },
1297  /* 748 */ { "unused#748" },
1298  /* 749 */ { "unused#749" },
1299  /* 750 */ { "unused#750" },
1300  /* 751 */ { "unused#751" },
1301  /* 752 */ { "unused#752" },
1302  /* 753 */ { "unused#753" },
1303  /* 754 */ { "unused#754" },
1304  /* 755 */ { "unused#755" },
1305  /* 756 */ { "unused#756" },
1306  /* 757 */ { "unused#757" },
1307  /* 758 */ { "unused#758" },
1308  /* 759 */ { "unused#759" },
1309  /* 760 */ { "unused#760" },
1310  /* 761 */ { "unused#761" },
1311  /* 762 */ { "unused#762" },
1312  /* 763 */ { "unused#763" },
1313  /* 764 */ { "unused#764" },
1314  /* 765 */ { "unused#765" },
1315  /* 766 */ { "unused#766" },
1316  /* 767 */ { "unused#767" },
1317  /* 768 */ { "unused#768" },
1318  /* 769 */ { "unused#769" },
1319  /* 770 */ { "unused#770" },
1320  /* 771 */ { "unused#771" },
1321  /* 772 */ { "unused#772" },
1322  /* 773 */ { "unused#773" },
1323  /* 774 */ { "unused#774" },
1324  /* 775 */ { "unused#775" },
1325  /* 776 */ { "unused#776" },
1326  /* 777 */ { "unused#777" },
1327  /* 778 */ { "unused#778" },
1328  /* 779 */ { "unused#779" },
1329  /* 780 */ { "unused#780" },
1330  /* 781 */ { "unused#781" },
1331  /* 782 */ { "unused#782" },
1332  /* 783 */ { "unused#783" },
1333  /* 784 */ { "unused#784" },
1334  /* 785 */ { "unused#785" },
1335  /* 786 */ { "unused#786" },
1336  /* 787 */ { "unused#787" },
1337  /* 788 */ { "unused#788" },
1338  /* 789 */ { "unused#789" },
1339  /* 790 */ { "unused#790" },
1340  /* 791 */ { "unused#791" },
1341  /* 792 */ { "unused#792" },
1342  /* 793 */ { "unused#793" },
1343  /* 794 */ { "unused#794" },
1344  /* 795 */ { "unused#795" },
1345  /* 796 */ { "unused#796" },
1346  /* 797 */ { "unused#797" },
1347  /* 798 */ { "unused#798" },
1348  /* 799 */ { "unused#799" },
1349  /* 800 */ { "unused#800" },
1350  /* 801 */ { "unused#801" },
1351  /* 802 */ { "unused#802" },
1352  /* 803 */ { "unused#803" },
1353  /* 804 */ { "unused#804" },
1354  /* 805 */ { "unused#805" },
1355  /* 806 */ { "unused#806" },
1356  /* 807 */ { "unused#807" },
1357  /* 808 */ { "unused#808" },
1358  /* 809 */ { "unused#809" },
1359  /* 810 */ { "unused#810" },
1360  /* 811 */ { "unused#811" },
1361  /* 812 */ { "unused#812" },
1362  /* 813 */ { "unused#813" },
1363  /* 814 */ { "unused#814" },
1364  /* 815 */ { "unused#815" },
1365  /* 816 */ { "unused#816" },
1366  /* 817 */ { "unused#817" },
1367  /* 818 */ { "unused#818" },
1368  /* 819 */ { "unused#819" },
1369  /* 820 */ { "unused#820" },
1370  /* 821 */ { "unused#821" },
1371  /* 822 */ { "unused#822" },
1372  /* 823 */ { "unused#823" },
1373  /* 824 */ { "unused#824" },
1374  /* 825 */ { "unused#825" },
1375  /* 826 */ { "unused#826" },
1376  /* 827 */ { "unused#827" },
1377  /* 828 */ { "unused#828" },
1378  /* 829 */ { "unused#829" },
1379  /* 830 */ { "unused#830" },
1380  /* 831 */ { "unused#831" },
1381  /* 832 */ { "unused#832" },
1382  /* 833 */ { "unused#833" },
1383  /* 834 */ { "unused#834" },
1384  /* 835 */ { "unused#835" },
1385  /* 836 */ { "unused#836" },
1386  /* 837 */ { "unused#837" },
1387  /* 838 */ { "unused#838" },
1388  /* 839 */ { "unused#839" },
1389  /* 840 */ { "unused#840" },
1390  /* 841 */ { "unused#841" },
1391  /* 842 */ { "unused#842" },
1392  /* 843 */ { "unused#843" },
1393  /* 844 */ { "unused#844" },
1394  /* 845 */ { "unused#845" },
1395  /* 846 */ { "unused#846" },
1396  /* 847 */ { "unused#847" },
1397  /* 848 */ { "unused#848" },
1398  /* 849 */ { "unused#849" },
1399  /* 850 */ { "unused#850" },
1400  /* 851 */ { "unused#851" },
1401  /* 852 */ { "unused#852" },
1402  /* 853 */ { "unused#853" },
1403  /* 854 */ { "unused#854" },
1404  /* 855 */ { "unused#855" },
1405  /* 856 */ { "unused#856" },
1406  /* 857 */ { "unused#857" },
1407  /* 858 */ { "unused#858" },
1408  /* 859 */ { "unused#859" },
1409  /* 860 */ { "unused#860" },
1410  /* 861 */ { "unused#861" },
1411  /* 862 */ { "unused#862" },
1412  /* 863 */ { "unused#863" },
1413  /* 864 */ { "unused#864" },
1414  /* 865 */ { "unused#865" },
1415  /* 866 */ { "unused#866" },
1416  /* 867 */ { "unused#867" },
1417  /* 868 */ { "unused#868" },
1418  /* 869 */ { "unused#869" },
1419  /* 870 */ { "unused#870" },
1420  /* 871 */ { "unused#871" },
1421  /* 872 */ { "unused#872" },
1422  /* 873 */ { "unused#873" },
1423  /* 874 */ { "unused#874" },
1424  /* 875 */ { "unused#875" },
1425  /* 876 */ { "unused#876" },
1426  /* 877 */ { "unused#877" },
1427  /* 878 */ { "unused#878" },
1428  /* 879 */ { "unused#879" },
1429  /* 880 */ { "unused#880" },
1430  /* 881 */ { "unused#881" },
1431  /* 882 */ { "unused#882" },
1432  /* 883 */ { "unused#883" },
1433  /* 884 */ { "unused#884" },
1434  /* 885 */ { "unused#885" },
1435  /* 886 */ { "unused#886" },
1436  /* 887 */ { "unused#887" },
1437  /* 888 */ { "unused#888" },
1438  /* 889 */ { "unused#889" },
1439  /* 890 */ { "unused#890" },
1440  /* 891 */ { "unused#891" },
1441  /* 892 */ { "unused#892" },
1442  /* 893 */ { "unused#893" },
1443  /* 894 */ { "unused#894" },
1444  /* 895 */ { "unused#895" },
1445  /* 896 */ { "unused#896" },
1446  /* 897 */ { "unused#897" },
1447  /* 898 */ { "unused#898" },
1448  /* 899 */ { "unused#899" },
1449  /* 900 */ { "unused#900" },
1450  /* 901 */ { "unused#901" },
1451  /* 902 */ { "unused#902" },
1452  /* 903 */ { "unused#903" },
1453  /* 904 */ { "unused#904" },
1454  /* 905 */ { "unused#905" },
1455  /* 906 */ { "unused#906" },
1456  /* 907 */ { "unused#907" },
1457  /* 908 */ { "unused#908" },
1458  /* 909 */ { "unused#909" },
1459  /* 910 */ { "unused#910" },
1460  /* 911 */ { "unused#911" },
1461  /* 912 */ { "unused#912" },
1462  /* 913 */ { "unused#913" },
1463  /* 914 */ { "unused#914" },
1464  /* 915 */ { "unused#915" },
1465  /* 916 */ { "unused#916" },
1466  /* 917 */ { "unused#917" },
1467  /* 918 */ { "unused#918" },
1468  /* 919 */ { "unused#919" },
1469  /* 920 */ { "unused#920" },
1470  /* 921 */ { "unused#921" },
1471  /* 922 */ { "unused#922" },
1472  /* 923 */ { "unused#923" },
1473  /* 924 */ { "unused#924" },
1474  /* 925 */ { "unused#925" },
1475  /* 926 */ { "unused#926" },
1476  /* 927 */ { "unused#927" },
1477  /* 928 */ { "unused#928" },
1478  /* 929 */ { "unused#929" },
1479  /* 930 */ { "unused#930" },
1480  /* 931 */ { "unused#931" },
1481  /* 932 */ { "unused#932" },
1482  /* 933 */ { "unused#933" },
1483  /* 934 */ { "unused#934" },
1484  /* 935 */ { "unused#935" },
1485  /* 936 */ { "unused#936" },
1486  /* 937 */ { "unused#937" },
1487  /* 938 */ { "unused#938" },
1488  /* 939 */ { "unused#939" },
1489  /* 940 */ { "unused#940" },
1490  /* 941 */ { "unused#941" },
1491  /* 942 */ { "unused#942" },
1492  /* 943 */ { "unused#943" },
1493  /* 944 */ { "unused#944" },
1494  /* 945 */ { "unused#945" },
1495  /* 946 */ { "unused#946" },
1496  /* 947 */ { "unused#947" },
1497  /* 948 */ { "unused#948" },
1498  /* 949 */ { "unused#949" },
1499  /* 950 */ { "unused#950" },
1500  /* 951 */ { "unused#951" },
1501  /* 952 */ { "unused#952" },
1502  /* 953 */ { "unused#953" },
1503  /* 954 */ { "unused#954" },
1504  /* 955 */ { "unused#955" },
1505  /* 956 */ { "unused#956" },
1506  /* 957 */ { "unused#957" },
1507  /* 958 */ { "unused#958" },
1508  /* 959 */ { "unused#959" },
1509  /* 960 */ { "unused#960" },
1510  /* 961 */ { "unused#961" },
1511  /* 962 */ { "unused#962" },
1512  /* 963 */ { "unused#963" },
1513  /* 964 */ { "unused#964" },
1514  /* 965 */ { "unused#965" },
1515  /* 966 */ { "unused#966" },
1516  /* 967 */ { "unused#967" },
1517  /* 968 */ { "unused#968" },
1518  /* 969 */ { "unused#969" },
1519  /* 970 */ { "unused#970" },
1520  /* 971 */ { "unused#971" },
1521  /* 972 */ { "unused#972" },
1522  /* 973 */ { "unused#973" },
1523  /* 974 */ { "unused#974" },
1524  /* 975 */ { "unused#975" },
1525  /* 976 */ { "unused#976" },
1526  /* 977 */ { "unused#977" },
1527  /* 978 */ { "unused#978" },
1528  /* 979 */ { "unused#979" },
1529  /* 980 */ { "unused#980" },
1530  /* 981 */ { "unused#981" },
1531  /* 982 */ { "unused#982" },
1532  /* 983 */ { "unused#983" },
1533  /* 984 */ { "unused#984" },
1534  /* 985 */ { "unused#985" },
1535  /* 986 */ { "unused#986" },
1536  /* 987 */ { "unused#987" },
1537  /* 988 */ { "unused#988" },
1538  /* 989 */ { "unused#989" },
1539  /* 990 */ { "unused#990" },
1540  /* 991 */ { "unused#991" },
1541  /* 992 */ { "unused#992" },
1542  /* 993 */ { "unused#993" },
1543  /* 994 */ { "unused#994" },
1544  /* 995 */ { "unused#995" },
1545  /* 996 */ { "unused#996" },
1546  /* 997 */ { "unused#997" },
1547  /* 998 */ { "unused#998" },
1548  /* 999 */ { "unused#999" },
1549  /* 1000 */ { "unused#1000" },
1550  /* 1001 */ { "unused#1001" },
1551  /* 1002 */ { "unused#1002" },
1552  /* 1003 */ { "unused#1003" },
1553  /* 1004 */ { "unused#1004" },
1554  /* 1005 */ { "unused#1005" },
1555  /* 1006 */ { "unused#1006" },
1556  /* 1007 */ { "unused#1007" },
1557  /* 1008 */ { "unused#1008" },
1558  /* 1009 */ { "unused#1009" },
1559  /* 1010 */ { "unused#1010" },
1560  /* 1011 */ { "unused#1011" },
1561  /* 1012 */ { "unused#1012" },
1562  /* 1013 */ { "unused#1013" },
1563  /* 1014 */ { "unused#1014" },
1564  /* 1015 */ { "unused#1015" },
1565  /* 1016 */ { "unused#1016" },
1566  /* 1017 */ { "unused#1017" },
1567  /* 1018 */ { "unused#1018" },
1568  /* 1019 */ { "unused#1019" },
1569  /* 1020 */ { "unused#1020" },
1570  /* 1021 */ { "unused#1021" },
1571  /* 1022 */ { "unused#1022" },
1572  /* 1023 */ { "unused#1023" },
1573  /* 1024 */ { "open", openFunc<ArmLinux64> },
1574  /* 1025 */ { "link" },
1575  /* 1026 */ { "unlink", unlinkFunc },
1576  /* 1027 */ { "mknod" },
1577  /* 1028 */ { "chmod", chmodFunc<ArmLinux64> },
1578  /* 1029 */ { "chown" },
1579  /* 1030 */ { "mkdir", mkdirFunc },
1580  /* 1031 */ { "rmdir" },
1581  /* 1032 */ { "lchown" },
1582  /* 1033 */ { "access", accessFunc },
1583  /* 1034 */ { "rename", renameFunc },
1584  /* 1035 */ { "readlink", readlinkFunc },
1585  /* 1036 */ { "symlink" },
1586  /* 1037 */ { "utimes" },
1587  /* 1038 */ { "stat64", stat64Func<ArmLinux64> },
1588  /* 1039 */ { "lstat64", lstat64Func<ArmLinux64> },
1589  /* 1040 */ { "pipe", pipePseudoFunc },
1590  /* 1041 */ { "dup2" },
1591  /* 1042 */ { "epoll_create" },
1592  /* 1043 */ { "inotify_init" },
1593  /* 1044 */ { "eventfd" },
1594  /* 1045 */ { "signalfd" },
1595  /* 1046 */ { "sendfile" },
1596  /* 1047 */ { "ftruncate", ftruncateFunc },
1597  /* 1048 */ { "truncate", truncateFunc },
1598  /* 1049 */ { "stat", statFunc<ArmLinux64> },
1599  /* 1050 */ { "lstat" },
1600  /* 1051 */ { "fstat", fstatFunc<ArmLinux64> },
1601  /* 1052 */ { "fcntl", fcntlFunc },
1602  /* 1053 */ { "fadvise64" },
1603  /* 1054 */ { "newfstatat" },
1604  /* 1055 */ { "fstatfs" },
1605  /* 1056 */ { "statfs" },
1606  /* 1057 */ { "lseek", lseekFunc },
1607  /* 1058 */ { "mmap", mmapFunc<ArmLinux64> },
1608  /* 1059 */ { "alarm" },
1609  /* 1060 */ { "getpgrp" },
1610  /* 1061 */ { "pause" },
1611  /* 1062 */ { "time", timeFunc<ArmLinux64> },
1612  /* 1063 */ { "utime" },
1613  /* 1064 */ { "creat" },
1614 #if defined(SYS_getdents)
1615  /* 1065 */ { "getdents", getdentsFunc },
1616 #else
1617  /* 1065 */ { "getdents" },
1618 #endif
1619  /* 1066 */ { "futimesat" },
1620  /* 1067 */ { "select" },
1621  /* 1068 */ { "poll" },
1622  /* 1069 */ { "epoll_wait" },
1623  /* 1070 */ { "ustat" },
1624  /* 1071 */ { "vfork" },
1625  /* 1072 */ { "oldwait4" },
1626  /* 1073 */ { "recv" },
1627  /* 1074 */ { "send" },
1628  /* 1075 */ { "bdflush" },
1629  /* 1076 */ { "umount" },
1630  /* 1077 */ { "uselib" },
1631  /* 1078 */ { "_sysctl" },
1632  /* 1079 */ { "fork" }
1633 };
1634 
1636  /* 1 */ { "breakpoint" },
1637  /* 2 */ { "cacheflush" },
1638  /* 3 */ { "usr26" },
1639  /* 4 */ { "usr32" },
1640  /* 5 */ { "set_tls", setTLSFunc32 }
1641 };
1642 
1643 // Indices 1, 3 and 4 are unallocated.
1645  /* 1 */ { "unallocated" },
1646  /* 2 */ { "cacheflush" },
1647  /* 3 */ { "unallocated" },
1648  /* 4 */ { "unallocated" },
1649  /* 5 */ { "set_tls", setTLSFunc64 }
1650 };
1651 
1653  ObjectFile *objFile, ObjectFile::Arch _arch)
1654  : ArmProcess32(params, objFile, _arch)
1655 {
1656  SyscallTable table;
1657 
1658  table.descs = syscallDescs32;
1659  table.size = sizeof(syscallDescs32) / sizeof(SyscallDesc);
1660  table.base = 0;
1661  syscallTables.push_back(table);
1662  table.base = 0x900000;
1663  syscallTables.push_back(table);
1664 
1665  table.descs = privSyscallDescs32;
1666  table.size = sizeof(privSyscallDescs32) / sizeof(SyscallDesc);
1667  table.base = 0xf0001;
1668  syscallTables.push_back(table);
1669 }
1670 
1673  : ArmProcess64(params, objFile, _arch)
1674 {
1675  SyscallTable table;
1676 
1677  table.descs = syscallDescs64;
1678  table.size = sizeof(syscallDescs64) / sizeof(SyscallDesc);
1679  table.base = 0;
1680  syscallTables.push_back(table);
1681  table.base = 0x900000;
1682  syscallTables.push_back(table);
1683 
1684  table.descs = privSyscallDescs64;
1685  table.size = sizeof(privSyscallDescs64) / sizeof(SyscallDesc);
1686  table.base = 0x1001;
1687  syscallTables.push_back(table);
1688 }
1689 
1690 const Addr ArmLinuxProcess32::commPage = 0xffff0000;
1691 
1692 SyscallDesc*
1694 {
1695  // Angel SWI syscalls are unsupported in this release
1696  if (callnum == 0x123456)
1697  panic("Attempt to execute an ANGEL_SWI system call (newlib-related)");
1698  for (unsigned i = 0; i < syscallTables.size(); i++) {
1699  SyscallDesc *desc = syscallTables[i].getDesc(callnum);
1700  if (desc)
1701  return desc;
1702  }
1703  return NULL;
1704 }
1705 
1706 SyscallDesc *
1708 {
1709  int offset = callnum - base;
1710  if (offset < 0 || offset >= size)
1711  return NULL;
1712  return &descs[offset];
1713 }
1714 
1715 SyscallDesc*
1717 {
1718  return getLinuxDesc(callnum);
1719 }
1720 
1721 SyscallDesc*
1723 {
1724  return getLinuxDesc(callnum);
1725 }
1726 
1727 void
1729 {
1731  allocateMem(commPage, PageBytes);
1733 
1734  uint8_t swiNeg1[] = {
1735  0xff, 0xff, 0xff, 0xef // swi -1
1736  };
1737 
1738  // Fill this page with swi -1 so we'll no if we land in it somewhere.
1739  for (Addr addr = 0; addr < PageBytes; addr += sizeof(swiNeg1)) {
1740  tc->getVirtProxy().writeBlob(commPage + addr,
1741  swiNeg1, sizeof(swiNeg1));
1742  }
1743 
1744  uint8_t memory_barrier[] =
1745  {
1746  0x5f, 0xf0, 0x7f, 0xf5, // dmb
1747  0x0e, 0xf0, 0xa0, 0xe1 // return
1748  };
1749  tc->getVirtProxy().writeBlob(commPage + 0x0fa0, memory_barrier,
1750  sizeof(memory_barrier));
1751 
1752  uint8_t cmpxchg[] =
1753  {
1754  0x9f, 0x3f, 0x92, 0xe1, // ldrex r3, [r2]
1755  0x00, 0x30, 0x53, 0xe0, // subs r3, r3, r0
1756  0x91, 0x3f, 0x82, 0x01, // strexeq r3, r1, [r2]
1757  0x01, 0x00, 0x33, 0x03, // teqeq r3, #1
1758  0xfa, 0xff, 0xff, 0x0a, // beq 1b
1759  0x00, 0x00, 0x73, 0xe2, // rsbs r0, r3, #0
1760  0x5f, 0xf0, 0x7f, 0xf5, // dmb
1761  0x0e, 0xf0, 0xa0, 0xe1 // return
1762  };
1763  tc->getVirtProxy().writeBlob(commPage + 0x0fc0, cmpxchg, sizeof(cmpxchg));
1764 
1765  uint8_t get_tls[] =
1766  {
1767  // read user read-only thread id register
1768  0x70, 0x0f, 0x1d, 0xee, // mrc p15, 0, r0, c13, c0, 3
1769  0x0e, 0xf0, 0xa0, 0xe1 // return
1770  };
1771  tc->getVirtProxy().writeBlob(commPage + 0x0fe0, get_tls, sizeof(get_tls));
1772 }
1773 
1774 void
1776 {
1778  // The 64 bit equivalent of the comm page would be set up here.
1779 }
1780 
1781 void
1783 {
1784  doSyscall(tc->readIntReg(INTREG_R7), tc, fault);
1785 }
1786 
1787 void
1789 {
1790  doSyscall(tc->readIntReg(INTREG_X8), tc, fault);
1791 }
#define panic(...)
This implements a cprintf based panic() function.
Definition: logging.hh:167
ObjectFile * objFile
Definition: process.hh:217
virtual void setMiscReg(RegIndex misc_reg, RegVal val)=0
Bitfield< 30, 0 > index
Arch getArch() const
Definition: object_file.hh:124
#define fatal(...)
This implements a cprintf based fatal() function.
Definition: logging.hh:175
const std::string & name()
Definition: trace.cc:54
Bitfield< 7 > i
SyscallReturn geteuidFunc(SyscallDesc *desc, int callnum, ThreadContext *tc)
Target geteuid() handler.
SyscallReturn ignoreFunc(SyscallDesc *desc, int callnum, ThreadContext *tc)
Handler for unimplemented syscalls that we never intend to implement (signal handling, etc.) and should not affect the correct behavior of the program.
Definition: syscall_emul.cc:77
SyscallReturn getcwdFunc(SyscallDesc *desc, int num, ThreadContext *tc, Addr buf_ptr, unsigned long size)
Target getcwd() handler.
virtual RegVal readIntReg(RegIndex reg_idx) const =0
static SyscallReturn unameFunc32(SyscallDesc *desc, int callnum, ThreadContext *tc)
Target uname() handler.
Definition: process.cc:108
std::vector< ContextID > contextIds
Definition: process.hh:167
A process with emulated Arm/Linux syscalls.
Definition: process.hh:68
void initState() override
initState() is called on each SimObject when not restoring from a checkpoint.
Definition: process.cc:103
void allocateMem(Addr vaddr, int64_t size, bool clobber=false)
Definition: process.cc:333
ip6_addr_t addr
Definition: inet.hh:335
virtual PortProxy & getVirtProxy()=0
void initState() override
initState() is called on each SimObject when not restoring from a checkpoint.
Definition: process.cc:122
virtual Process * getProcessPtr()=0
Bitfield< 23, 0 > offset
Definition: types.hh:154
SyscallReturn fcntlFunc(SyscallDesc *desc, int num, ThreadContext *tc)
Target fcntl() handler.
Overload hash function for BasicBlockRange type.
Definition: vec_reg.hh:586
static SyscallDescABI< DefaultSyscallABI > syscallDescs32[]
Definition: process.cc:167
Definition: ccregs.hh:42
void doSyscall(int64_t callnum, ThreadContext *tc, Fault *fault)
Definition: process.cc:430
ArmLinuxProcess32(ProcessParams *params, ObjectFile *objFile, ObjectFile::Arch _arch)
Definition: process.cc:1652
TypedBufferArg is a class template; instances of this template represent typed buffers in target user...
ThreadContext is the external interface to all thread state for anything outside of the CPU...
SyscallReturn closeFunc(SyscallDesc *desc, int num, ThreadContext *tc, int tgt_fd)
Target close() handler.
SyscallDesc * getLinuxDesc(int callnum)
Definition: process.cc:1693
static SyscallDescABI< DefaultSyscallABI > privSyscallDescs64[]
Definition: process.cc:1644
ThreadContext * getThreadContext(ContextID tid) const
Definition: system.hh:194
SyscallReturn getegidFunc(SyscallDesc *desc, int callnum, ThreadContext *tc)
Target getegid() handler.
SyscallReturn renameFunc(SyscallDesc *desc, int num, ThreadContext *tc, Addr oldpath, Addr newpath)
Target rename() handler.
SyscallReturn umaskFunc(SyscallDesc *desc, int num, ThreadContext *tc)
Target umask() handler.
static SyscallReturn setTLSFunc64(SyscallDesc *desc, int callnum, ThreadContext *tc)
Definition: process.cc:157
SyscallReturn munmapFunc(SyscallDesc *desc, int num, ThreadContext *tc)
Target munmap() handler.
SyscallReturn getuidFunc(SyscallDesc *desc, int callnum, ThreadContext *tc)
SyscallReturn unlinkFunc(SyscallDesc *desc, int num, ThreadContext *tc, Addr pathname)
Target unlink() handler.
void syscall(ThreadContext *tc, Fault *fault) override
Definition: process.cc:1788
SyscallReturn exitGroupFunc(SyscallDesc *desc, int callnum, ThreadContext *tc, int status)
Target exit_group() handler: terminate simulation. (exit all threads)
SyscallReturn mkdirFunc(SyscallDesc *desc, int num, ThreadContext *tc, Addr pathname, mode_t mode)
Target mkdir() handler.
void writeBlob(Addr addr, const void *p, int size) const
Same as tryWriteBlob, but insists on success.
Definition: port_proxy.hh:189
SyscallReturn _llseekFunc(SyscallDesc *desc, int num, ThreadContext *tc, int tgt_fd, uint64_t offset_high, uint32_t offset_low, Addr result_ptr, int whence)
Target _llseek() handler.
Bitfield< 51, 12 > base
Definition: pagetable.hh:142
SyscallReturn readlinkFunc(SyscallDesc *desc, int num, ThreadContext *tc, Addr pathname, Addr buf_ptr, size_t bufsiz)
Target readlink() handler.
virtual RegVal getSyscallArg(ThreadContext *tc, int &i)=0
System * system
Definition: process.hh:170
SyscallReturn ftruncateFunc(SyscallDesc *desc, int num, ThreadContext *tc, int tgt_fd, off_t length)
Target ftruncate() handler.
void initState() override
initState() is called on each SimObject when not restoring from a checkpoint.
Definition: process.cc:1775
SyscallReturn getppidFunc(SyscallDesc *desc, int callnum, ThreadContext *tc)
Target getppid() handler.
SyscallReturn brkFunc(SyscallDesc *desc, int num, ThreadContext *tc, Addr new_brk)
Target brk() handler: set brk address.
SyscallReturn ignoreWarnOnceFunc(SyscallDesc *desc, int num, ThreadContext *tc)
Like above, but only prints a warning once per syscall desc it&#39;s used with.
Definition: syscall_emul.cc:84
SyscallDesc * getDesc(int offset) const
Definition: process.cc:1707
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
A process with emulated Arm/Linux syscalls.
Definition: process.hh:88
SyscallReturn dupFunc(SyscallDesc *desc, int num, ThreadContext *tc, int tgt_fd)
FIXME: The file description is not shared among file descriptors created with dup.
SyscallReturn getgidFunc(SyscallDesc *desc, int callnum, ThreadContext *tc)
Target getgid() handler.
void syscall(ThreadContext *tc, Fault *fault) override
Definition: process.cc:1782
const Addr PageBytes
Definition: isa_traits.hh:47
This class provides the wrapper interface for the system call implementations which are defined in th...
Definition: syscall_desc.hh:69
static SyscallReturn setTLSFunc32(SyscallDesc *desc, int callnum, ThreadContext *tc)
Target set_tls() handler.
Definition: process.cc:144
SyscallReturn gettidFunc(SyscallDesc *desc, int callnum, ThreadContext *tc)
Target gettid() handler.
SyscallReturn truncateFunc(SyscallDesc *desc, int num, ThreadContext *tc, Addr pathname, off_t length)
Target truncate() handler.
SyscallReturn fcntl64Func(SyscallDesc *desc, int num, ThreadContext *tc)
Target fcntl64() handler.
void initState() override
initState() is called on each SimObject when not restoring from a checkpoint.
Definition: process.cc:1728
SyscallReturn lseekFunc(SyscallDesc *desc, int num, ThreadContext *tc, int tgt_fd, uint64_t offs, int whence)
Target lseek() handler.
SyscallReturn accessFunc(SyscallDesc *desc, int callnum, ThreadContext *tc, Addr pathname, mode_t mode)
Target access() handler.
This file defines objects used to emulate syscalls from the target application on the host machine...
SyscallReturn setTidAddressFunc(SyscallDesc *desc, int callnum, ThreadContext *tc, uint64_t tidPtr)
Target set_tid_address() handler.
SyscallDesc * getDesc(int callnum) override
Definition: process.cc:1716
OpSys getOpSys() const
Definition: object_file.hh:125
static SyscallReturn unameFunc64(SyscallDesc *desc, int callnum, ThreadContext *tc)
Target uname() handler.
Definition: process.cc:126
ArmLinuxProcess64(ProcessParams *params, ObjectFile *objFile, ObjectFile::Arch _arch)
Definition: process.cc:1671
SyscallReturn chownFunc(SyscallDesc *desc, int num, ThreadContext *tc, Addr pathname, uint32_t owner, uint32_t group)
Target chown() handler.
static SyscallDescABI< DefaultSyscallABI > syscallDescs64[]
Definition: process.cc:544
std::vector< SyscallTable > syscallTables
Definition: process.hh:64
static const Addr commPage
A page to hold "kernel" provided functions. The name might be wrong.
Definition: process.hh:82
static SyscallDescABI< DefaultSyscallABI > privSyscallDescs32[]
Definition: process.cc:1635
#define warn(...)
Definition: logging.hh:212
SyscallReturn pipePseudoFunc(SyscallDesc *desc, int callnum, ThreadContext *tc)
Pseudo Funcs - These functions use a different return convension, returning a second value in a regis...
This class represents the return value from an emulated system call, including any errno setting...
SyscallDesc * getDesc(int callnum) override
Definition: process.cc:1722
Each instance of a Loader subclass will have a chance to try to load an object file when tryLoaders i...
Definition: process.hh:191
std::shared_ptr< FaultBase > Fault
Definition: types.hh:240
SyscallReturn getpidFunc(SyscallDesc *desc, int callnum, ThreadContext *tc)
Target getpid() handler.
SyscallReturn exitFunc(SyscallDesc *desc, int callnum, ThreadContext *tc, int status)
Target exit() handler: terminate current context.
SyscallReturn ftruncate64Func(SyscallDesc *desc, int num, ThreadContext *tc)
Target ftruncate64() handler.

Generated on Fri Feb 28 2020 16:26:56 for gem5 by doxygen 1.8.13