039148739d274c9c48cc3566ed1622514aac0b9e
[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 * Authors: Korey Sewell
42 * Stephen Hines
43 * Ali Saidi
44 * Giacomo Gabrielli
45 */
46
47 #include "arch/arm/linux/process.hh"
48
49 #include <sys/syscall.h>
50
51 #include "arch/arm/isa_traits.hh"
52 #include "arch/arm/linux/linux.hh"
53 #include "base/loader/object_file.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
106 /// Target uname() handler.
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
124 /// Target uname() handler.
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
142 /// Target set_tls() handler.
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
150 tc->getVirtProxy().writeBlob(ArmLinuxProcess32::commPage + 0x0ff0,
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
167 static SyscallDescABI<DefaultSyscallABI> syscallDescs32[] = {
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", setuidFunc },
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
544 static SyscallDescABI<DefaultSyscallABI> syscallDescs64[] = {
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
1635 static SyscallDescABI<DefaultSyscallABI> privSyscallDescs32[] = {
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.
1644 static SyscallDescABI<DefaultSyscallABI> privSyscallDescs64[] = {
1645 /* 1 */ { "unallocated" },
1646 /* 2 */ { "cacheflush" },
1647 /* 3 */ { "unallocated" },
1648 /* 4 */ { "unallocated" },
1649 /* 5 */ { "set_tls", setTLSFunc64 }
1650 };
1651
1652 ArmLinuxProcess32::ArmLinuxProcess32(ProcessParams * params,
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
1671 ArmLinuxProcess64::ArmLinuxProcess64(ProcessParams * params,
1672 ObjectFile *objFile, ObjectFile::Arch _arch)
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*
1693 ArmLinuxProcessBits::getLinuxDesc(int callnum)
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 *
1707 ArmLinuxProcessBits::SyscallTable::getDesc(int callnum) const
1708 {
1709 int offset = callnum - base;
1710 if (offset < 0 || offset >= size)
1711 return NULL;
1712 return &descs[offset];
1713 }
1714
1715 SyscallDesc*
1716 ArmLinuxProcess32::getDesc(int callnum)
1717 {
1718 return getLinuxDesc(callnum);
1719 }
1720
1721 SyscallDesc*
1722 ArmLinuxProcess64::getDesc(int callnum)
1723 {
1724 return getLinuxDesc(callnum);
1725 }
1726
1727 void
1728 ArmLinuxProcess32::initState()
1729 {
1730 ArmProcess32::initState();
1731 allocateMem(commPage, PageBytes);
1732 ThreadContext *tc = system->getThreadContext(contextIds[0]);
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
1775 ArmLinuxProcess64::initState()
1776 {
1777 ArmProcess64::initState();
1778 // The 64 bit equivalent of the comm page would be set up here.
1779 }
1780
1781 void
1782 ArmLinuxProcess32::syscall(ThreadContext *tc, Fault *fault)
1783 {
1784 doSyscall(tc->readIntReg(INTREG_R7), tc, fault);
1785 }
1786
1787 void
1788 ArmLinuxProcess64::syscall(ThreadContext *tc, Fault *fault)
1789 {
1790 doSyscall(tc->readIntReg(INTREG_X8), tc, fault);
1791 }