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