summaryrefslogtreecommitdiff
path: root/src/arch/arm/linux
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/arm/linux')
-rw-r--r--src/arch/arm/linux/linux.cc121
-rw-r--r--src/arch/arm/linux/linux.hh190
-rw-r--r--src/arch/arm/linux/process.cc1308
-rw-r--r--src/arch/arm/linux/process.hh61
-rw-r--r--src/arch/arm/linux/system.cc26
-rw-r--r--src/arch/arm/linux/system.hh4
6 files changed, 1577 insertions, 133 deletions
diff --git a/src/arch/arm/linux/linux.cc b/src/arch/arm/linux/linux.cc
index 1e3a1e725..62519d38b 100644
--- a/src/arch/arm/linux/linux.cc
+++ b/src/arch/arm/linux/linux.cc
@@ -1,4 +1,16 @@
/*
+ * Copyright (c) 2011 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder. You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
* Copyright (c) 2003-2005 The Regents of The University of Michigan
* Copyright (c) 2007-2008 The Florida State University
* All rights reserved.
@@ -34,55 +46,108 @@
#include "arch/arm/linux/linux.hh"
// open(2) flags translation table
-OpenFlagTransTable ArmLinux::openFlagTable[] = {
+OpenFlagTransTable ArmLinux32::openFlagTable[] = {
+#ifdef _MSC_VER
+ { ArmLinux32::TGT_O_RDONLY, _O_RDONLY },
+ { ArmLinux32::TGT_O_WRONLY, _O_WRONLY },
+ { ArmLinux32::TGT_O_RDWR, _O_RDWR },
+ { ArmLinux32::TGT_O_APPEND, _O_APPEND },
+ { ArmLinux32::TGT_O_CREAT, _O_CREAT },
+ { ArmLinux32::TGT_O_TRUNC, _O_TRUNC },
+ { ArmLinux32::TGT_O_EXCL, _O_EXCL },
+#ifdef _O_NONBLOCK
+ { ArmLinux32::TGT_O_NONBLOCK, _O_NONBLOCK },
+#endif
+#ifdef _O_NOCTTY
+ { ArmLinux32::TGT_O_NOCTTY, _O_NOCTTY },
+#endif
+#ifdef _O_SYNC
+ { ArmLinux32::TGT_O_SYNC, _O_SYNC },
+#endif
+#else /* !_MSC_VER */
+ { ArmLinux32::TGT_O_RDONLY, O_RDONLY },
+ { ArmLinux32::TGT_O_WRONLY, O_WRONLY },
+ { ArmLinux32::TGT_O_RDWR, O_RDWR },
+ { ArmLinux32::TGT_O_CREAT, O_CREAT },
+ { ArmLinux32::TGT_O_EXCL, O_EXCL },
+ { ArmLinux32::TGT_O_NOCTTY, O_NOCTTY },
+ { ArmLinux32::TGT_O_TRUNC, O_TRUNC },
+ { ArmLinux32::TGT_O_APPEND, O_APPEND },
+ { ArmLinux32::TGT_O_NONBLOCK, O_NONBLOCK },
+#ifdef O_SYNC
+ { ArmLinux32::TGT_O_SYNC, O_SYNC },
+#endif
+#ifdef FASYNC
+ { ArmLinux32::TGT_FASYNC, FASYNC },
+#endif
+#ifdef O_DIRECT
+ { ArmLinux32::TGT_O_DIRECT, O_DIRECT },
+#endif
+#ifdef O_LARGEFILE
+ { ArmLinux32::TGT_O_LARGEFILE, O_LARGEFILE },
+#endif
+#ifdef O_DIRECTORY
+ { ArmLinux32::TGT_O_DIRECTORY, O_DIRECTORY },
+#endif
+#ifdef O_NOFOLLOW
+ { ArmLinux32::TGT_O_NOFOLLOW, O_NOFOLLOW },
+#endif
+#endif /* _MSC_VER */
+};
+
+const int ArmLinux32::NUM_OPEN_FLAGS = sizeof(ArmLinux32::openFlagTable) /
+ sizeof(ArmLinux32::openFlagTable[0]);
+
+// open(2) flags translation table
+OpenFlagTransTable ArmLinux64::openFlagTable[] = {
#ifdef _MSC_VER
- { ArmLinux::TGT_O_RDONLY, _O_RDONLY },
- { ArmLinux::TGT_O_WRONLY, _O_WRONLY },
- { ArmLinux::TGT_O_RDWR, _O_RDWR },
- { ArmLinux::TGT_O_APPEND, _O_APPEND },
- { ArmLinux::TGT_O_CREAT, _O_CREAT },
- { ArmLinux::TGT_O_TRUNC, _O_TRUNC },
- { ArmLinux::TGT_O_EXCL, _O_EXCL },
+ { ArmLinux64::TGT_O_RDONLY, _O_RDONLY },
+ { ArmLinux64::TGT_O_WRONLY, _O_WRONLY },
+ { ArmLinux64::TGT_O_RDWR, _O_RDWR },
+ { ArmLinux64::TGT_O_APPEND, _O_APPEND },
+ { ArmLinux64::TGT_O_CREAT, _O_CREAT },
+ { ArmLinux64::TGT_O_TRUNC, _O_TRUNC },
+ { ArmLinux64::TGT_O_EXCL, _O_EXCL },
#ifdef _O_NONBLOCK
- { ArmLinux::TGT_O_NONBLOCK, _O_NONBLOCK },
+ { ArmLinux64::TGT_O_NONBLOCK, _O_NONBLOCK },
#endif
#ifdef _O_NOCTTY
- { ArmLinux::TGT_O_NOCTTY, _O_NOCTTY },
+ { ArmLinux64::TGT_O_NOCTTY, _O_NOCTTY },
#endif
#ifdef _O_SYNC
- { ArmLinux::TGT_O_SYNC, _O_SYNC },
+ { ArmLinux64::TGT_O_SYNC, _O_SYNC },
#endif
#else /* !_MSC_VER */
- { ArmLinux::TGT_O_RDONLY, O_RDONLY },
- { ArmLinux::TGT_O_WRONLY, O_WRONLY },
- { ArmLinux::TGT_O_RDWR, O_RDWR },
- { ArmLinux::TGT_O_CREAT, O_CREAT },
- { ArmLinux::TGT_O_EXCL, O_EXCL },
- { ArmLinux::TGT_O_NOCTTY, O_NOCTTY },
- { ArmLinux::TGT_O_TRUNC, O_TRUNC },
- { ArmLinux::TGT_O_APPEND, O_APPEND },
- { ArmLinux::TGT_O_NONBLOCK, O_NONBLOCK },
+ { ArmLinux64::TGT_O_RDONLY, O_RDONLY },
+ { ArmLinux64::TGT_O_WRONLY, O_WRONLY },
+ { ArmLinux64::TGT_O_RDWR, O_RDWR },
+ { ArmLinux64::TGT_O_CREAT, O_CREAT },
+ { ArmLinux64::TGT_O_EXCL, O_EXCL },
+ { ArmLinux64::TGT_O_NOCTTY, O_NOCTTY },
+ { ArmLinux64::TGT_O_TRUNC, O_TRUNC },
+ { ArmLinux64::TGT_O_APPEND, O_APPEND },
+ { ArmLinux64::TGT_O_NONBLOCK, O_NONBLOCK },
#ifdef O_SYNC
- { ArmLinux::TGT_O_SYNC, O_SYNC },
+ { ArmLinux64::TGT_O_SYNC, O_SYNC },
#endif
#ifdef FASYNC
- { ArmLinux::TGT_FASYNC, FASYNC },
+ { ArmLinux64::TGT_FASYNC, FASYNC },
#endif
#ifdef O_DIRECT
- { ArmLinux::TGT_O_DIRECT, O_DIRECT },
+ { ArmLinux64::TGT_O_DIRECT, O_DIRECT },
#endif
#ifdef O_LARGEFILE
- { ArmLinux::TGT_O_LARGEFILE, O_LARGEFILE },
+ { ArmLinux64::TGT_O_LARGEFILE, O_LARGEFILE },
#endif
#ifdef O_DIRECTORY
- { ArmLinux::TGT_O_DIRECTORY, O_DIRECTORY },
+ { ArmLinux64::TGT_O_DIRECTORY, O_DIRECTORY },
#endif
#ifdef O_NOFOLLOW
- { ArmLinux::TGT_O_NOFOLLOW, O_NOFOLLOW },
+ { ArmLinux64::TGT_O_NOFOLLOW, O_NOFOLLOW },
#endif
#endif /* _MSC_VER */
};
-const int ArmLinux::NUM_OPEN_FLAGS =
- (sizeof(ArmLinux::openFlagTable)/sizeof(ArmLinux::openFlagTable[0]));
+const int ArmLinux64::NUM_OPEN_FLAGS = sizeof(ArmLinux64::openFlagTable) /
+ sizeof(ArmLinux64::openFlagTable[0]);
diff --git a/src/arch/arm/linux/linux.hh b/src/arch/arm/linux/linux.hh
index 5a3e68a78..fbf5d2185 100644
--- a/src/arch/arm/linux/linux.hh
+++ b/src/arch/arm/linux/linux.hh
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010 ARM Limited
+ * Copyright (c) 2010, 2011-2012 ARM Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
@@ -47,7 +47,7 @@
#include "kern/linux/linux.hh"
-class ArmLinux : public Linux
+class ArmLinux32 : public Linux
{
public:
@@ -123,8 +123,10 @@ class ArmLinux : public Linux
uint16_t st_uid;
uint16_t st_gid;
uint32_t st_rdev;
+ uint32_t __pad1;
uint32_t st_size;
uint32_t st_blksize;
+ uint32_t __pad2;
uint32_t st_blocks;
uint32_t st_atimeX;
uint32_t st_atime_nsec;
@@ -198,8 +200,192 @@ class ArmLinux : public Linux
int32_t tms_cutime; //!< user time of children
int32_t tms_cstime; //!< system time of children
};
+};
+
+class ArmLinux64 : public Linux
+{
+ public:
+
+ /// This table maps the target open() flags to the corresponding
+ /// host open() flags.
+ static OpenFlagTransTable openFlagTable[];
+
+ /// Number of entries in openFlagTable[].
+ static const int NUM_OPEN_FLAGS;
+
+ //@{
+ /// Basic ARM Linux types
+ typedef uint64_t size_t;
+ typedef uint64_t off_t;
+ typedef int64_t time_t;
+ typedef int64_t clock_t;
+ //@}
+
+ //@{
+ /// open(2) flag values.
+ static const int TGT_O_RDONLY = 00000000; //!< O_RDONLY
+ static const int TGT_O_WRONLY = 00000001; //!< O_WRONLY
+ static const int TGT_O_RDWR = 00000002; //!< O_RDWR
+ static const int TGT_O_CREAT = 00000100; //!< O_CREAT
+ static const int TGT_O_EXCL = 00000200; //!< O_EXCL
+ static const int TGT_O_NOCTTY = 00000400; //!< O_NOCTTY
+ static const int TGT_O_TRUNC = 00001000; //!< O_TRUNC
+ static const int TGT_O_APPEND = 00002000; //!< O_APPEND
+ static const int TGT_O_NONBLOCK = 00004000; //!< O_NONBLOCK
+ static const int TGT_O_SYNC = 00010000; //!< O_SYNC
+ static const int TGT_FASYNC = 00020000; //!< FASYNC
+ static const int TGT_O_DIRECT = 00040000; //!< O_DIRECT
+ static const int TGT_O_LARGEFILE = 00100000; //!< O_LARGEFILE
+ static const int TGT_O_DIRECTORY = 00200000; //!< O_DIRECTORY
+ static const int TGT_O_NOFOLLOW = 00400000; //!< O_NOFOLLOW
+ static const int TGT_O_NOATIME = 01000000; //!< O_NOATIME
+ static const int TGT_O_CLOEXEC = 02000000; //!< O_NOATIME
+ //@}
+ /// For mmap().
+ static const unsigned TGT_MAP_ANONYMOUS = 0x20;
+ static const unsigned TGT_MAP_FIXED = 0x10;
+ //@{
+ /// For getrusage().
+ static const int TGT_RUSAGE_SELF = 0;
+ static const int TGT_RUSAGE_CHILDREN = -1;
+ static const int TGT_RUSAGE_BOTH = -2;
+ //@}
+
+ //@{
+ /// ioctl() command codes.
+ static const unsigned TIOCGETP_ = 0x5401;
+ static const unsigned TIOCSETP_ = 0x80067409;
+ static const unsigned TIOCSETN_ = 0x8006740a;
+ static const unsigned TIOCSETC_ = 0x80067411;
+ static const unsigned TIOCGETC_ = 0x40067412;
+ static const unsigned FIONREAD_ = 0x4004667f;
+ static const unsigned TIOCISATTY_ = 0x2000745e;
+ static const unsigned TIOCGETS_ = 0x402c7413;
+ static const unsigned TIOCGETA_ = 0x5405;
+ static const unsigned TCSETAW_ = 0x5407; // 2.6.15 kernel
+ //@}
+
+ /// For table().
+ static const int TBL_SYSINFO = 12;
+
+ /// Resource enumeration for getrlimit().
+ enum rlimit_resources {
+ TGT_RLIMIT_CPU = 0,
+ TGT_RLIMIT_FSIZE = 1,
+ TGT_RLIMIT_DATA = 2,
+ TGT_RLIMIT_STACK = 3,
+ TGT_RLIMIT_CORE = 4,
+ TGT_RLIMIT_RSS = 5,
+ TGT_RLIMIT_NPROC = 6,
+ TGT_RLIMIT_NOFILE = 7,
+ TGT_RLIMIT_MEMLOCK = 8,
+ TGT_RLIMIT_AS = 9,
+ TGT_RLIMIT_LOCKS = 10
+ };
+
+ /// Limit struct for getrlimit/setrlimit.
+ struct rlimit {
+ uint64_t rlim_cur; //!< soft limit
+ uint64_t rlim_max; //!< hard limit
+ };
+
+ /// For gettimeofday().
+ struct timeval {
+ int64_t tv_sec; //!< seconds
+ int64_t tv_usec; //!< microseconds
+ };
+
+ // For writev/readv
+ struct tgt_iovec {
+ uint64_t iov_base; // void *
+ uint64_t iov_len;
+ };
+
+ typedef struct {
+ uint64_t st_dev;
+ uint64_t st_ino;
+ uint64_t st_nlink;
+ uint32_t st_mode;
+ uint32_t st_uid;
+ uint32_t st_gid;
+ uint32_t __pad0;
+ uint64_t st_rdev;
+ uint64_t st_size;
+ uint64_t st_blksize;
+ uint64_t st_blocks;
+ uint64_t st_atimeX;
+ uint64_t st_atime_nsec;
+ uint64_t st_mtimeX;
+ uint64_t st_mtime_nsec;
+ uint64_t st_ctimeX;
+ uint64_t st_ctime_nsec;
+ } tgt_stat;
+
+ typedef struct {
+ uint64_t st_dev;
+ uint64_t st_ino;
+ uint32_t st_mode;
+ uint32_t st_nlink;
+ uint32_t st_uid;
+ uint32_t st_gid;
+ uint32_t __pad0;
+ uint64_t st_rdev;
+ uint64_t st_size;
+ uint64_t st_blksize;
+ uint64_t st_blocks;
+ uint64_t st_atimeX;
+ uint64_t st_atime_nsec;
+ uint64_t st_mtimeX;
+ uint64_t st_mtime_nsec;
+ uint64_t st_ctimeX;
+ uint64_t st_ctime_nsec;
+ } tgt_stat64;
+
+ typedef struct {
+ int64_t uptime; /* Seconds since boot */
+ uint64_t loads[3]; /* 1, 5, and 15 minute load averages */
+ uint64_t totalram; /* Total usable main memory size */
+ uint64_t freeram; /* Available memory size */
+ uint64_t sharedram; /* Amount of shared memory */
+ uint64_t bufferram; /* Memory used by buffers */
+ uint64_t totalswap; /* Total swap space size */
+ uint64_t freeswap; /* swap space still available */
+ uint16_t procs; /* Number of current processes */
+ uint16_t pad;
+ uint64_t totalhigh; /* Total high memory size */
+ uint64_t freehigh; /* Available high memory size */
+ uint32_t mem_unit; /* Memory unit size in bytes */
+ } tgt_sysinfo;
+
+ /// For getrusage().
+ struct rusage {
+ struct timeval ru_utime; //!< user time used
+ struct timeval ru_stime; //!< system time used
+ int64_t ru_maxrss; //!< max rss
+ int64_t ru_ixrss; //!< integral shared memory size
+ int64_t ru_idrss; //!< integral unshared data "
+ int64_t ru_isrss; //!< integral unshared stack "
+ int64_t ru_minflt; //!< page reclaims - total vmfaults
+ int64_t ru_majflt; //!< page faults
+ int64_t ru_nswap; //!< swaps
+ int64_t ru_inblock; //!< block input operations
+ int64_t ru_oublock; //!< block output operations
+ int64_t ru_msgsnd; //!< messages sent
+ int64_t ru_msgrcv; //!< messages received
+ int64_t ru_nsignals; //!< signals received
+ int64_t ru_nvcsw; //!< voluntary context switches
+ int64_t ru_nivcsw; //!< involuntary "
+ };
+
+ /// For times().
+ struct tms {
+ int64_t tms_utime; //!< user time
+ int64_t tms_stime; //!< system time
+ int64_t tms_cutime; //!< user time of children
+ int64_t tms_cstime; //!< system time of children
+ };
};
#endif
diff --git a/src/arch/arm/linux/process.cc b/src/arch/arm/linux/process.cc
index 169565a04..e34a813ea 100644
--- a/src/arch/arm/linux/process.cc
+++ b/src/arch/arm/linux/process.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010 ARM Limited
+ * Copyright (c) 2010-2013 ARM Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
@@ -41,6 +41,7 @@
* Authors: Korey Sewell
* Stephen Hines
* Ali Saidi
+ * Giacomo Gabrielli
*/
#include "arch/arm/linux/linux.hh"
@@ -58,8 +59,8 @@ using namespace ArmISA;
/// Target uname() handler.
static SyscallReturn
-unameFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
- ThreadContext *tc)
+unameFunc32(SyscallDesc *desc, int callnum, LiveProcess *process,
+ ThreadContext *tc)
{
int index = 0;
TypedBufferArg<Linux::utsname> name(process->getSyscallArg(tc, index));
@@ -74,13 +75,56 @@ unameFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
return 0;
}
-SyscallDesc ArmLinuxProcess::syscallDescs[] = {
+/// Target uname() handler.
+static SyscallReturn
+unameFunc64(SyscallDesc *desc, int callnum, LiveProcess *process,
+ ThreadContext *tc)
+{
+ int index = 0;
+ TypedBufferArg<Linux::utsname> name(process->getSyscallArg(tc, index));
+
+ strcpy(name->sysname, "Linux");
+ strcpy(name->nodename, "gem5");
+ strcpy(name->release, "3.7.0+");
+ strcpy(name->version, "#1 SMP Sat Dec 1 00:00:00 GMT 2012");
+ strcpy(name->machine, "armv8l");
+
+ name.copyOut(tc->getMemProxy());
+ return 0;
+}
+
+/// Target set_tls() handler.
+static SyscallReturn
+setTLSFunc32(SyscallDesc *desc, int callnum, LiveProcess *process,
+ ThreadContext *tc)
+{
+ int index = 0;
+ uint32_t tlsPtr = process->getSyscallArg(tc, index);
+
+ tc->getMemProxy().writeBlob(ArmLinuxProcess32::commPage + 0x0ff0,
+ (uint8_t *)&tlsPtr, sizeof(tlsPtr));
+ tc->setMiscReg(MISCREG_TPIDRURO,tlsPtr);
+ return 0;
+}
+
+static SyscallReturn
+setTLSFunc64(SyscallDesc *desc, int callnum, LiveProcess *process,
+ ThreadContext *tc)
+{
+ int index = 0;
+ uint32_t tlsPtr = process->getSyscallArg(tc, index);
+
+ tc->setMiscReg(MISCREG_TPIDRRO_EL0, tlsPtr);
+ return 0;
+}
+
+static SyscallDesc syscallDescs32[] = {
/* 0 */ SyscallDesc("syscall", unimplementedFunc),
/* 1 */ SyscallDesc("exit", exitFunc),
/* 2 */ SyscallDesc("fork", unimplementedFunc),
/* 3 */ SyscallDesc("read", readFunc),
/* 4 */ SyscallDesc("write", writeFunc),
- /* 5 */ SyscallDesc("open", openFunc<ArmLinux>),
+ /* 5 */ SyscallDesc("open", openFunc<ArmLinux32>),
/* 6 */ SyscallDesc("close", closeFunc),
/* 7 */ SyscallDesc("unused#7", unimplementedFunc),
/* 8 */ SyscallDesc("creat", unimplementedFunc),
@@ -88,9 +132,9 @@ SyscallDesc ArmLinuxProcess::syscallDescs[] = {
/* 10 */ SyscallDesc("unlink", unlinkFunc),
/* 11 */ SyscallDesc("execve", unimplementedFunc),
/* 12 */ SyscallDesc("chdir", unimplementedFunc),
- /* 13 */ SyscallDesc("time", timeFunc<ArmLinux>),
+ /* 13 */ SyscallDesc("time", timeFunc<ArmLinux32>),
/* 14 */ SyscallDesc("mknod", unimplementedFunc),
- /* 15 */ SyscallDesc("chmod", chmodFunc<ArmLinux>),
+ /* 15 */ SyscallDesc("chmod", chmodFunc<ArmLinux32>),
/* 16 */ SyscallDesc("lchown", chownFunc),
/* 17 */ SyscallDesc("unused#17", unimplementedFunc),
/* 18 */ SyscallDesc("unused#18", unimplementedFunc),
@@ -118,7 +162,7 @@ SyscallDesc ArmLinuxProcess::syscallDescs[] = {
/* 40 */ SyscallDesc("rmdir", unimplementedFunc),
/* 41 */ SyscallDesc("dup", dupFunc),
/* 42 */ SyscallDesc("pipe", pipePseudoFunc),
- /* 43 */ SyscallDesc("times", timesFunc<ArmLinux>),
+ /* 43 */ SyscallDesc("times", timesFunc<ArmLinux32>),
/* 44 */ SyscallDesc("unused#44", unimplementedFunc),
/* 45 */ SyscallDesc("brk", brkFunc),
/* 46 */ SyscallDesc("setgid", unimplementedFunc),
@@ -129,7 +173,7 @@ SyscallDesc ArmLinuxProcess::syscallDescs[] = {
/* 51 */ SyscallDesc("acct", unimplementedFunc),
/* 52 */ SyscallDesc("umount2", unimplementedFunc),
/* 53 */ SyscallDesc("unused#53", unimplementedFunc),
- /* 54 */ SyscallDesc("ioctl", ioctlFunc<ArmLinux>),
+ /* 54 */ SyscallDesc("ioctl", ioctlFunc<ArmLinux32>),
/* 55 */ SyscallDesc("fcntl", fcntlFunc),
/* 56 */ SyscallDesc("unused#56", unimplementedFunc),
/* 57 */ SyscallDesc("setpgid", unimplementedFunc),
@@ -151,9 +195,9 @@ SyscallDesc ArmLinuxProcess::syscallDescs[] = {
/* 73 */ SyscallDesc("sigpending", unimplementedFunc),
/* 74 */ SyscallDesc("sethostname", ignoreFunc),
/* 75 */ SyscallDesc("setrlimit", ignoreFunc),
- /* 76 */ SyscallDesc("getrlimit", getrlimitFunc<ArmLinux>),
- /* 77 */ SyscallDesc("getrusage", getrusageFunc<ArmLinux>),
- /* 78 */ SyscallDesc("gettimeofday", gettimeofdayFunc<ArmLinux>),
+ /* 76 */ SyscallDesc("getrlimit", getrlimitFunc<ArmLinux32>),
+ /* 77 */ SyscallDesc("getrusage", getrusageFunc<ArmLinux32>),
+ /* 78 */ SyscallDesc("gettimeofday", gettimeofdayFunc<ArmLinux32>),
/* 79 */ SyscallDesc("settimeofday", unimplementedFunc),
/* 80 */ SyscallDesc("getgroups", unimplementedFunc),
/* 81 */ SyscallDesc("setgroups", unimplementedFunc),
@@ -165,7 +209,7 @@ SyscallDesc ArmLinuxProcess::syscallDescs[] = {
/* 87 */ SyscallDesc("swapon", unimplementedFunc),
/* 88 */ SyscallDesc("reboot", unimplementedFunc),
/* 89 */ SyscallDesc("readdir", unimplementedFunc),
- /* 90 */ SyscallDesc("mmap", mmapFunc<ArmLinux>),
+ /* 90 */ SyscallDesc("mmap", mmapFunc<ArmLinux32>),
/* 91 */ SyscallDesc("munmap", munmapFunc),
/* 92 */ SyscallDesc("truncate", truncateFunc),
/* 93 */ SyscallDesc("ftruncate", ftruncateFunc),
@@ -181,9 +225,9 @@ SyscallDesc ArmLinuxProcess::syscallDescs[] = {
/* 103 */ SyscallDesc("syslog", unimplementedFunc),
/* 104 */ SyscallDesc("setitimer", unimplementedFunc),
/* 105 */ SyscallDesc("getitimer", unimplementedFunc),
- /* 106 */ SyscallDesc("stat", statFunc<ArmLinux>),
+ /* 106 */ SyscallDesc("stat", statFunc<ArmLinux32>),
/* 107 */ SyscallDesc("lstat", unimplementedFunc),
- /* 108 */ SyscallDesc("fstat", fstatFunc<ArmLinux>),
+ /* 108 */ SyscallDesc("fstat", fstatFunc<ArmLinux32>),
/* 109 */ SyscallDesc("unused#109", unimplementedFunc),
/* 110 */ SyscallDesc("unused#101", unimplementedFunc),
/* 111 */ SyscallDesc("vhangup", unimplementedFunc),
@@ -191,17 +235,17 @@ SyscallDesc ArmLinuxProcess::syscallDescs[] = {
/* 113 */ SyscallDesc("syscall", unimplementedFunc),
/* 114 */ SyscallDesc("wait4", unimplementedFunc),
/* 115 */ SyscallDesc("swapoff", unimplementedFunc),
- /* 116 */ SyscallDesc("sysinfo", sysinfoFunc<ArmLinux>),
+ /* 116 */ SyscallDesc("sysinfo", sysinfoFunc<ArmLinux32>),
/* 117 */ SyscallDesc("ipc", unimplementedFunc),
/* 118 */ SyscallDesc("fsync", unimplementedFunc),
/* 119 */ SyscallDesc("sigreturn", unimplementedFunc),
/* 120 */ SyscallDesc("clone", cloneFunc),
/* 121 */ SyscallDesc("setdomainname", unimplementedFunc),
- /* 122 */ SyscallDesc("uname", unameFunc),
+ /* 122 */ SyscallDesc("uname", unameFunc32),
/* 123 */ SyscallDesc("unused#123", unimplementedFunc),
/* 124 */ SyscallDesc("adjtimex", unimplementedFunc),
/* 125 */ SyscallDesc("mprotect", ignoreFunc),
- /* 126 */ SyscallDesc("sigprocmask", unimplementedFunc),
+ /* 126 */ SyscallDesc("sigprocmask", ignoreWarnOnceFunc),
/* 127 */ SyscallDesc("unused#127", unimplementedFunc),
/* 128 */ SyscallDesc("init_module", unimplementedFunc),
/* 129 */ SyscallDesc("delete_module", unimplementedFunc),
@@ -221,7 +265,7 @@ SyscallDesc ArmLinuxProcess::syscallDescs[] = {
/* 143 */ SyscallDesc("flock", unimplementedFunc),
/* 144 */ SyscallDesc("msync", unimplementedFunc),
/* 145 */ SyscallDesc("readv", unimplementedFunc),
- /* 146 */ SyscallDesc("writev", writevFunc<ArmLinux>),
+ /* 146 */ SyscallDesc("writev", writevFunc<ArmLinux32>),
/* 147 */ SyscallDesc("getsid", unimplementedFunc),
/* 148 */ SyscallDesc("fdatasync", unimplementedFunc),
/* 149 */ SyscallDesc("sysctl", unimplementedFunc),
@@ -238,7 +282,7 @@ SyscallDesc ArmLinuxProcess::syscallDescs[] = {
/* 160 */ SyscallDesc("sched_get_priority_min", unimplementedFunc),
/* 161 */ SyscallDesc("sched_rr_get_interval", unimplementedFunc),
/* 162 */ SyscallDesc("nanosleep", ignoreWarnOnceFunc),
- /* 163 */ SyscallDesc("mremap", mremapFunc<ArmLinux>), // ARM-specific
+ /* 163 */ SyscallDesc("mremap", mremapFunc<ArmLinux32>), // ARM-specific
/* 164 */ SyscallDesc("setresuid", unimplementedFunc),
/* 165 */ SyscallDesc("getresuid", unimplementedFunc),
/* 166 */ SyscallDesc("unused#166", unimplementedFunc),
@@ -266,13 +310,13 @@ SyscallDesc ArmLinuxProcess::syscallDescs[] = {
/* 188 */ SyscallDesc("unused#188", unimplementedFunc),
/* 189 */ SyscallDesc("unused#189", unimplementedFunc),
/* 190 */ SyscallDesc("vfork", unimplementedFunc),
- /* 191 */ SyscallDesc("getrlimit", getrlimitFunc<ArmLinux>),
- /* 192 */ SyscallDesc("mmap2", mmapFunc<ArmLinux>),
+ /* 191 */ SyscallDesc("getrlimit", getrlimitFunc<ArmLinux32>),
+ /* 192 */ SyscallDesc("mmap2", mmapFunc<ArmLinux32>),
/* 193 */ SyscallDesc("truncate64", unimplementedFunc),
/* 194 */ SyscallDesc("ftruncate64", ftruncate64Func),
- /* 195 */ SyscallDesc("stat64", stat64Func<ArmLinux>),
- /* 196 */ SyscallDesc("lstat64", lstat64Func<ArmLinux>),
- /* 197 */ SyscallDesc("fstat64", fstat64Func<ArmLinux>),
+ /* 195 */ SyscallDesc("stat64", stat64Func<ArmLinux32>),
+ /* 196 */ SyscallDesc("lstat64", lstat64Func<ArmLinux32>),
+ /* 197 */ SyscallDesc("fstat64", fstat64Func<ArmLinux32>),
/* 198 */ SyscallDesc("lchown", unimplementedFunc),
/* 199 */ SyscallDesc("getuid", getuidFunc),
/* 200 */ SyscallDesc("getgid", getgidFunc),
@@ -319,7 +363,7 @@ SyscallDesc ArmLinuxProcess::syscallDescs[] = {
/* 241 */ SyscallDesc("sched_setaffinity", unimplementedFunc),
/* 242 */ SyscallDesc("sched_getaffinity", unimplementedFunc),
/* 243 */ SyscallDesc("io_setup", unimplementedFunc),
- /* 244 */ SyscallDesc("io_destory", unimplementedFunc),
+ /* 244 */ SyscallDesc("io_destroy", unimplementedFunc),
/* 245 */ SyscallDesc("io_getevents", unimplementedFunc),
/* 246 */ SyscallDesc("io_submit", unimplementedFunc),
/* 247 */ SyscallDesc("io_cancel", unimplementedFunc),
@@ -441,68 +485,1187 @@ SyscallDesc ArmLinuxProcess::syscallDescs[] = {
/* 363 */ SyscallDesc("sys_rt_tgsigqueueinfo", unimplementedFunc),
/* 364 */ SyscallDesc("sys_perf_event_open", unimplementedFunc),
/* 365 */ SyscallDesc("sys_recvmmsg", unimplementedFunc),
-
};
-/// Target set_tls() handler.
-static SyscallReturn
-setTLSFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
- ThreadContext *tc)
-{
- int index = 0;
- uint32_t tlsPtr = process->getSyscallArg(tc, index);
-
- tc->getMemProxy().writeBlob(ArmLinuxProcess::commPage + 0x0ff0,
- (uint8_t *)&tlsPtr, sizeof(tlsPtr));
- tc->setMiscReg(MISCREG_TPIDRURO,tlsPtr);
- return 0;
-}
+static SyscallDesc syscallDescs64[] = {
+ /* 0 */ SyscallDesc("io_setup", unimplementedFunc),
+ /* 1 */ SyscallDesc("io_destroy", unimplementedFunc),
+ /* 2 */ SyscallDesc("io_submit", unimplementedFunc),
+ /* 3 */ SyscallDesc("io_cancel", unimplementedFunc),
+ /* 4 */ SyscallDesc("io_getevents", unimplementedFunc),
+ /* 5 */ SyscallDesc("setxattr", unimplementedFunc),
+ /* 6 */ SyscallDesc("lsetxattr", unimplementedFunc),
+ /* 7 */ SyscallDesc("fsetxattr", unimplementedFunc),
+ /* 8 */ SyscallDesc("getxattr", unimplementedFunc),
+ /* 9 */ SyscallDesc("lgetxattr", unimplementedFunc),
+ /* 10 */ SyscallDesc("fgetxattr", unimplementedFunc),
+ /* 11 */ SyscallDesc("listxattr", unimplementedFunc),
+ /* 12 */ SyscallDesc("llistxattr", unimplementedFunc),
+ /* 13 */ SyscallDesc("flistxattr", unimplementedFunc),
+ /* 14 */ SyscallDesc("removexattr", unimplementedFunc),
+ /* 15 */ SyscallDesc("lremovexattr", unimplementedFunc),
+ /* 16 */ SyscallDesc("fremovexattr", unimplementedFunc),
+ /* 17 */ SyscallDesc("getcwd", getcwdFunc),
+ /* 18 */ SyscallDesc("lookup_dcookie", unimplementedFunc),
+ /* 19 */ SyscallDesc("eventfd2", unimplementedFunc),
+ /* 20 */ SyscallDesc("epoll_create1", unimplementedFunc),
+ /* 21 */ SyscallDesc("epoll_ctl", unimplementedFunc),
+ /* 22 */ SyscallDesc("epoll_pwait", unimplementedFunc),
+ /* 23 */ SyscallDesc("dup", dupFunc),
+ /* 24 */ SyscallDesc("dup3", unimplementedFunc),
+ /* 25 */ SyscallDesc("fcntl64", fcntl64Func),
+ /* 26 */ SyscallDesc("inotify_init1", unimplementedFunc),
+ /* 27 */ SyscallDesc("inotify_add_watch", unimplementedFunc),
+ /* 28 */ SyscallDesc("inotify_rm_watch", unimplementedFunc),
+ /* 29 */ SyscallDesc("ioctl", ioctlFunc<ArmLinux64>),
+ /* 30 */ SyscallDesc("ioprio_set", unimplementedFunc),
+ /* 31 */ SyscallDesc("ioprio_get", unimplementedFunc),
+ /* 32 */ SyscallDesc("flock", unimplementedFunc),
+ /* 33 */ SyscallDesc("mknodat", unimplementedFunc),
+ /* 34 */ SyscallDesc("mkdirat", unimplementedFunc),
+ /* 35 */ SyscallDesc("unlinkat", unimplementedFunc),
+ /* 36 */ SyscallDesc("symlinkat", unimplementedFunc),
+ /* 37 */ SyscallDesc("linkat", unimplementedFunc),
+ /* 38 */ SyscallDesc("renameat", unimplementedFunc),
+ /* 39 */ SyscallDesc("umount2", unimplementedFunc),
+ /* 40 */ SyscallDesc("mount", unimplementedFunc),
+ /* 41 */ SyscallDesc("pivot_root", unimplementedFunc),
+ /* 42 */ SyscallDesc("nfsservctl", unimplementedFunc),
+ /* 43 */ SyscallDesc("statfs64", unimplementedFunc),
+ /* 44 */ SyscallDesc("fstatfs64", unimplementedFunc),
+ /* 45 */ SyscallDesc("truncate64", unimplementedFunc),
+ /* 46 */ SyscallDesc("ftruncate64", ftruncate64Func),
+ /* 47 */ SyscallDesc("fallocate", unimplementedFunc),
+ /* 48 */ SyscallDesc("faccessat", unimplementedFunc),
+ /* 49 */ SyscallDesc("chdir", unimplementedFunc),
+ /* 50 */ SyscallDesc("fchdir", unimplementedFunc),
+ /* 51 */ SyscallDesc("chroot", unimplementedFunc),
+ /* 52 */ SyscallDesc("fchmod", unimplementedFunc),
+ /* 53 */ SyscallDesc("fchmodat", unimplementedFunc),
+ /* 54 */ SyscallDesc("fchownat", unimplementedFunc),
+ /* 55 */ SyscallDesc("fchown", unimplementedFunc),
+ /* 56 */ SyscallDesc("openat", openatFunc<ArmLinux64>),
+ /* 57 */ SyscallDesc("close", closeFunc),
+ /* 58 */ SyscallDesc("vhangup", unimplementedFunc),
+ /* 59 */ SyscallDesc("pipe2", unimplementedFunc),
+ /* 60 */ SyscallDesc("quotactl", unimplementedFunc),
+ /* 61 */ SyscallDesc("getdents64", unimplementedFunc),
+ /* 62 */ SyscallDesc("llseek", lseekFunc),
+ /* 63 */ SyscallDesc("read", readFunc),
+ /* 64 */ SyscallDesc("write", writeFunc),
+ /* 65 */ SyscallDesc("readv", unimplementedFunc),
+ /* 66 */ SyscallDesc("writev", writevFunc<ArmLinux64>),
+ /* 67 */ SyscallDesc("pread64", unimplementedFunc),
+ /* 68 */ SyscallDesc("pwrite64", unimplementedFunc),
+ /* 69 */ SyscallDesc("preadv", unimplementedFunc),
+ /* 70 */ SyscallDesc("pwritev", unimplementedFunc),
+ /* 71 */ SyscallDesc("sendfile64", unimplementedFunc),
+ /* 72 */ SyscallDesc("pselect6", unimplementedFunc),
+ /* 73 */ SyscallDesc("ppoll", unimplementedFunc),
+ /* 74 */ SyscallDesc("signalfd4", unimplementedFunc),
+ /* 75 */ SyscallDesc("vmsplice", unimplementedFunc),
+ /* 76 */ SyscallDesc("splice", unimplementedFunc),
+ /* 77 */ SyscallDesc("tee", unimplementedFunc),
+ /* 78 */ SyscallDesc("readlinkat", unimplementedFunc),
+ /* 79 */ SyscallDesc("fstatat64", fstatat64Func<ArmLinux64>),
+ /* 80 */ SyscallDesc("fstat64", fstat64Func<ArmLinux64>),
+ /* 81 */ SyscallDesc("sync", unimplementedFunc),
+ /* 82 */ SyscallDesc("fsync", unimplementedFunc),
+ /* 83 */ SyscallDesc("fdatasync", unimplementedFunc),
+ /* 84 */ SyscallDesc("sync_file_range", unimplementedFunc),
+ /* 85 */ SyscallDesc("timerfd_create", unimplementedFunc),
+ /* 86 */ SyscallDesc("timerfd_settime", unimplementedFunc),
+ /* 87 */ SyscallDesc("timerfd_gettime", unimplementedFunc),
+ /* 88 */ SyscallDesc("utimensat", unimplementedFunc),
+ /* 89 */ SyscallDesc("acct", unimplementedFunc),
+ /* 90 */ SyscallDesc("capget", unimplementedFunc),
+ /* 91 */ SyscallDesc("capset", unimplementedFunc),
+ /* 92 */ SyscallDesc("personality", unimplementedFunc),
+ /* 93 */ SyscallDesc("exit", exitFunc),
+ /* 94 */ SyscallDesc("exit_group", exitGroupFunc),
+ /* 95 */ SyscallDesc("waitid", unimplementedFunc),
+ /* 96 */ SyscallDesc("set_tid_address", unimplementedFunc),
+ /* 97 */ SyscallDesc("unshare", unimplementedFunc),
+ /* 98 */ SyscallDesc("futex", unimplementedFunc),
+ /* 99 */ SyscallDesc("set_robust_list", unimplementedFunc),
+ /* 100 */ SyscallDesc("get_robust_list", unimplementedFunc),
+ /* 101 */ SyscallDesc("nanosleep", ignoreWarnOnceFunc),
+ /* 102 */ SyscallDesc("getitimer", unimplementedFunc),
+ /* 103 */ SyscallDesc("setitimer", unimplementedFunc),
+ /* 104 */ SyscallDesc("kexec_load", unimplementedFunc),
+ /* 105 */ SyscallDesc("init_module", unimplementedFunc),
+ /* 106 */ SyscallDesc("delete_module", unimplementedFunc),
+ /* 107 */ SyscallDesc("timer_create", unimplementedFunc),
+ /* 108 */ SyscallDesc("timer_gettime", unimplementedFunc),
+ /* 109 */ SyscallDesc("timer_getoverrun", unimplementedFunc),
+ /* 110 */ SyscallDesc("timer_settime", unimplementedFunc),
+ /* 111 */ SyscallDesc("timer_delete", unimplementedFunc),
+ /* 112 */ SyscallDesc("clock_settime", unimplementedFunc),
+ /* 113 */ SyscallDesc("clock_gettime", unimplementedFunc),
+ /* 114 */ SyscallDesc("clock_getres", unimplementedFunc),
+ /* 115 */ SyscallDesc("clock_nanosleep", unimplementedFunc),
+ /* 116 */ SyscallDesc("syslog", unimplementedFunc),
+ /* 117 */ SyscallDesc("ptrace", unimplementedFunc),
+ /* 118 */ SyscallDesc("sched_setparam", unimplementedFunc),
+ /* 119 */ SyscallDesc("sched_setscheduler", unimplementedFunc),
+ /* 120 */ SyscallDesc("sched_getscheduler", unimplementedFunc),
+ /* 121 */ SyscallDesc("sched_getparam", unimplementedFunc),
+ /* 122 */ SyscallDesc("sched_setaffinity", unimplementedFunc),
+ /* 123 */ SyscallDesc("sched_getaffinity", unimplementedFunc),
+ /* 124 */ SyscallDesc("sched_yield", unimplementedFunc),
+ /* 125 */ SyscallDesc("sched_get_priority_max", unimplementedFunc),
+ /* 126 */ SyscallDesc("sched_get_priority_min", unimplementedFunc),
+ /* 127 */ SyscallDesc("sched_rr_get_interval", unimplementedFunc),
+ /* 128 */ SyscallDesc("restart_syscall", unimplementedFunc),
+ /* 129 */ SyscallDesc("kill", ignoreFunc),
+ /* 130 */ SyscallDesc("tkill", unimplementedFunc),
+ /* 131 */ SyscallDesc("tgkill", unimplementedFunc),
+ /* 132 */ SyscallDesc("sigaltstack", unimplementedFunc),
+ /* 133 */ SyscallDesc("rt_sigsuspend", unimplementedFunc),
+ /* 134 */ SyscallDesc("rt_sigaction", ignoreFunc),
+ /* 135 */ SyscallDesc("rt_sigprocmask", ignoreWarnOnceFunc),
+ /* 136 */ SyscallDesc("rt_sigpending", unimplementedFunc),
+ /* 137 */ SyscallDesc("rt_sigtimedwait", unimplementedFunc),
+ /* 138 */ SyscallDesc("rt_sigqueueinfo", ignoreFunc),
+ /* 139 */ SyscallDesc("rt_sigreturn", unimplementedFunc),
+ /* 140 */ SyscallDesc("setpriority", unimplementedFunc),
+ /* 141 */ SyscallDesc("getpriority", unimplementedFunc),
+ /* 142 */ SyscallDesc("reboot", unimplementedFunc),
+ /* 143 */ SyscallDesc("setregid", unimplementedFunc),
+ /* 144 */ SyscallDesc("setgid", unimplementedFunc),
+ /* 145 */ SyscallDesc("setreuid", unimplementedFunc),
+ /* 146 */ SyscallDesc("setuid", unimplementedFunc),
+ /* 147 */ SyscallDesc("setresuid", unimplementedFunc),
+ /* 148 */ SyscallDesc("getresuid", unimplementedFunc),
+ /* 149 */ SyscallDesc("setresgid", unimplementedFunc),
+ /* 150 */ SyscallDesc("getresgid", unimplementedFunc),
+ /* 151 */ SyscallDesc("setfsuid", unimplementedFunc),
+ /* 152 */ SyscallDesc("setfsgid", unimplementedFunc),
+ /* 153 */ SyscallDesc("times", timesFunc<ArmLinux64>),
+ /* 154 */ SyscallDesc("setpgid", unimplementedFunc),
+ /* 155 */ SyscallDesc("getpgid", unimplementedFunc),
+ /* 156 */ SyscallDesc("getsid", unimplementedFunc),
+ /* 157 */ SyscallDesc("setsid", unimplementedFunc),
+ /* 158 */ SyscallDesc("getgroups", unimplementedFunc),
+ /* 159 */ SyscallDesc("setgroups", unimplementedFunc),
+ /* 160 */ SyscallDesc("uname", unameFunc64),
+ /* 161 */ SyscallDesc("sethostname", ignoreFunc),
+ /* 162 */ SyscallDesc("setdomainname", unimplementedFunc),
+ /* 163 */ SyscallDesc("getrlimit", getrlimitFunc<ArmLinux64>),
+ /* 164 */ SyscallDesc("setrlimit", ignoreFunc),
+ /* 165 */ SyscallDesc("getrusage", getrusageFunc<ArmLinux64>),
+ /* 166 */ SyscallDesc("umask", unimplementedFunc),
+ /* 167 */ SyscallDesc("prctl", unimplementedFunc),
+ /* 168 */ SyscallDesc("getcpu", unimplementedFunc),
+ /* 169 */ SyscallDesc("gettimeofday", gettimeofdayFunc<ArmLinux64>),
+ /* 170 */ SyscallDesc("settimeofday", unimplementedFunc),
+ /* 171 */ SyscallDesc("adjtimex", unimplementedFunc),
+ /* 172 */ SyscallDesc("getpid", getpidFunc),
+ /* 173 */ SyscallDesc("getppid", getppidFunc),
+ /* 174 */ SyscallDesc("getuid", getuidFunc),
+ /* 175 */ SyscallDesc("geteuid", geteuidFunc),
+ /* 176 */ SyscallDesc("getgid", getgidFunc),
+ /* 177 */ SyscallDesc("getegid", getegidFunc),
+ /* 178 */ SyscallDesc("gettid", unimplementedFunc),
+ /* 179 */ SyscallDesc("sysinfo", sysinfoFunc<ArmLinux64>),
+ /* 180 */ SyscallDesc("mq_open", unimplementedFunc),
+ /* 181 */ SyscallDesc("mq_unlink", unimplementedFunc),
+ /* 182 */ SyscallDesc("mq_timedsend", unimplementedFunc),
+ /* 183 */ SyscallDesc("mq_timedreceive", unimplementedFunc),
+ /* 184 */ SyscallDesc("mq_notify", unimplementedFunc),
+ /* 185 */ SyscallDesc("mq_getsetattr", unimplementedFunc),
+ /* 186 */ SyscallDesc("msgget", unimplementedFunc),
+ /* 187 */ SyscallDesc("msgctl", unimplementedFunc),
+ /* 188 */ SyscallDesc("msgrcv", unimplementedFunc),
+ /* 189 */ SyscallDesc("msgsnd", unimplementedFunc),
+ /* 190 */ SyscallDesc("semget", unimplementedFunc),
+ /* 191 */ SyscallDesc("semctl", unimplementedFunc),
+ /* 192 */ SyscallDesc("semtimedop", unimplementedFunc),
+ /* 193 */ SyscallDesc("semop", unimplementedFunc),
+ /* 194 */ SyscallDesc("shmget", unimplementedFunc),
+ /* 195 */ SyscallDesc("shmctl", unimplementedFunc),
+ /* 196 */ SyscallDesc("shmat", unimplementedFunc),
+ /* 197 */ SyscallDesc("shmdt", unimplementedFunc),
+ /* 198 */ SyscallDesc("socket", unimplementedFunc),
+ /* 199 */ SyscallDesc("socketpair", unimplementedFunc),
+ /* 200 */ SyscallDesc("bind", unimplementedFunc),
+ /* 201 */ SyscallDesc("listen", unimplementedFunc),
+ /* 202 */ SyscallDesc("accept", unimplementedFunc),
+ /* 203 */ SyscallDesc("connect", unimplementedFunc),
+ /* 204 */ SyscallDesc("getsockname", unimplementedFunc),
+ /* 205 */ SyscallDesc("getpeername", unimplementedFunc),
+ /* 206 */ SyscallDesc("sendto", unimplementedFunc),
+ /* 207 */ SyscallDesc("recvfrom", unimplementedFunc),
+ /* 208 */ SyscallDesc("setsockopt", unimplementedFunc),
+ /* 209 */ SyscallDesc("getsockopt", unimplementedFunc),
+ /* 210 */ SyscallDesc("shutdown", unimplementedFunc),
+ /* 211 */ SyscallDesc("sendmsg", unimplementedFunc),
+ /* 212 */ SyscallDesc("recvmsg", unimplementedFunc),
+ /* 213 */ SyscallDesc("readahead", unimplementedFunc),
+ /* 214 */ SyscallDesc("brk", brkFunc),
+ /* 215 */ SyscallDesc("munmap", munmapFunc),
+ /* 216 */ SyscallDesc("mremap", mremapFunc<ArmLinux64>),
+ /* 217 */ SyscallDesc("add_key", unimplementedFunc),
+ /* 218 */ SyscallDesc("request_key", unimplementedFunc),
+ /* 219 */ SyscallDesc("keyctl", unimplementedFunc),
+ /* 220 */ SyscallDesc("clone", unimplementedFunc),
+ /* 221 */ SyscallDesc("execve", unimplementedFunc),
+ /* 222 */ SyscallDesc("mmap2", mmapFunc<ArmLinux64>),
+ /* 223 */ SyscallDesc("fadvise64_64", unimplementedFunc),
+ /* 224 */ SyscallDesc("swapon", unimplementedFunc),
+ /* 225 */ SyscallDesc("swapoff", unimplementedFunc),
+ /* 226 */ SyscallDesc("mprotect", ignoreFunc),
+ /* 227 */ SyscallDesc("msync", unimplementedFunc),
+ /* 228 */ SyscallDesc("mlock", unimplementedFunc),
+ /* 229 */ SyscallDesc("munlock", unimplementedFunc),
+ /* 230 */ SyscallDesc("mlockall", unimplementedFunc),
+ /* 231 */ SyscallDesc("munlockall", unimplementedFunc),
+ /* 232 */ SyscallDesc("mincore", unimplementedFunc),
+ /* 233 */ SyscallDesc("madvise", unimplementedFunc),
+ /* 234 */ SyscallDesc("remap_file_pages", unimplementedFunc),
+ /* 235 */ SyscallDesc("mbind", unimplementedFunc),
+ /* 236 */ SyscallDesc("get_mempolicy", unimplementedFunc),
+ /* 237 */ SyscallDesc("set_mempolicy", unimplementedFunc),
+ /* 238 */ SyscallDesc("migrate_pages", unimplementedFunc),
+ /* 239 */ SyscallDesc("move_pages", unimplementedFunc),
+ /* 240 */ SyscallDesc("rt_tgsigqueueinfo", unimplementedFunc),
+ /* 241 */ SyscallDesc("perf_event_open", unimplementedFunc),
+ /* 242 */ SyscallDesc("accept4", unimplementedFunc),
+ /* 243 */ SyscallDesc("recvmmsg", unimplementedFunc),
+ /* 244 */ SyscallDesc("unused#244", unimplementedFunc),
+ /* 245 */ SyscallDesc("unused#245", unimplementedFunc),
+ /* 246 */ SyscallDesc("unused#246", unimplementedFunc),
+ /* 247 */ SyscallDesc("unused#247", unimplementedFunc),
+ /* 248 */ SyscallDesc("unused#248", unimplementedFunc),
+ /* 249 */ SyscallDesc("unused#249", unimplementedFunc),
+ /* 250 */ SyscallDesc("unused#250", unimplementedFunc),
+ /* 251 */ SyscallDesc("unused#251", unimplementedFunc),
+ /* 252 */ SyscallDesc("unused#252", unimplementedFunc),
+ /* 253 */ SyscallDesc("unused#253", unimplementedFunc),
+ /* 254 */ SyscallDesc("unused#254", unimplementedFunc),
+ /* 255 */ SyscallDesc("unused#255", unimplementedFunc),
+ /* 256 */ SyscallDesc("unused#256", unimplementedFunc),
+ /* 257 */ SyscallDesc("unused#257", unimplementedFunc),
+ /* 258 */ SyscallDesc("unused#258", unimplementedFunc),
+ /* 259 */ SyscallDesc("unused#259", unimplementedFunc),
+ /* 260 */ SyscallDesc("wait4", unimplementedFunc),
+ /* 261 */ SyscallDesc("prlimit64", unimplementedFunc),
+ /* 262 */ SyscallDesc("fanotify_init", unimplementedFunc),
+ /* 263 */ SyscallDesc("fanotify_mark", unimplementedFunc),
+ /* 264 */ SyscallDesc("name_to_handle_at", unimplementedFunc),
+ /* 265 */ SyscallDesc("open_by_handle_at", unimplementedFunc),
+ /* 266 */ SyscallDesc("clock_adjtime", unimplementedFunc),
+ /* 267 */ SyscallDesc("syncfs", unimplementedFunc),
+ /* 268 */ SyscallDesc("setns", unimplementedFunc),
+ /* 269 */ SyscallDesc("sendmmsg", unimplementedFunc),
+ /* 270 */ SyscallDesc("process_vm_readv", unimplementedFunc),
+ /* 271 */ SyscallDesc("process_vm_writev", unimplementedFunc),
+ /* 272 */ SyscallDesc("unused#272", unimplementedFunc),
+ /* 273 */ SyscallDesc("unused#273", unimplementedFunc),
+ /* 274 */ SyscallDesc("unused#274", unimplementedFunc),
+ /* 275 */ SyscallDesc("unused#275", unimplementedFunc),
+ /* 276 */ SyscallDesc("unused#276", unimplementedFunc),
+ /* 277 */ SyscallDesc("unused#277", unimplementedFunc),
+ /* 278 */ SyscallDesc("unused#278", unimplementedFunc),
+ /* 279 */ SyscallDesc("unused#279", unimplementedFunc),
+ /* 280 */ SyscallDesc("unused#280", unimplementedFunc),
+ /* 281 */ SyscallDesc("unused#281", unimplementedFunc),
+ /* 282 */ SyscallDesc("unused#282", unimplementedFunc),
+ /* 283 */ SyscallDesc("unused#283", unimplementedFunc),
+ /* 284 */ SyscallDesc("unused#284", unimplementedFunc),
+ /* 285 */ SyscallDesc("unused#285", unimplementedFunc),
+ /* 286 */ SyscallDesc("unused#286", unimplementedFunc),
+ /* 287 */ SyscallDesc("unused#287", unimplementedFunc),
+ /* 288 */ SyscallDesc("unused#288", unimplementedFunc),
+ /* 289 */ SyscallDesc("unused#289", unimplementedFunc),
+ /* 290 */ SyscallDesc("unused#290", unimplementedFunc),
+ /* 291 */ SyscallDesc("unused#291", unimplementedFunc),
+ /* 292 */ SyscallDesc("unused#292", unimplementedFunc),
+ /* 293 */ SyscallDesc("unused#293", unimplementedFunc),
+ /* 294 */ SyscallDesc("unused#294", unimplementedFunc),
+ /* 295 */ SyscallDesc("unused#295", unimplementedFunc),
+ /* 296 */ SyscallDesc("unused#296", unimplementedFunc),
+ /* 297 */ SyscallDesc("unused#297", unimplementedFunc),
+ /* 298 */ SyscallDesc("unused#298", unimplementedFunc),
+ /* 299 */ SyscallDesc("unused#299", unimplementedFunc),
+ /* 300 */ SyscallDesc("unused#300", unimplementedFunc),
+ /* 301 */ SyscallDesc("unused#301", unimplementedFunc),
+ /* 302 */ SyscallDesc("unused#302", unimplementedFunc),
+ /* 303 */ SyscallDesc("unused#303", unimplementedFunc),
+ /* 304 */ SyscallDesc("unused#304", unimplementedFunc),
+ /* 305 */ SyscallDesc("unused#305", unimplementedFunc),
+ /* 306 */ SyscallDesc("unused#306", unimplementedFunc),
+ /* 307 */ SyscallDesc("unused#307", unimplementedFunc),
+ /* 308 */ SyscallDesc("unused#308", unimplementedFunc),
+ /* 309 */ SyscallDesc("unused#309", unimplementedFunc),
+ /* 310 */ SyscallDesc("unused#310", unimplementedFunc),
+ /* 311 */ SyscallDesc("unused#311", unimplementedFunc),
+ /* 312 */ SyscallDesc("unused#312", unimplementedFunc),
+ /* 313 */ SyscallDesc("unused#313", unimplementedFunc),
+ /* 314 */ SyscallDesc("unused#314", unimplementedFunc),
+ /* 315 */ SyscallDesc("unused#315", unimplementedFunc),
+ /* 316 */ SyscallDesc("unused#316", unimplementedFunc),
+ /* 317 */ SyscallDesc("unused#317", unimplementedFunc),
+ /* 318 */ SyscallDesc("unused#318", unimplementedFunc),
+ /* 319 */ SyscallDesc("unused#319", unimplementedFunc),
+ /* 320 */ SyscallDesc("unused#320", unimplementedFunc),
+ /* 321 */ SyscallDesc("unused#321", unimplementedFunc),
+ /* 322 */ SyscallDesc("unused#322", unimplementedFunc),
+ /* 323 */ SyscallDesc("unused#323", unimplementedFunc),
+ /* 324 */ SyscallDesc("unused#324", unimplementedFunc),
+ /* 325 */ SyscallDesc("unused#325", unimplementedFunc),
+ /* 326 */ SyscallDesc("unused#326", unimplementedFunc),
+ /* 327 */ SyscallDesc("unused#327", unimplementedFunc),
+ /* 328 */ SyscallDesc("unused#328", unimplementedFunc),
+ /* 329 */ SyscallDesc("unused#329", unimplementedFunc),
+ /* 330 */ SyscallDesc("unused#330", unimplementedFunc),
+ /* 331 */ SyscallDesc("unused#331", unimplementedFunc),
+ /* 332 */ SyscallDesc("unused#332", unimplementedFunc),
+ /* 333 */ SyscallDesc("unused#333", unimplementedFunc),
+ /* 334 */ SyscallDesc("unused#334", unimplementedFunc),
+ /* 335 */ SyscallDesc("unused#335", unimplementedFunc),
+ /* 336 */ SyscallDesc("unused#336", unimplementedFunc),
+ /* 337 */ SyscallDesc("unused#337", unimplementedFunc),
+ /* 338 */ SyscallDesc("unused#338", unimplementedFunc),
+ /* 339 */ SyscallDesc("unused#339", unimplementedFunc),
+ /* 340 */ SyscallDesc("unused#340", unimplementedFunc),
+ /* 341 */ SyscallDesc("unused#341", unimplementedFunc),
+ /* 342 */ SyscallDesc("unused#342", unimplementedFunc),
+ /* 343 */ SyscallDesc("unused#343", unimplementedFunc),
+ /* 344 */ SyscallDesc("unused#344", unimplementedFunc),
+ /* 345 */ SyscallDesc("unused#345", unimplementedFunc),
+ /* 346 */ SyscallDesc("unused#346", unimplementedFunc),
+ /* 347 */ SyscallDesc("unused#347", unimplementedFunc),
+ /* 348 */ SyscallDesc("unused#348", unimplementedFunc),
+ /* 349 */ SyscallDesc("unused#349", unimplementedFunc),
+ /* 350 */ SyscallDesc("unused#350", unimplementedFunc),
+ /* 351 */ SyscallDesc("unused#351", unimplementedFunc),
+ /* 352 */ SyscallDesc("unused#352", unimplementedFunc),
+ /* 353 */ SyscallDesc("unused#353", unimplementedFunc),
+ /* 354 */ SyscallDesc("unused#354", unimplementedFunc),
+ /* 355 */ SyscallDesc("unused#355", unimplementedFunc),
+ /* 356 */ SyscallDesc("unused#356", unimplementedFunc),
+ /* 357 */ SyscallDesc("unused#357", unimplementedFunc),
+ /* 358 */ SyscallDesc("unused#358", unimplementedFunc),
+ /* 359 */ SyscallDesc("unused#359", unimplementedFunc),
+ /* 360 */ SyscallDesc("unused#360", unimplementedFunc),
+ /* 361 */ SyscallDesc("unused#361", unimplementedFunc),
+ /* 362 */ SyscallDesc("unused#362", unimplementedFunc),
+ /* 363 */ SyscallDesc("unused#363", unimplementedFunc),
+ /* 364 */ SyscallDesc("unused#364", unimplementedFunc),
+ /* 365 */ SyscallDesc("unused#365", unimplementedFunc),
+ /* 366 */ SyscallDesc("unused#366", unimplementedFunc),
+ /* 367 */ SyscallDesc("unused#367", unimplementedFunc),
+ /* 368 */ SyscallDesc("unused#368", unimplementedFunc),
+ /* 369 */ SyscallDesc("unused#369", unimplementedFunc),
+ /* 370 */ SyscallDesc("unused#370", unimplementedFunc),
+ /* 371 */ SyscallDesc("unused#371", unimplementedFunc),
+ /* 372 */ SyscallDesc("unused#372", unimplementedFunc),
+ /* 373 */ SyscallDesc("unused#373", unimplementedFunc),
+ /* 374 */ SyscallDesc("unused#374", unimplementedFunc),
+ /* 375 */ SyscallDesc("unused#375", unimplementedFunc),
+ /* 376 */ SyscallDesc("unused#376", unimplementedFunc),
+ /* 377 */ SyscallDesc("unused#377", unimplementedFunc),
+ /* 378 */ SyscallDesc("unused#378", unimplementedFunc),
+ /* 379 */ SyscallDesc("unused#379", unimplementedFunc),
+ /* 380 */ SyscallDesc("unused#380", unimplementedFunc),
+ /* 381 */ SyscallDesc("unused#381", unimplementedFunc),
+ /* 382 */ SyscallDesc("unused#382", unimplementedFunc),
+ /* 383 */ SyscallDesc("unused#383", unimplementedFunc),
+ /* 384 */ SyscallDesc("unused#384", unimplementedFunc),
+ /* 385 */ SyscallDesc("unused#385", unimplementedFunc),
+ /* 386 */ SyscallDesc("unused#386", unimplementedFunc),
+ /* 387 */ SyscallDesc("unused#387", unimplementedFunc),
+ /* 388 */ SyscallDesc("unused#388", unimplementedFunc),
+ /* 389 */ SyscallDesc("unused#389", unimplementedFunc),
+ /* 390 */ SyscallDesc("unused#390", unimplementedFunc),
+ /* 391 */ SyscallDesc("unused#391", unimplementedFunc),
+ /* 392 */ SyscallDesc("unused#392", unimplementedFunc),
+ /* 393 */ SyscallDesc("unused#393", unimplementedFunc),
+ /* 394 */ SyscallDesc("unused#394", unimplementedFunc),
+ /* 395 */ SyscallDesc("unused#395", unimplementedFunc),
+ /* 396 */ SyscallDesc("unused#396", unimplementedFunc),
+ /* 397 */ SyscallDesc("unused#397", unimplementedFunc),
+ /* 398 */ SyscallDesc("unused#398", unimplementedFunc),
+ /* 399 */ SyscallDesc("unused#399", unimplementedFunc),
+ /* 400 */ SyscallDesc("unused#400", unimplementedFunc),
+ /* 401 */ SyscallDesc("unused#401", unimplementedFunc),
+ /* 402 */ SyscallDesc("unused#402", unimplementedFunc),
+ /* 403 */ SyscallDesc("unused#403", unimplementedFunc),
+ /* 404 */ SyscallDesc("unused#404", unimplementedFunc),
+ /* 405 */ SyscallDesc("unused#405", unimplementedFunc),
+ /* 406 */ SyscallDesc("unused#406", unimplementedFunc),
+ /* 407 */ SyscallDesc("unused#407", unimplementedFunc),
+ /* 408 */ SyscallDesc("unused#408", unimplementedFunc),
+ /* 409 */ SyscallDesc("unused#409", unimplementedFunc),
+ /* 410 */ SyscallDesc("unused#410", unimplementedFunc),
+ /* 411 */ SyscallDesc("unused#411", unimplementedFunc),
+ /* 412 */ SyscallDesc("unused#412", unimplementedFunc),
+ /* 413 */ SyscallDesc("unused#413", unimplementedFunc),
+ /* 414 */ SyscallDesc("unused#414", unimplementedFunc),
+ /* 415 */ SyscallDesc("unused#415", unimplementedFunc),
+ /* 416 */ SyscallDesc("unused#416", unimplementedFunc),
+ /* 417 */ SyscallDesc("unused#417", unimplementedFunc),
+ /* 418 */ SyscallDesc("unused#418", unimplementedFunc),
+ /* 419 */ SyscallDesc("unused#419", unimplementedFunc),
+ /* 420 */ SyscallDesc("unused#420", unimplementedFunc),
+ /* 421 */ SyscallDesc("unused#421", unimplementedFunc),
+ /* 422 */ SyscallDesc("unused#422", unimplementedFunc),
+ /* 423 */ SyscallDesc("unused#423", unimplementedFunc),
+ /* 424 */ SyscallDesc("unused#424", unimplementedFunc),
+ /* 425 */ SyscallDesc("unused#425", unimplementedFunc),
+ /* 426 */ SyscallDesc("unused#426", unimplementedFunc),
+ /* 427 */ SyscallDesc("unused#427", unimplementedFunc),
+ /* 428 */ SyscallDesc("unused#428", unimplementedFunc),
+ /* 429 */ SyscallDesc("unused#429", unimplementedFunc),
+ /* 430 */ SyscallDesc("unused#430", unimplementedFunc),
+ /* 431 */ SyscallDesc("unused#431", unimplementedFunc),
+ /* 432 */ SyscallDesc("unused#432", unimplementedFunc),
+ /* 433 */ SyscallDesc("unused#433", unimplementedFunc),
+ /* 434 */ SyscallDesc("unused#434", unimplementedFunc),
+ /* 435 */ SyscallDesc("unused#435", unimplementedFunc),
+ /* 436 */ SyscallDesc("unused#436", unimplementedFunc),
+ /* 437 */ SyscallDesc("unused#437", unimplementedFunc),
+ /* 438 */ SyscallDesc("unused#438", unimplementedFunc),
+ /* 439 */ SyscallDesc("unused#439", unimplementedFunc),
+ /* 440 */ SyscallDesc("unused#440", unimplementedFunc),
+ /* 441 */ SyscallDesc("unused#441", unimplementedFunc),
+ /* 442 */ SyscallDesc("unused#442", unimplementedFunc),
+ /* 443 */ SyscallDesc("unused#443", unimplementedFunc),
+ /* 444 */ SyscallDesc("unused#444", unimplementedFunc),
+ /* 445 */ SyscallDesc("unused#445", unimplementedFunc),
+ /* 446 */ SyscallDesc("unused#446", unimplementedFunc),
+ /* 447 */ SyscallDesc("unused#447", unimplementedFunc),
+ /* 448 */ SyscallDesc("unused#448", unimplementedFunc),
+ /* 449 */ SyscallDesc("unused#449", unimplementedFunc),
+ /* 450 */ SyscallDesc("unused#450", unimplementedFunc),
+ /* 451 */ SyscallDesc("unused#451", unimplementedFunc),
+ /* 452 */ SyscallDesc("unused#452", unimplementedFunc),
+ /* 453 */ SyscallDesc("unused#453", unimplementedFunc),
+ /* 454 */ SyscallDesc("unused#454", unimplementedFunc),
+ /* 455 */ SyscallDesc("unused#455", unimplementedFunc),
+ /* 456 */ SyscallDesc("unused#456", unimplementedFunc),
+ /* 457 */ SyscallDesc("unused#457", unimplementedFunc),
+ /* 458 */ SyscallDesc("unused#458", unimplementedFunc),
+ /* 459 */ SyscallDesc("unused#459", unimplementedFunc),
+ /* 460 */ SyscallDesc("unused#460", unimplementedFunc),
+ /* 461 */ SyscallDesc("unused#461", unimplementedFunc),
+ /* 462 */ SyscallDesc("unused#462", unimplementedFunc),
+ /* 463 */ SyscallDesc("unused#463", unimplementedFunc),
+ /* 464 */ SyscallDesc("unused#464", unimplementedFunc),
+ /* 465 */ SyscallDesc("unused#465", unimplementedFunc),
+ /* 466 */ SyscallDesc("unused#466", unimplementedFunc),
+ /* 467 */ SyscallDesc("unused#467", unimplementedFunc),
+ /* 468 */ SyscallDesc("unused#468", unimplementedFunc),
+ /* 469 */ SyscallDesc("unused#469", unimplementedFunc),
+ /* 470 */ SyscallDesc("unused#470", unimplementedFunc),
+ /* 471 */ SyscallDesc("unused#471", unimplementedFunc),
+ /* 472 */ SyscallDesc("unused#472", unimplementedFunc),
+ /* 473 */ SyscallDesc("unused#473", unimplementedFunc),
+ /* 474 */ SyscallDesc("unused#474", unimplementedFunc),
+ /* 475 */ SyscallDesc("unused#475", unimplementedFunc),
+ /* 476 */ SyscallDesc("unused#476", unimplementedFunc),
+ /* 477 */ SyscallDesc("unused#477", unimplementedFunc),
+ /* 478 */ SyscallDesc("unused#478", unimplementedFunc),
+ /* 479 */ SyscallDesc("unused#479", unimplementedFunc),
+ /* 480 */ SyscallDesc("unused#480", unimplementedFunc),
+ /* 481 */ SyscallDesc("unused#481", unimplementedFunc),
+ /* 482 */ SyscallDesc("unused#482", unimplementedFunc),
+ /* 483 */ SyscallDesc("unused#483", unimplementedFunc),
+ /* 484 */ SyscallDesc("unused#484", unimplementedFunc),
+ /* 485 */ SyscallDesc("unused#485", unimplementedFunc),
+ /* 486 */ SyscallDesc("unused#486", unimplementedFunc),
+ /* 487 */ SyscallDesc("unused#487", unimplementedFunc),
+ /* 488 */ SyscallDesc("unused#488", unimplementedFunc),
+ /* 489 */ SyscallDesc("unused#489", unimplementedFunc),
+ /* 490 */ SyscallDesc("unused#490", unimplementedFunc),
+ /* 491 */ SyscallDesc("unused#491", unimplementedFunc),
+ /* 492 */ SyscallDesc("unused#492", unimplementedFunc),
+ /* 493 */ SyscallDesc("unused#493", unimplementedFunc),
+ /* 494 */ SyscallDesc("unused#494", unimplementedFunc),
+ /* 495 */ SyscallDesc("unused#495", unimplementedFunc),
+ /* 496 */ SyscallDesc("unused#496", unimplementedFunc),
+ /* 497 */ SyscallDesc("unused#497", unimplementedFunc),
+ /* 498 */ SyscallDesc("unused#498", unimplementedFunc),
+ /* 499 */ SyscallDesc("unused#499", unimplementedFunc),
+ /* 500 */ SyscallDesc("unused#500", unimplementedFunc),
+ /* 501 */ SyscallDesc("unused#501", unimplementedFunc),
+ /* 502 */ SyscallDesc("unused#502", unimplementedFunc),
+ /* 503 */ SyscallDesc("unused#503", unimplementedFunc),
+ /* 504 */ SyscallDesc("unused#504", unimplementedFunc),
+ /* 505 */ SyscallDesc("unused#505", unimplementedFunc),
+ /* 506 */ SyscallDesc("unused#506", unimplementedFunc),
+ /* 507 */ SyscallDesc("unused#507", unimplementedFunc),
+ /* 508 */ SyscallDesc("unused#508", unimplementedFunc),
+ /* 509 */ SyscallDesc("unused#509", unimplementedFunc),
+ /* 510 */ SyscallDesc("unused#510", unimplementedFunc),
+ /* 511 */ SyscallDesc("unused#511", unimplementedFunc),
+ /* 512 */ SyscallDesc("unused#512", unimplementedFunc),
+ /* 513 */ SyscallDesc("unused#513", unimplementedFunc),
+ /* 514 */ SyscallDesc("unused#514", unimplementedFunc),
+ /* 515 */ SyscallDesc("unused#515", unimplementedFunc),
+ /* 516 */ SyscallDesc("unused#516", unimplementedFunc),
+ /* 517 */ SyscallDesc("unused#517", unimplementedFunc),
+ /* 518 */ SyscallDesc("unused#518", unimplementedFunc),
+ /* 519 */ SyscallDesc("unused#519", unimplementedFunc),
+ /* 520 */ SyscallDesc("unused#520", unimplementedFunc),
+ /* 521 */ SyscallDesc("unused#521", unimplementedFunc),
+ /* 522 */ SyscallDesc("unused#522", unimplementedFunc),
+ /* 523 */ SyscallDesc("unused#523", unimplementedFunc),
+ /* 524 */ SyscallDesc("unused#524", unimplementedFunc),
+ /* 525 */ SyscallDesc("unused#525", unimplementedFunc),
+ /* 526 */ SyscallDesc("unused#526", unimplementedFunc),
+ /* 527 */ SyscallDesc("unused#527", unimplementedFunc),
+ /* 528 */ SyscallDesc("unused#528", unimplementedFunc),
+ /* 529 */ SyscallDesc("unused#529", unimplementedFunc),
+ /* 530 */ SyscallDesc("unused#530", unimplementedFunc),
+ /* 531 */ SyscallDesc("unused#531", unimplementedFunc),
+ /* 532 */ SyscallDesc("unused#532", unimplementedFunc),
+ /* 533 */ SyscallDesc("unused#533", unimplementedFunc),
+ /* 534 */ SyscallDesc("unused#534", unimplementedFunc),
+ /* 535 */ SyscallDesc("unused#535", unimplementedFunc),
+ /* 536 */ SyscallDesc("unused#536", unimplementedFunc),
+ /* 537 */ SyscallDesc("unused#537", unimplementedFunc),
+ /* 538 */ SyscallDesc("unused#538", unimplementedFunc),
+ /* 539 */ SyscallDesc("unused#539", unimplementedFunc),
+ /* 540 */ SyscallDesc("unused#540", unimplementedFunc),
+ /* 541 */ SyscallDesc("unused#541", unimplementedFunc),
+ /* 542 */ SyscallDesc("unused#542", unimplementedFunc),
+ /* 543 */ SyscallDesc("unused#543", unimplementedFunc),
+ /* 544 */ SyscallDesc("unused#544", unimplementedFunc),
+ /* 545 */ SyscallDesc("unused#545", unimplementedFunc),
+ /* 546 */ SyscallDesc("unused#546", unimplementedFunc),
+ /* 547 */ SyscallDesc("unused#547", unimplementedFunc),
+ /* 548 */ SyscallDesc("unused#548", unimplementedFunc),
+ /* 549 */ SyscallDesc("unused#549", unimplementedFunc),
+ /* 550 */ SyscallDesc("unused#550", unimplementedFunc),
+ /* 551 */ SyscallDesc("unused#551", unimplementedFunc),
+ /* 552 */ SyscallDesc("unused#552", unimplementedFunc),
+ /* 553 */ SyscallDesc("unused#553", unimplementedFunc),
+ /* 554 */ SyscallDesc("unused#554", unimplementedFunc),
+ /* 555 */ SyscallDesc("unused#555", unimplementedFunc),
+ /* 556 */ SyscallDesc("unused#556", unimplementedFunc),
+ /* 557 */ SyscallDesc("unused#557", unimplementedFunc),
+ /* 558 */ SyscallDesc("unused#558", unimplementedFunc),
+ /* 559 */ SyscallDesc("unused#559", unimplementedFunc),
+ /* 560 */ SyscallDesc("unused#560", unimplementedFunc),
+ /* 561 */ SyscallDesc("unused#561", unimplementedFunc),
+ /* 562 */ SyscallDesc("unused#562", unimplementedFunc),
+ /* 563 */ SyscallDesc("unused#563", unimplementedFunc),
+ /* 564 */ SyscallDesc("unused#564", unimplementedFunc),
+ /* 565 */ SyscallDesc("unused#565", unimplementedFunc),
+ /* 566 */ SyscallDesc("unused#566", unimplementedFunc),
+ /* 567 */ SyscallDesc("unused#567", unimplementedFunc),
+ /* 568 */ SyscallDesc("unused#568", unimplementedFunc),
+ /* 569 */ SyscallDesc("unused#569", unimplementedFunc),
+ /* 570 */ SyscallDesc("unused#570", unimplementedFunc),
+ /* 571 */ SyscallDesc("unused#571", unimplementedFunc),
+ /* 572 */ SyscallDesc("unused#572", unimplementedFunc),
+ /* 573 */ SyscallDesc("unused#573", unimplementedFunc),
+ /* 574 */ SyscallDesc("unused#574", unimplementedFunc),
+ /* 575 */ SyscallDesc("unused#575", unimplementedFunc),
+ /* 576 */ SyscallDesc("unused#576", unimplementedFunc),
+ /* 577 */ SyscallDesc("unused#577", unimplementedFunc),
+ /* 578 */ SyscallDesc("unused#578", unimplementedFunc),
+ /* 579 */ SyscallDesc("unused#579", unimplementedFunc),
+ /* 580 */ SyscallDesc("unused#580", unimplementedFunc),
+ /* 581 */ SyscallDesc("unused#581", unimplementedFunc),
+ /* 582 */ SyscallDesc("unused#582", unimplementedFunc),
+ /* 583 */ SyscallDesc("unused#583", unimplementedFunc),
+ /* 584 */ SyscallDesc("unused#584", unimplementedFunc),
+ /* 585 */ SyscallDesc("unused#585", unimplementedFunc),
+ /* 586 */ SyscallDesc("unused#586", unimplementedFunc),
+ /* 587 */ SyscallDesc("unused#587", unimplementedFunc),
+ /* 588 */ SyscallDesc("unused#588", unimplementedFunc),
+ /* 589 */ SyscallDesc("unused#589", unimplementedFunc),
+ /* 590 */ SyscallDesc("unused#590", unimplementedFunc),
+ /* 591 */ SyscallDesc("unused#591", unimplementedFunc),
+ /* 592 */ SyscallDesc("unused#592", unimplementedFunc),
+ /* 593 */ SyscallDesc("unused#593", unimplementedFunc),
+ /* 594 */ SyscallDesc("unused#594", unimplementedFunc),
+ /* 595 */ SyscallDesc("unused#595", unimplementedFunc),
+ /* 596 */ SyscallDesc("unused#596", unimplementedFunc),
+ /* 597 */ SyscallDesc("unused#597", unimplementedFunc),
+ /* 598 */ SyscallDesc("unused#598", unimplementedFunc),
+ /* 599 */ SyscallDesc("unused#599", unimplementedFunc),
+ /* 600 */ SyscallDesc("unused#600", unimplementedFunc),
+ /* 601 */ SyscallDesc("unused#601", unimplementedFunc),
+ /* 602 */ SyscallDesc("unused#602", unimplementedFunc),
+ /* 603 */ SyscallDesc("unused#603", unimplementedFunc),
+ /* 604 */ SyscallDesc("unused#604", unimplementedFunc),
+ /* 605 */ SyscallDesc("unused#605", unimplementedFunc),
+ /* 606 */ SyscallDesc("unused#606", unimplementedFunc),
+ /* 607 */ SyscallDesc("unused#607", unimplementedFunc),
+ /* 608 */ SyscallDesc("unused#608", unimplementedFunc),
+ /* 609 */ SyscallDesc("unused#609", unimplementedFunc),
+ /* 610 */ SyscallDesc("unused#610", unimplementedFunc),
+ /* 611 */ SyscallDesc("unused#611", unimplementedFunc),
+ /* 612 */ SyscallDesc("unused#612", unimplementedFunc),
+ /* 613 */ SyscallDesc("unused#613", unimplementedFunc),
+ /* 614 */ SyscallDesc("unused#614", unimplementedFunc),
+ /* 615 */ SyscallDesc("unused#615", unimplementedFunc),
+ /* 616 */ SyscallDesc("unused#616", unimplementedFunc),
+ /* 617 */ SyscallDesc("unused#617", unimplementedFunc),
+ /* 618 */ SyscallDesc("unused#618", unimplementedFunc),
+ /* 619 */ SyscallDesc("unused#619", unimplementedFunc),
+ /* 620 */ SyscallDesc("unused#620", unimplementedFunc),
+ /* 621 */ SyscallDesc("unused#621", unimplementedFunc),
+ /* 622 */ SyscallDesc("unused#622", unimplementedFunc),
+ /* 623 */ SyscallDesc("unused#623", unimplementedFunc),
+ /* 624 */ SyscallDesc("unused#624", unimplementedFunc),
+ /* 625 */ SyscallDesc("unused#625", unimplementedFunc),
+ /* 626 */ SyscallDesc("unused#626", unimplementedFunc),
+ /* 627 */ SyscallDesc("unused#627", unimplementedFunc),
+ /* 628 */ SyscallDesc("unused#628", unimplementedFunc),
+ /* 629 */ SyscallDesc("unused#629", unimplementedFunc),
+ /* 630 */ SyscallDesc("unused#630", unimplementedFunc),
+ /* 631 */ SyscallDesc("unused#631", unimplementedFunc),
+ /* 632 */ SyscallDesc("unused#632", unimplementedFunc),
+ /* 633 */ SyscallDesc("unused#633", unimplementedFunc),
+ /* 634 */ SyscallDesc("unused#634", unimplementedFunc),
+ /* 635 */ SyscallDesc("unused#635", unimplementedFunc),
+ /* 636 */ SyscallDesc("unused#636", unimplementedFunc),
+ /* 637 */ SyscallDesc("unused#637", unimplementedFunc),
+ /* 638 */ SyscallDesc("unused#638", unimplementedFunc),
+ /* 639 */ SyscallDesc("unused#639", unimplementedFunc),
+ /* 640 */ SyscallDesc("unused#640", unimplementedFunc),
+ /* 641 */ SyscallDesc("unused#641", unimplementedFunc),
+ /* 642 */ SyscallDesc("unused#642", unimplementedFunc),
+ /* 643 */ SyscallDesc("unused#643", unimplementedFunc),
+ /* 644 */ SyscallDesc("unused#644", unimplementedFunc),
+ /* 645 */ SyscallDesc("unused#645", unimplementedFunc),
+ /* 646 */ SyscallDesc("unused#646", unimplementedFunc),
+ /* 647 */ SyscallDesc("unused#647", unimplementedFunc),
+ /* 648 */ SyscallDesc("unused#648", unimplementedFunc),
+ /* 649 */ SyscallDesc("unused#649", unimplementedFunc),
+ /* 650 */ SyscallDesc("unused#650", unimplementedFunc),
+ /* 651 */ SyscallDesc("unused#651", unimplementedFunc),
+ /* 652 */ SyscallDesc("unused#652", unimplementedFunc),
+ /* 653 */ SyscallDesc("unused#653", unimplementedFunc),
+ /* 654 */ SyscallDesc("unused#654", unimplementedFunc),
+ /* 655 */ SyscallDesc("unused#655", unimplementedFunc),
+ /* 656 */ SyscallDesc("unused#656", unimplementedFunc),
+ /* 657 */ SyscallDesc("unused#657", unimplementedFunc),
+ /* 658 */ SyscallDesc("unused#658", unimplementedFunc),
+ /* 659 */ SyscallDesc("unused#659", unimplementedFunc),
+ /* 660 */ SyscallDesc("unused#660", unimplementedFunc),
+ /* 661 */ SyscallDesc("unused#661", unimplementedFunc),
+ /* 662 */ SyscallDesc("unused#662", unimplementedFunc),
+ /* 663 */ SyscallDesc("unused#663", unimplementedFunc),
+ /* 664 */ SyscallDesc("unused#664", unimplementedFunc),
+ /* 665 */ SyscallDesc("unused#665", unimplementedFunc),
+ /* 666 */ SyscallDesc("unused#666", unimplementedFunc),
+ /* 667 */ SyscallDesc("unused#667", unimplementedFunc),
+ /* 668 */ SyscallDesc("unused#668", unimplementedFunc),
+ /* 669 */ SyscallDesc("unused#669", unimplementedFunc),
+ /* 670 */ SyscallDesc("unused#670", unimplementedFunc),
+ /* 671 */ SyscallDesc("unused#671", unimplementedFunc),
+ /* 672 */ SyscallDesc("unused#672", unimplementedFunc),
+ /* 673 */ SyscallDesc("unused#673", unimplementedFunc),
+ /* 674 */ SyscallDesc("unused#674", unimplementedFunc),
+ /* 675 */ SyscallDesc("unused#675", unimplementedFunc),
+ /* 676 */ SyscallDesc("unused#676", unimplementedFunc),
+ /* 677 */ SyscallDesc("unused#677", unimplementedFunc),
+ /* 678 */ SyscallDesc("unused#678", unimplementedFunc),
+ /* 679 */ SyscallDesc("unused#679", unimplementedFunc),
+ /* 680 */ SyscallDesc("unused#680", unimplementedFunc),
+ /* 681 */ SyscallDesc("unused#681", unimplementedFunc),
+ /* 682 */ SyscallDesc("unused#682", unimplementedFunc),
+ /* 683 */ SyscallDesc("unused#683", unimplementedFunc),
+ /* 684 */ SyscallDesc("unused#684", unimplementedFunc),
+ /* 685 */ SyscallDesc("unused#685", unimplementedFunc),
+ /* 686 */ SyscallDesc("unused#686", unimplementedFunc),
+ /* 687 */ SyscallDesc("unused#687", unimplementedFunc),
+ /* 688 */ SyscallDesc("unused#688", unimplementedFunc),
+ /* 689 */ SyscallDesc("unused#689", unimplementedFunc),
+ /* 690 */ SyscallDesc("unused#690", unimplementedFunc),
+ /* 691 */ SyscallDesc("unused#691", unimplementedFunc),
+ /* 692 */ SyscallDesc("unused#692", unimplementedFunc),
+ /* 693 */ SyscallDesc("unused#693", unimplementedFunc),
+ /* 694 */ SyscallDesc("unused#694", unimplementedFunc),
+ /* 695 */ SyscallDesc("unused#695", unimplementedFunc),
+ /* 696 */ SyscallDesc("unused#696", unimplementedFunc),
+ /* 697 */ SyscallDesc("unused#697", unimplementedFunc),
+ /* 698 */ SyscallDesc("unused#698", unimplementedFunc),
+ /* 699 */ SyscallDesc("unused#699", unimplementedFunc),
+ /* 700 */ SyscallDesc("unused#700", unimplementedFunc),
+ /* 701 */ SyscallDesc("unused#701", unimplementedFunc),
+ /* 702 */ SyscallDesc("unused#702", unimplementedFunc),
+ /* 703 */ SyscallDesc("unused#703", unimplementedFunc),
+ /* 704 */ SyscallDesc("unused#704", unimplementedFunc),
+ /* 705 */ SyscallDesc("unused#705", unimplementedFunc),
+ /* 706 */ SyscallDesc("unused#706", unimplementedFunc),
+ /* 707 */ SyscallDesc("unused#707", unimplementedFunc),
+ /* 708 */ SyscallDesc("unused#708", unimplementedFunc),
+ /* 709 */ SyscallDesc("unused#709", unimplementedFunc),
+ /* 710 */ SyscallDesc("unused#710", unimplementedFunc),
+ /* 711 */ SyscallDesc("unused#711", unimplementedFunc),
+ /* 712 */ SyscallDesc("unused#712", unimplementedFunc),
+ /* 713 */ SyscallDesc("unused#713", unimplementedFunc),
+ /* 714 */ SyscallDesc("unused#714", unimplementedFunc),
+ /* 715 */ SyscallDesc("unused#715", unimplementedFunc),
+ /* 716 */ SyscallDesc("unused#716", unimplementedFunc),
+ /* 717 */ SyscallDesc("unused#717", unimplementedFunc),
+ /* 718 */ SyscallDesc("unused#718", unimplementedFunc),
+ /* 719 */ SyscallDesc("unused#719", unimplementedFunc),
+ /* 720 */ SyscallDesc("unused#720", unimplementedFunc),
+ /* 721 */ SyscallDesc("unused#721", unimplementedFunc),
+ /* 722 */ SyscallDesc("unused#722", unimplementedFunc),
+ /* 723 */ SyscallDesc("unused#723", unimplementedFunc),
+ /* 724 */ SyscallDesc("unused#724", unimplementedFunc),
+ /* 725 */ SyscallDesc("unused#725", unimplementedFunc),
+ /* 726 */ SyscallDesc("unused#726", unimplementedFunc),
+ /* 727 */ SyscallDesc("unused#727", unimplementedFunc),
+ /* 728 */ SyscallDesc("unused#728", unimplementedFunc),
+ /* 729 */ SyscallDesc("unused#729", unimplementedFunc),
+ /* 730 */ SyscallDesc("unused#730", unimplementedFunc),
+ /* 731 */ SyscallDesc("unused#731", unimplementedFunc),
+ /* 732 */ SyscallDesc("unused#732", unimplementedFunc),
+ /* 733 */ SyscallDesc("unused#733", unimplementedFunc),
+ /* 734 */ SyscallDesc("unused#734", unimplementedFunc),
+ /* 735 */ SyscallDesc("unused#735", unimplementedFunc),
+ /* 736 */ SyscallDesc("unused#736", unimplementedFunc),
+ /* 737 */ SyscallDesc("unused#737", unimplementedFunc),
+ /* 738 */ SyscallDesc("unused#738", unimplementedFunc),
+ /* 739 */ SyscallDesc("unused#739", unimplementedFunc),
+ /* 740 */ SyscallDesc("unused#740", unimplementedFunc),
+ /* 741 */ SyscallDesc("unused#741", unimplementedFunc),
+ /* 742 */ SyscallDesc("unused#742", unimplementedFunc),
+ /* 743 */ SyscallDesc("unused#743", unimplementedFunc),
+ /* 744 */ SyscallDesc("unused#744", unimplementedFunc),
+ /* 745 */ SyscallDesc("unused#745", unimplementedFunc),
+ /* 746 */ SyscallDesc("unused#746", unimplementedFunc),
+ /* 747 */ SyscallDesc("unused#747", unimplementedFunc),
+ /* 748 */ SyscallDesc("unused#748", unimplementedFunc),
+ /* 749 */ SyscallDesc("unused#749", unimplementedFunc),
+ /* 750 */ SyscallDesc("unused#750", unimplementedFunc),
+ /* 751 */ SyscallDesc("unused#751", unimplementedFunc),
+ /* 752 */ SyscallDesc("unused#752", unimplementedFunc),
+ /* 753 */ SyscallDesc("unused#753", unimplementedFunc),
+ /* 754 */ SyscallDesc("unused#754", unimplementedFunc),
+ /* 755 */ SyscallDesc("unused#755", unimplementedFunc),
+ /* 756 */ SyscallDesc("unused#756", unimplementedFunc),
+ /* 757 */ SyscallDesc("unused#757", unimplementedFunc),
+ /* 758 */ SyscallDesc("unused#758", unimplementedFunc),
+ /* 759 */ SyscallDesc("unused#759", unimplementedFunc),
+ /* 760 */ SyscallDesc("unused#760", unimplementedFunc),
+ /* 761 */ SyscallDesc("unused#761", unimplementedFunc),
+ /* 762 */ SyscallDesc("unused#762", unimplementedFunc),
+ /* 763 */ SyscallDesc("unused#763", unimplementedFunc),
+ /* 764 */ SyscallDesc("unused#764", unimplementedFunc),
+ /* 765 */ SyscallDesc("unused#765", unimplementedFunc),
+ /* 766 */ SyscallDesc("unused#766", unimplementedFunc),
+ /* 767 */ SyscallDesc("unused#767", unimplementedFunc),
+ /* 768 */ SyscallDesc("unused#768", unimplementedFunc),
+ /* 769 */ SyscallDesc("unused#769", unimplementedFunc),
+ /* 770 */ SyscallDesc("unused#770", unimplementedFunc),
+ /* 771 */ SyscallDesc("unused#771", unimplementedFunc),
+ /* 772 */ SyscallDesc("unused#772", unimplementedFunc),
+ /* 773 */ SyscallDesc("unused#773", unimplementedFunc),
+ /* 774 */ SyscallDesc("unused#774", unimplementedFunc),
+ /* 775 */ SyscallDesc("unused#775", unimplementedFunc),
+ /* 776 */ SyscallDesc("unused#776", unimplementedFunc),
+ /* 777 */ SyscallDesc("unused#777", unimplementedFunc),
+ /* 778 */ SyscallDesc("unused#778", unimplementedFunc),
+ /* 779 */ SyscallDesc("unused#779", unimplementedFunc),
+ /* 780 */ SyscallDesc("unused#780", unimplementedFunc),
+ /* 781 */ SyscallDesc("unused#781", unimplementedFunc),
+ /* 782 */ SyscallDesc("unused#782", unimplementedFunc),
+ /* 783 */ SyscallDesc("unused#783", unimplementedFunc),
+ /* 784 */ SyscallDesc("unused#784", unimplementedFunc),
+ /* 785 */ SyscallDesc("unused#785", unimplementedFunc),
+ /* 786 */ SyscallDesc("unused#786", unimplementedFunc),
+ /* 787 */ SyscallDesc("unused#787", unimplementedFunc),
+ /* 788 */ SyscallDesc("unused#788", unimplementedFunc),
+ /* 789 */ SyscallDesc("unused#789", unimplementedFunc),
+ /* 790 */ SyscallDesc("unused#790", unimplementedFunc),
+ /* 791 */ SyscallDesc("unused#791", unimplementedFunc),
+ /* 792 */ SyscallDesc("unused#792", unimplementedFunc),
+ /* 793 */ SyscallDesc("unused#793", unimplementedFunc),
+ /* 794 */ SyscallDesc("unused#794", unimplementedFunc),
+ /* 795 */ SyscallDesc("unused#795", unimplementedFunc),
+ /* 796 */ SyscallDesc("unused#796", unimplementedFunc),
+ /* 797 */ SyscallDesc("unused#797", unimplementedFunc),
+ /* 798 */ SyscallDesc("unused#798", unimplementedFunc),
+ /* 799 */ SyscallDesc("unused#799", unimplementedFunc),
+ /* 800 */ SyscallDesc("unused#800", unimplementedFunc),
+ /* 801 */ SyscallDesc("unused#801", unimplementedFunc),
+ /* 802 */ SyscallDesc("unused#802", unimplementedFunc),
+ /* 803 */ SyscallDesc("unused#803", unimplementedFunc),
+ /* 804 */ SyscallDesc("unused#804", unimplementedFunc),
+ /* 805 */ SyscallDesc("unused#805", unimplementedFunc),
+ /* 806 */ SyscallDesc("unused#806", unimplementedFunc),
+ /* 807 */ SyscallDesc("unused#807", unimplementedFunc),
+ /* 808 */ SyscallDesc("unused#808", unimplementedFunc),
+ /* 809 */ SyscallDesc("unused#809", unimplementedFunc),
+ /* 810 */ SyscallDesc("unused#810", unimplementedFunc),
+ /* 811 */ SyscallDesc("unused#811", unimplementedFunc),
+ /* 812 */ SyscallDesc("unused#812", unimplementedFunc),
+ /* 813 */ SyscallDesc("unused#813", unimplementedFunc),
+ /* 814 */ SyscallDesc("unused#814", unimplementedFunc),
+ /* 815 */ SyscallDesc("unused#815", unimplementedFunc),
+ /* 816 */ SyscallDesc("unused#816", unimplementedFunc),
+ /* 817 */ SyscallDesc("unused#817", unimplementedFunc),
+ /* 818 */ SyscallDesc("unused#818", unimplementedFunc),
+ /* 819 */ SyscallDesc("unused#819", unimplementedFunc),
+ /* 820 */ SyscallDesc("unused#820", unimplementedFunc),
+ /* 821 */ SyscallDesc("unused#821", unimplementedFunc),
+ /* 822 */ SyscallDesc("unused#822", unimplementedFunc),
+ /* 823 */ SyscallDesc("unused#823", unimplementedFunc),
+ /* 824 */ SyscallDesc("unused#824", unimplementedFunc),
+ /* 825 */ SyscallDesc("unused#825", unimplementedFunc),
+ /* 826 */ SyscallDesc("unused#826", unimplementedFunc),
+ /* 827 */ SyscallDesc("unused#827", unimplementedFunc),
+ /* 828 */ SyscallDesc("unused#828", unimplementedFunc),
+ /* 829 */ SyscallDesc("unused#829", unimplementedFunc),
+ /* 830 */ SyscallDesc("unused#830", unimplementedFunc),
+ /* 831 */ SyscallDesc("unused#831", unimplementedFunc),
+ /* 832 */ SyscallDesc("unused#832", unimplementedFunc),
+ /* 833 */ SyscallDesc("unused#833", unimplementedFunc),
+ /* 834 */ SyscallDesc("unused#834", unimplementedFunc),
+ /* 835 */ SyscallDesc("unused#835", unimplementedFunc),
+ /* 836 */ SyscallDesc("unused#836", unimplementedFunc),
+ /* 837 */ SyscallDesc("unused#837", unimplementedFunc),
+ /* 838 */ SyscallDesc("unused#838", unimplementedFunc),
+ /* 839 */ SyscallDesc("unused#839", unimplementedFunc),
+ /* 840 */ SyscallDesc("unused#840", unimplementedFunc),
+ /* 841 */ SyscallDesc("unused#841", unimplementedFunc),
+ /* 842 */ SyscallDesc("unused#842", unimplementedFunc),
+ /* 843 */ SyscallDesc("unused#843", unimplementedFunc),
+ /* 844 */ SyscallDesc("unused#844", unimplementedFunc),
+ /* 845 */ SyscallDesc("unused#845", unimplementedFunc),
+ /* 846 */ SyscallDesc("unused#846", unimplementedFunc),
+ /* 847 */ SyscallDesc("unused#847", unimplementedFunc),
+ /* 848 */ SyscallDesc("unused#848", unimplementedFunc),
+ /* 849 */ SyscallDesc("unused#849", unimplementedFunc),
+ /* 850 */ SyscallDesc("unused#850", unimplementedFunc),
+ /* 851 */ SyscallDesc("unused#851", unimplementedFunc),
+ /* 852 */ SyscallDesc("unused#852", unimplementedFunc),
+ /* 853 */ SyscallDesc("unused#853", unimplementedFunc),
+ /* 854 */ SyscallDesc("unused#854", unimplementedFunc),
+ /* 855 */ SyscallDesc("unused#855", unimplementedFunc),
+ /* 856 */ SyscallDesc("unused#856", unimplementedFunc),
+ /* 857 */ SyscallDesc("unused#857", unimplementedFunc),
+ /* 858 */ SyscallDesc("unused#858", unimplementedFunc),
+ /* 859 */ SyscallDesc("unused#859", unimplementedFunc),
+ /* 860 */ SyscallDesc("unused#860", unimplementedFunc),
+ /* 861 */ SyscallDesc("unused#861", unimplementedFunc),
+ /* 862 */ SyscallDesc("unused#862", unimplementedFunc),
+ /* 863 */ SyscallDesc("unused#863", unimplementedFunc),
+ /* 864 */ SyscallDesc("unused#864", unimplementedFunc),
+ /* 865 */ SyscallDesc("unused#865", unimplementedFunc),
+ /* 866 */ SyscallDesc("unused#866", unimplementedFunc),
+ /* 867 */ SyscallDesc("unused#867", unimplementedFunc),
+ /* 868 */ SyscallDesc("unused#868", unimplementedFunc),
+ /* 869 */ SyscallDesc("unused#869", unimplementedFunc),
+ /* 870 */ SyscallDesc("unused#870", unimplementedFunc),
+ /* 871 */ SyscallDesc("unused#871", unimplementedFunc),
+ /* 872 */ SyscallDesc("unused#872", unimplementedFunc),
+ /* 873 */ SyscallDesc("unused#873", unimplementedFunc),
+ /* 874 */ SyscallDesc("unused#874", unimplementedFunc),
+ /* 875 */ SyscallDesc("unused#875", unimplementedFunc),
+ /* 876 */ SyscallDesc("unused#876", unimplementedFunc),
+ /* 877 */ SyscallDesc("unused#877", unimplementedFunc),
+ /* 878 */ SyscallDesc("unused#878", unimplementedFunc),
+ /* 879 */ SyscallDesc("unused#879", unimplementedFunc),
+ /* 880 */ SyscallDesc("unused#880", unimplementedFunc),
+ /* 881 */ SyscallDesc("unused#881", unimplementedFunc),
+ /* 882 */ SyscallDesc("unused#882", unimplementedFunc),
+ /* 883 */ SyscallDesc("unused#883", unimplementedFunc),
+ /* 884 */ SyscallDesc("unused#884", unimplementedFunc),
+ /* 885 */ SyscallDesc("unused#885", unimplementedFunc),
+ /* 886 */ SyscallDesc("unused#886", unimplementedFunc),
+ /* 887 */ SyscallDesc("unused#887", unimplementedFunc),
+ /* 888 */ SyscallDesc("unused#888", unimplementedFunc),
+ /* 889 */ SyscallDesc("unused#889", unimplementedFunc),
+ /* 890 */ SyscallDesc("unused#890", unimplementedFunc),
+ /* 891 */ SyscallDesc("unused#891", unimplementedFunc),
+ /* 892 */ SyscallDesc("unused#892", unimplementedFunc),
+ /* 893 */ SyscallDesc("unused#893", unimplementedFunc),
+ /* 894 */ SyscallDesc("unused#894", unimplementedFunc),
+ /* 895 */ SyscallDesc("unused#895", unimplementedFunc),
+ /* 896 */ SyscallDesc("unused#896", unimplementedFunc),
+ /* 897 */ SyscallDesc("unused#897", unimplementedFunc),
+ /* 898 */ SyscallDesc("unused#898", unimplementedFunc),
+ /* 899 */ SyscallDesc("unused#899", unimplementedFunc),
+ /* 900 */ SyscallDesc("unused#900", unimplementedFunc),
+ /* 901 */ SyscallDesc("unused#901", unimplementedFunc),
+ /* 902 */ SyscallDesc("unused#902", unimplementedFunc),
+ /* 903 */ SyscallDesc("unused#903", unimplementedFunc),
+ /* 904 */ SyscallDesc("unused#904", unimplementedFunc),
+ /* 905 */ SyscallDesc("unused#905", unimplementedFunc),
+ /* 906 */ SyscallDesc("unused#906", unimplementedFunc),
+ /* 907 */ SyscallDesc("unused#907", unimplementedFunc),
+ /* 908 */ SyscallDesc("unused#908", unimplementedFunc),
+ /* 909 */ SyscallDesc("unused#909", unimplementedFunc),
+ /* 910 */ SyscallDesc("unused#910", unimplementedFunc),
+ /* 911 */ SyscallDesc("unused#911", unimplementedFunc),
+ /* 912 */ SyscallDesc("unused#912", unimplementedFunc),
+ /* 913 */ SyscallDesc("unused#913", unimplementedFunc),
+ /* 914 */ SyscallDesc("unused#914", unimplementedFunc),
+ /* 915 */ SyscallDesc("unused#915", unimplementedFunc),
+ /* 916 */ SyscallDesc("unused#916", unimplementedFunc),
+ /* 917 */ SyscallDesc("unused#917", unimplementedFunc),
+ /* 918 */ SyscallDesc("unused#918", unimplementedFunc),
+ /* 919 */ SyscallDesc("unused#919", unimplementedFunc),
+ /* 920 */ SyscallDesc("unused#920", unimplementedFunc),
+ /* 921 */ SyscallDesc("unused#921", unimplementedFunc),
+ /* 922 */ SyscallDesc("unused#922", unimplementedFunc),
+ /* 923 */ SyscallDesc("unused#923", unimplementedFunc),
+ /* 924 */ SyscallDesc("unused#924", unimplementedFunc),
+ /* 925 */ SyscallDesc("unused#925", unimplementedFunc),
+ /* 926 */ SyscallDesc("unused#926", unimplementedFunc),
+ /* 927 */ SyscallDesc("unused#927", unimplementedFunc),
+ /* 928 */ SyscallDesc("unused#928", unimplementedFunc),
+ /* 929 */ SyscallDesc("unused#929", unimplementedFunc),
+ /* 930 */ SyscallDesc("unused#930", unimplementedFunc),
+ /* 931 */ SyscallDesc("unused#931", unimplementedFunc),
+ /* 932 */ SyscallDesc("unused#932", unimplementedFunc),
+ /* 933 */ SyscallDesc("unused#933", unimplementedFunc),
+ /* 934 */ SyscallDesc("unused#934", unimplementedFunc),
+ /* 935 */ SyscallDesc("unused#935", unimplementedFunc),
+ /* 936 */ SyscallDesc("unused#936", unimplementedFunc),
+ /* 937 */ SyscallDesc("unused#937", unimplementedFunc),
+ /* 938 */ SyscallDesc("unused#938", unimplementedFunc),
+ /* 939 */ SyscallDesc("unused#939", unimplementedFunc),
+ /* 940 */ SyscallDesc("unused#940", unimplementedFunc),
+ /* 941 */ SyscallDesc("unused#941", unimplementedFunc),
+ /* 942 */ SyscallDesc("unused#942", unimplementedFunc),
+ /* 943 */ SyscallDesc("unused#943", unimplementedFunc),
+ /* 944 */ SyscallDesc("unused#944", unimplementedFunc),
+ /* 945 */ SyscallDesc("unused#945", unimplementedFunc),
+ /* 946 */ SyscallDesc("unused#946", unimplementedFunc),
+ /* 947 */ SyscallDesc("unused#947", unimplementedFunc),
+ /* 948 */ SyscallDesc("unused#948", unimplementedFunc),
+ /* 949 */ SyscallDesc("unused#949", unimplementedFunc),
+ /* 950 */ SyscallDesc("unused#950", unimplementedFunc),
+ /* 951 */ SyscallDesc("unused#951", unimplementedFunc),
+ /* 952 */ SyscallDesc("unused#952", unimplementedFunc),
+ /* 953 */ SyscallDesc("unused#953", unimplementedFunc),
+ /* 954 */ SyscallDesc("unused#954", unimplementedFunc),
+ /* 955 */ SyscallDesc("unused#955", unimplementedFunc),
+ /* 956 */ SyscallDesc("unused#956", unimplementedFunc),
+ /* 957 */ SyscallDesc("unused#957", unimplementedFunc),
+ /* 958 */ SyscallDesc("unused#958", unimplementedFunc),
+ /* 959 */ SyscallDesc("unused#959", unimplementedFunc),
+ /* 960 */ SyscallDesc("unused#960", unimplementedFunc),
+ /* 961 */ SyscallDesc("unused#961", unimplementedFunc),
+ /* 962 */ SyscallDesc("unused#962", unimplementedFunc),
+ /* 963 */ SyscallDesc("unused#963", unimplementedFunc),
+ /* 964 */ SyscallDesc("unused#964", unimplementedFunc),
+ /* 965 */ SyscallDesc("unused#965", unimplementedFunc),
+ /* 966 */ SyscallDesc("unused#966", unimplementedFunc),
+ /* 967 */ SyscallDesc("unused#967", unimplementedFunc),
+ /* 968 */ SyscallDesc("unused#968", unimplementedFunc),
+ /* 969 */ SyscallDesc("unused#969", unimplementedFunc),
+ /* 970 */ SyscallDesc("unused#970", unimplementedFunc),
+ /* 971 */ SyscallDesc("unused#971", unimplementedFunc),
+ /* 972 */ SyscallDesc("unused#972", unimplementedFunc),
+ /* 973 */ SyscallDesc("unused#973", unimplementedFunc),
+ /* 974 */ SyscallDesc("unused#974", unimplementedFunc),
+ /* 975 */ SyscallDesc("unused#975", unimplementedFunc),
+ /* 976 */ SyscallDesc("unused#976", unimplementedFunc),
+ /* 977 */ SyscallDesc("unused#977", unimplementedFunc),
+ /* 978 */ SyscallDesc("unused#978", unimplementedFunc),
+ /* 979 */ SyscallDesc("unused#979", unimplementedFunc),
+ /* 980 */ SyscallDesc("unused#980", unimplementedFunc),
+ /* 981 */ SyscallDesc("unused#981", unimplementedFunc),
+ /* 982 */ SyscallDesc("unused#982", unimplementedFunc),
+ /* 983 */ SyscallDesc("unused#983", unimplementedFunc),
+ /* 984 */ SyscallDesc("unused#984", unimplementedFunc),
+ /* 985 */ SyscallDesc("unused#985", unimplementedFunc),
+ /* 986 */ SyscallDesc("unused#986", unimplementedFunc),
+ /* 987 */ SyscallDesc("unused#987", unimplementedFunc),
+ /* 988 */ SyscallDesc("unused#988", unimplementedFunc),
+ /* 989 */ SyscallDesc("unused#989", unimplementedFunc),
+ /* 990 */ SyscallDesc("unused#990", unimplementedFunc),
+ /* 991 */ SyscallDesc("unused#991", unimplementedFunc),
+ /* 992 */ SyscallDesc("unused#992", unimplementedFunc),
+ /* 993 */ SyscallDesc("unused#993", unimplementedFunc),
+ /* 994 */ SyscallDesc("unused#994", unimplementedFunc),
+ /* 995 */ SyscallDesc("unused#995", unimplementedFunc),
+ /* 996 */ SyscallDesc("unused#996", unimplementedFunc),
+ /* 997 */ SyscallDesc("unused#997", unimplementedFunc),
+ /* 998 */ SyscallDesc("unused#998", unimplementedFunc),
+ /* 999 */ SyscallDesc("unused#999", unimplementedFunc),
+ /* 1000 */ SyscallDesc("unused#1000", unimplementedFunc),
+ /* 1001 */ SyscallDesc("unused#1001", unimplementedFunc),
+ /* 1002 */ SyscallDesc("unused#1002", unimplementedFunc),
+ /* 1003 */ SyscallDesc("unused#1003", unimplementedFunc),
+ /* 1004 */ SyscallDesc("unused#1004", unimplementedFunc),
+ /* 1005 */ SyscallDesc("unused#1005", unimplementedFunc),
+ /* 1006 */ SyscallDesc("unused#1006", unimplementedFunc),
+ /* 1007 */ SyscallDesc("unused#1007", unimplementedFunc),
+ /* 1008 */ SyscallDesc("unused#1008", unimplementedFunc),
+ /* 1009 */ SyscallDesc("unused#1009", unimplementedFunc),
+ /* 1010 */ SyscallDesc("unused#1010", unimplementedFunc),
+ /* 1011 */ SyscallDesc("unused#1011", unimplementedFunc),
+ /* 1012 */ SyscallDesc("unused#1012", unimplementedFunc),
+ /* 1013 */ SyscallDesc("unused#1013", unimplementedFunc),
+ /* 1014 */ SyscallDesc("unused#1014", unimplementedFunc),
+ /* 1015 */ SyscallDesc("unused#1015", unimplementedFunc),
+ /* 1016 */ SyscallDesc("unused#1016", unimplementedFunc),
+ /* 1017 */ SyscallDesc("unused#1017", unimplementedFunc),
+ /* 1018 */ SyscallDesc("unused#1018", unimplementedFunc),
+ /* 1019 */ SyscallDesc("unused#1019", unimplementedFunc),
+ /* 1020 */ SyscallDesc("unused#1020", unimplementedFunc),
+ /* 1021 */ SyscallDesc("unused#1021", unimplementedFunc),
+ /* 1022 */ SyscallDesc("unused#1022", unimplementedFunc),
+ /* 1023 */ SyscallDesc("unused#1023", unimplementedFunc),
+ /* 1024 */ SyscallDesc("open", openFunc<ArmLinux64>),
+ /* 1025 */ SyscallDesc("link", unimplementedFunc),
+ /* 1026 */ SyscallDesc("unlink", unlinkFunc),
+ /* 1027 */ SyscallDesc("mknod", unimplementedFunc),
+ /* 1028 */ SyscallDesc("chmod", chmodFunc<ArmLinux64>),
+ /* 1029 */ SyscallDesc("chown", unimplementedFunc),
+ /* 1030 */ SyscallDesc("mkdir", mkdirFunc),
+ /* 1031 */ SyscallDesc("rmdir", unimplementedFunc),
+ /* 1032 */ SyscallDesc("lchown", unimplementedFunc),
+ /* 1033 */ SyscallDesc("access", unimplementedFunc),
+ /* 1034 */ SyscallDesc("rename", renameFunc),
+ /* 1035 */ SyscallDesc("readlink", readlinkFunc),
+ /* 1036 */ SyscallDesc("symlink", unimplementedFunc),
+ /* 1037 */ SyscallDesc("utimes", unimplementedFunc),
+ /* 1038 */ SyscallDesc("stat64", stat64Func<ArmLinux64>),
+ /* 1039 */ SyscallDesc("lstat64", lstat64Func<ArmLinux64>),
+ /* 1040 */ SyscallDesc("pipe", pipePseudoFunc),
+ /* 1041 */ SyscallDesc("dup2", unimplementedFunc),
+ /* 1042 */ SyscallDesc("epoll_create", unimplementedFunc),
+ /* 1043 */ SyscallDesc("inotify_init", unimplementedFunc),
+ /* 1044 */ SyscallDesc("eventfd", unimplementedFunc),
+ /* 1045 */ SyscallDesc("signalfd", unimplementedFunc),
+ /* 1046 */ SyscallDesc("sendfile", unimplementedFunc),
+ /* 1047 */ SyscallDesc("ftruncate", ftruncateFunc),
+ /* 1048 */ SyscallDesc("truncate", truncateFunc),
+ /* 1049 */ SyscallDesc("stat", statFunc<ArmLinux64>),
+ /* 1050 */ SyscallDesc("lstat", unimplementedFunc),
+ /* 1051 */ SyscallDesc("fstat", fstatFunc<ArmLinux64>),
+ /* 1052 */ SyscallDesc("fcntl", fcntlFunc),
+ /* 1053 */ SyscallDesc("fadvise64", unimplementedFunc),
+ /* 1054 */ SyscallDesc("newfstatat", unimplementedFunc),
+ /* 1055 */ SyscallDesc("fstatfs", unimplementedFunc),
+ /* 1056 */ SyscallDesc("statfs", unimplementedFunc),
+ /* 1057 */ SyscallDesc("lseek", lseekFunc),
+ /* 1058 */ SyscallDesc("mmap", mmapFunc<ArmLinux64>),
+ /* 1059 */ SyscallDesc("alarm", unimplementedFunc),
+ /* 1060 */ SyscallDesc("getpgrp", unimplementedFunc),
+ /* 1061 */ SyscallDesc("pause", unimplementedFunc),
+ /* 1062 */ SyscallDesc("time", timeFunc<ArmLinux64>),
+ /* 1063 */ SyscallDesc("utime", unimplementedFunc),
+ /* 1064 */ SyscallDesc("creat", unimplementedFunc),
+ /* 1065 */ SyscallDesc("getdents", unimplementedFunc),
+ /* 1066 */ SyscallDesc("futimesat", unimplementedFunc),
+ /* 1067 */ SyscallDesc("select", unimplementedFunc),
+ /* 1068 */ SyscallDesc("poll", unimplementedFunc),
+ /* 1069 */ SyscallDesc("epoll_wait", unimplementedFunc),
+ /* 1070 */ SyscallDesc("ustat", unimplementedFunc),
+ /* 1071 */ SyscallDesc("vfork", unimplementedFunc),
+ /* 1072 */ SyscallDesc("oldwait4", unimplementedFunc),
+ /* 1073 */ SyscallDesc("recv", unimplementedFunc),
+ /* 1074 */ SyscallDesc("send", unimplementedFunc),
+ /* 1075 */ SyscallDesc("bdflush", unimplementedFunc),
+ /* 1076 */ SyscallDesc("umount", unimplementedFunc),
+ /* 1077 */ SyscallDesc("uselib", unimplementedFunc),
+ /* 1078 */ SyscallDesc("_sysctl", unimplementedFunc),
+ /* 1079 */ SyscallDesc("fork", unimplementedFunc)
+};
-SyscallDesc ArmLinuxProcess::privSyscallDescs[] = {
+static SyscallDesc privSyscallDescs32[] = {
/* 1 */ SyscallDesc("breakpoint", unimplementedFunc),
/* 2 */ SyscallDesc("cacheflush", unimplementedFunc),
/* 3 */ SyscallDesc("usr26", unimplementedFunc),
/* 4 */ SyscallDesc("usr32", unimplementedFunc),
- /* 5 */ SyscallDesc("set_tls", setTLSFunc)
+ /* 5 */ SyscallDesc("set_tls", setTLSFunc32)
};
-ArmLinuxProcess::ArmLinuxProcess(LiveProcessParams * params,
+// Indices 1, 3 and 4 are unallocated.
+static SyscallDesc privSyscallDescs64[] = {
+ /* 1 */ SyscallDesc("unallocated", unimplementedFunc),
+ /* 2 */ SyscallDesc("cacheflush", unimplementedFunc),
+ /* 3 */ SyscallDesc("unallocated", unimplementedFunc),
+ /* 4 */ SyscallDesc("unallocated", unimplementedFunc),
+ /* 5 */ SyscallDesc("set_tls", setTLSFunc64)
+};
+
+ArmLinuxProcess32::ArmLinuxProcess32(LiveProcessParams * params,
ObjectFile *objFile, ObjectFile::Arch _arch)
- : ArmLiveProcess(params, objFile, _arch),
- Num_Syscall_Descs(sizeof(syscallDescs) / sizeof(SyscallDesc)),
- Num_Priv_Syscall_Descs(sizeof(privSyscallDescs) / sizeof(SyscallDesc))
-{ }
+ : ArmLiveProcess32(params, objFile, _arch)
+{
+ SyscallTable table;
+
+ table.descs = syscallDescs32;
+ table.size = sizeof(syscallDescs32) / sizeof(SyscallDesc);
+ table.base = 0;
+ syscallTables.push_back(table);
+ table.base = 0x900000;
+ syscallTables.push_back(table);
-const Addr ArmLinuxProcess::commPage = 0xffff0000;
+ table.descs = privSyscallDescs32;
+ table.size = sizeof(privSyscallDescs32) / sizeof(SyscallDesc);
+ table.base = 0xf0001;
+ syscallTables.push_back(table);
+}
+
+ArmLinuxProcess64::ArmLinuxProcess64(LiveProcessParams * params,
+ ObjectFile *objFile, ObjectFile::Arch _arch)
+ : ArmLiveProcess64(params, objFile, _arch)
+{
+ SyscallTable table;
+
+ table.descs = syscallDescs64;
+ table.size = sizeof(syscallDescs64) / sizeof(SyscallDesc);
+ table.base = 0;
+ syscallTables.push_back(table);
+ table.base = 0x900000;
+ syscallTables.push_back(table);
+
+ table.descs = privSyscallDescs64;
+ table.size = sizeof(privSyscallDescs64) / sizeof(SyscallDesc);
+ table.base = 0x1001;
+ syscallTables.push_back(table);
+}
+
+const Addr ArmLinuxProcess32::commPage = 0xffff0000;
SyscallDesc*
-ArmLinuxProcess::getDesc(int callnum)
+ArmLinuxProcessBits::getLinuxDesc(int callnum)
{
// Angel SWI syscalls are unsupported in this release
- if (callnum == 0x123456) {
+ if (callnum == 0x123456)
panic("Attempt to execute an ANGEL_SWI system call (newlib-related)");
- } else if ((callnum & 0x00f00000) == 0x00900000 ||
- (callnum & 0xf0000) == 0xf0000) {
- callnum &= 0x000fffff;
- if ((callnum & 0x0f0000) == 0xf0000) {
- callnum -= 0x0f0001;
- if (callnum < 0 || callnum > Num_Priv_Syscall_Descs)
- return NULL;
- return &privSyscallDescs[callnum];
- }
+ for (unsigned i = 0; i < syscallTables.size(); i++) {
+ SyscallDesc *desc = syscallTables[i].getDesc(callnum);
+ if (desc)
+ return desc;
}
- // Linux syscalls have to strip off the 0x00900000
+ return NULL;
+}
- if (callnum < 0 || callnum > Num_Syscall_Descs)
+SyscallDesc *
+ArmLinuxProcessBits::SyscallTable::getDesc(int callnum) const
+{
+ int offset = callnum - base;
+ if (offset < 0 || offset >= size)
return NULL;
+ return &descs[offset];
+}
+
+SyscallDesc*
+ArmLinuxProcess32::getDesc(int callnum)
+{
+ return getLinuxDesc(callnum);
+}
- return &syscallDescs[callnum];
+SyscallDesc*
+ArmLinuxProcess64::getDesc(int callnum)
+{
+ return getLinuxDesc(callnum);
}
void
-ArmLinuxProcess::initState()
+ArmLinuxProcess32::initState()
{
- ArmLiveProcess::initState();
+ ArmLiveProcess32::initState();
allocateMem(commPage, PageBytes);
ThreadContext *tc = system->getThreadContext(contextIds[0]);
@@ -546,20 +1709,9 @@ ArmLinuxProcess::initState()
tc->getMemProxy().writeBlob(commPage + 0x0fe0, get_tls, sizeof(get_tls));
}
-ArmISA::IntReg
-ArmLinuxProcess::getSyscallArg(ThreadContext *tc, int &i)
-{
- // Linux apparently allows more parameter than the ABI says it should.
- // This limit may need to be increased even further.
- assert(i < 6);
- return tc->readIntReg(ArgumentReg0 + i++);
-}
-
void
-ArmLinuxProcess::setSyscallArg(ThreadContext *tc, int i, ArmISA::IntReg val)
+ArmLinuxProcess64::initState()
{
- // Linux apparently allows more parameter than the ABI says it should.
- // This limit may need to be increased even further.
- assert(i < 6);
- tc->setIntReg(ArgumentReg0 + i, val);
+ ArmLiveProcess64::initState();
+ // The 64 bit equivalent of the comm page would be set up here.
}
diff --git a/src/arch/arm/linux/process.hh b/src/arch/arm/linux/process.hh
index 7d3a943ed..670739438 100644
--- a/src/arch/arm/linux/process.hh
+++ b/src/arch/arm/linux/process.hh
@@ -1,4 +1,16 @@
/*
+* Copyright (c) 2011-2012 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder. You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
* Copyright (c) 2007-2008 The Florida State University
* All rights reserved.
*
@@ -31,39 +43,54 @@
#ifndef __ARM_LINUX_PROCESS_HH__
#define __ARM_LINUX_PROCESS_HH__
+#include <vector>
+
#include "arch/arm/process.hh"
+class ArmLinuxProcessBits
+{
+ protected:
+ SyscallDesc* getLinuxDesc(int callnum);
+
+ struct SyscallTable
+ {
+ int base;
+ SyscallDesc *descs;
+ int size;
+
+ SyscallDesc *getDesc(int offset) const;
+ };
+
+ std::vector<SyscallTable> syscallTables;
+};
+
/// A process with emulated Arm/Linux syscalls.
-class ArmLinuxProcess : public ArmLiveProcess
+class ArmLinuxProcess32 : public ArmLiveProcess32, public ArmLinuxProcessBits
{
public:
- ArmLinuxProcess(LiveProcessParams * params, ObjectFile *objFile,
- ObjectFile::Arch _arch);
-
- virtual SyscallDesc* getDesc(int callnum);
+ ArmLinuxProcess32(LiveProcessParams * params, ObjectFile *objFile,
+ ObjectFile::Arch _arch);
void initState();
- ArmISA::IntReg getSyscallArg(ThreadContext *tc, int &i);
/// Explicitly import the otherwise hidden getSyscallArg
using ArmLiveProcess::getSyscallArg;
- void setSyscallArg(ThreadContext *tc, int i, ArmISA::IntReg val);
-
- /// The target system's hostname.
- static const char *hostname;
/// A page to hold "kernel" provided functions. The name might be wrong.
static const Addr commPage;
- /// Array of syscall descriptors, indexed by call number.
- static SyscallDesc syscallDescs[];
-
- /// Array of "arm private" syscall descriptors.
- static SyscallDesc privSyscallDescs[];
+ SyscallDesc* getDesc(int callnum);
+};
- const int Num_Syscall_Descs;
+/// A process with emulated Arm/Linux syscalls.
+class ArmLinuxProcess64 : public ArmLiveProcess64, public ArmLinuxProcessBits
+{
+ public:
+ ArmLinuxProcess64(LiveProcessParams * params, ObjectFile *objFile,
+ ObjectFile::Arch _arch);
- const int Num_Priv_Syscall_Descs;
+ void initState();
+ SyscallDesc* getDesc(int callnum);
};
#endif // __ARM_LINUX_PROCESS_HH__
diff --git a/src/arch/arm/linux/system.cc b/src/arch/arm/linux/system.cc
index bc7fd2cb6..216a65899 100644
--- a/src/arch/arm/linux/system.cc
+++ b/src/arch/arm/linux/system.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010-2012 ARM Limited
+ * Copyright (c) 2010-2013 ARM Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
@@ -63,7 +63,8 @@ using namespace Linux;
LinuxArmSystem::LinuxArmSystem(Params *p)
: ArmSystem(p),
enableContextSwitchStatsDump(p->enable_context_switch_stats_dump),
- kernelPanicEvent(NULL), kernelOopsEvent(NULL)
+ kernelPanicEvent(NULL), kernelOopsEvent(NULL),
+ bootReleaseAddr(p->boot_release_addr)
{
if (p->panic_on_panic) {
kernelPanicEvent = addKernelFuncEventOrPanic<PanicPCEvent>(
@@ -98,22 +99,30 @@ LinuxArmSystem::LinuxArmSystem(Params *p)
secDataPtrAddr = 0;
secDataAddr = 0;
penReleaseAddr = 0;
+
kernelSymtab->findAddress("__secondary_data", secDataPtrAddr);
kernelSymtab->findAddress("secondary_data", secDataAddr);
kernelSymtab->findAddress("pen_release", penReleaseAddr);
+ kernelSymtab->findAddress("secondary_holding_pen_release", pen64ReleaseAddr);
secDataPtrAddr &= ~ULL(0x7F);
secDataAddr &= ~ULL(0x7F);
penReleaseAddr &= ~ULL(0x7F);
+ pen64ReleaseAddr &= ~ULL(0x7F);
+ bootReleaseAddr = (bootReleaseAddr & ~ULL(0x7F)) + loadAddrOffset;
+
}
bool
LinuxArmSystem::adderBootUncacheable(Addr a)
{
Addr block = a & ~ULL(0x7F);
+
if (block == secDataPtrAddr || block == secDataAddr ||
- block == penReleaseAddr)
+ block == penReleaseAddr || pen64ReleaseAddr == block ||
+ block == bootReleaseAddr)
return true;
+
return false;
}
@@ -145,7 +154,8 @@ LinuxArmSystem::initState()
if (kernel_has_fdt_support && dtb_file_specified) {
// Kernel supports flattened device tree and dtb file specified.
// Using Device Tree Blob to describe system configuration.
- inform("Loading DTB file: %s\n", params()->dtb_filename);
+ inform("Loading DTB file: %s at address %#x\n", params()->dtb_filename,
+ params()->atags_addr + loadAddrOffset);
ObjectFile *dtb_file = createObjectFile(params()->dtb_filename, true);
if (!dtb_file) {
@@ -165,7 +175,7 @@ LinuxArmSystem::initState()
"to DTB file: %s\n", params()->dtb_filename);
}
- dtb_file->setTextBase(params()->atags_addr);
+ dtb_file->setTextBase(params()->atags_addr + loadAddrOffset);
dtb_file->loadSections(physProxy);
delete dtb_file;
} else {
@@ -215,15 +225,17 @@ LinuxArmSystem::initState()
DPRINTF(Loader, "Boot atags was %d bytes in total\n", size << 2);
DDUMP(Loader, boot_data, size << 2);
- physProxy.writeBlob(params()->atags_addr, boot_data, size << 2);
+ physProxy.writeBlob(params()->atags_addr + loadAddrOffset, boot_data,
+ size << 2);
delete[] boot_data;
}
+ // Kernel boot requirements to set up r0, r1 and r2 in ARMv7
for (int i = 0; i < threadContexts.size(); i++) {
threadContexts[i]->setIntReg(0, 0);
threadContexts[i]->setIntReg(1, params()->machine_type);
- threadContexts[i]->setIntReg(2, params()->atags_addr);
+ threadContexts[i]->setIntReg(2, params()->atags_addr + loadAddrOffset);
}
}
diff --git a/src/arch/arm/linux/system.hh b/src/arch/arm/linux/system.hh
index 008c64429..4ce6ac49e 100644
--- a/src/arch/arm/linux/system.hh
+++ b/src/arch/arm/linux/system.hh
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010-2012 ARM Limited
+ * Copyright (c) 2010-2013 ARM Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
@@ -126,6 +126,8 @@ class LinuxArmSystem : public ArmSystem
Addr secDataPtrAddr;
Addr secDataAddr;
Addr penReleaseAddr;
+ Addr pen64ReleaseAddr;
+ Addr bootReleaseAddr;
};
class DumpStatsPCEvent : public PCEvent