/*
 * Copyright 2010-2013, 2015, 2020 ARM Limited
 *
 * 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 2003-2005 The Regents of The University of Michigan
 * Copyright 2007-2008 The Florida State University
 * Copyright 2020 Google Inc.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met: redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer;
 * redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution;
 * neither the name of the copyright holders nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#include "arch/arm/linux/se_workload.hh"

#include <sys/syscall.h>

#include "arch/arm/linux/process.hh"
#include "base/loader/object_file.hh"
#include "base/trace.hh"
#include "cpu/thread_context.hh"
#include "sim/syscall_emul.hh"

namespace gem5
{

namespace
{

class LinuxLoader : public Process::Loader
{
  public:
    Process *
    load(const ProcessParams &params, loader::ObjectFile *obj) override
    {
        auto arch = obj->getArch();
        auto opsys = obj->getOpSys();

        if (arch != loader::Arm && arch != loader::Thumb &&
                arch != loader::Arm64) {
            return nullptr;
        }

        if (opsys == loader::UnknownOpSys) {
            warn("Unknown operating system; assuming Linux.");
            opsys = loader::Linux;
        }

        if (opsys == loader::LinuxArmOABI) {
            fatal("gem5 does not support ARM OABI binaries. Please recompile "
                    "with an EABI compiler.");
        }

        if (opsys != loader::Linux)
            return nullptr;

        if (arch == loader::Arm64)
            return new ArmLinuxProcess64(params, obj, arch);
        else
            return new ArmLinuxProcess32(params, obj, arch);
    }
};

LinuxLoader linuxLoader;

} // anonymous namespace

namespace ArmISA
{

/// Target uname() handler.
static SyscallReturn
unameFunc32(SyscallDesc *desc, ThreadContext *tc, VPtr<Linux::utsname> name)
{
    auto process = tc->getProcessPtr();

    strcpy(name->sysname, "Linux");
    strcpy(name->nodename, "m5.eecs.umich.edu");
    strcpy(name->release, process->release.c_str());
    strcpy(name->version, "#1 SMP Sat Dec  1 00:00:00 GMT 2012");
    strcpy(name->machine, "armv7l");

    return 0;
}

/// Target uname() handler.
static SyscallReturn
unameFunc64(SyscallDesc *desc, ThreadContext *tc, VPtr<Linux::utsname> name)
{
    auto process = tc->getProcessPtr();

    strcpy(name->sysname, "Linux");
    strcpy(name->nodename, "gem5");
    strcpy(name->release, process->release.c_str());
    strcpy(name->version, "#1 SMP Sat Dec  1 00:00:00 GMT 2012");
    strcpy(name->machine, "armv8l");

    return 0;
}

/// Target set_tls() handler.
static SyscallReturn
setTLSFunc32(SyscallDesc *desc, ThreadContext *tc, uint32_t tlsPtr)
{
    tc->getVirtProxy().writeBlob(ArmLinuxProcess32::commPage + 0x0ff0,
                                &tlsPtr, sizeof(tlsPtr));
    tc->setMiscReg(MISCREG_TPIDRURO, tlsPtr);
    return 0;
}

static SyscallReturn
setTLSFunc64(SyscallDesc *desc, ThreadContext *tc, uint32_t tlsPtr)
{
    tc->setMiscReg(MISCREG_TPIDRRO_EL0, tlsPtr);
    return 0;
}

class SyscallTable32 : public SyscallDescTable<EmuLinux::SyscallABI32>
{
  public:
    SyscallTable32(int base) : SyscallDescTable<EmuLinux::SyscallABI32>({
        {  base + 0, "syscall" },
        {  base + 1, "exit", exitFunc },
        {  base + 2, "fork" },
        {  base + 3, "read", readFunc<ArmLinux32> },
        {  base + 4, "write", writeFunc<ArmLinux32> },
        {  base + 5, "open", openFunc<ArmLinux32> },
        {  base + 6, "close", closeFunc },
        {  base + 8, "creat" },
        {  base + 9, "link" },
        { base + 10, "unlink", unlinkFunc },
        { base + 11, "execve", execveFunc<ArmLinux32> },
        { base + 12, "chdir" },
        { base + 13, "time", timeFunc<ArmLinux32> },
        { base + 14, "mknod" },
        { base + 15, "chmod", chmodFunc<ArmLinux32> },
        { base + 16, "lchown", chownFunc },
        { base + 19, "lseek", lseekFunc },
        { base + 20, "getpid", getpidFunc },
        { base + 21, "mount" },
        { base + 22, "umount" },
        { base + 23, "setuid", ignoreFunc },
        { base + 24, "getuid", getuidFunc },
        { base + 25, "stime" },
        { base + 26, "ptrace" },
        { base + 27, "alarm" },
        { base + 29, "pause" },
        { base + 30, "utime" },
        { base + 33, "access", accessFunc },
        { base + 34, "nice" },
        { base + 36, "sync" },
        { base + 37, "kill", ignoreFunc },
        { base + 38, "rename", renameFunc },
        { base + 39, "mkdir", mkdirFunc },
        { base + 40, "rmdir" },
        { base + 41, "dup", dupFunc },
        { base + 42, "pipe", pipePseudoFunc },
        { base + 43, "times", timesFunc<ArmLinux32> },
        { base + 45, "brk", brkFunc },
        { base + 46, "setgid" },
        { base + 47, "getgid", getgidFunc },
        { base + 49, "geteuid", geteuidFunc },
        { base + 50, "getegid", getegidFunc },
        { base + 51, "acct" },
        { base + 52, "umount2" },
        { base + 54, "ioctl", ioctlFunc<ArmLinux32> },
        { base + 55, "fcntl", fcntlFunc },
        { base + 57, "setpgid" },
        { base + 60, "umask", umaskFunc },
        { base + 61, "chroot" },
        { base + 62, "ustat" },
        { base + 63, "dup2" },
        { base + 64, "getppid", getppidFunc },
        { base + 65, "getpgrp" },
        { base + 66, "setsid" },
        { base + 67, "sigaction" },
        { base + 70, "setreuid" },
        { base + 71, "setregid" },
        { base + 72, "sigsuspend" },
        { base + 73, "sigpending" },
        { base + 74, "sethostname", ignoreFunc },
        { base + 75, "setrlimit", ignoreFunc },
        { base + 76, "getrlimit", getrlimitFunc<ArmLinux32> },
        { base + 77, "getrusage", getrusageFunc<ArmLinux32> },
        { base + 78, "gettimeofday", gettimeofdayFunc<ArmLinux32> },
        { base + 79, "settimeofday" },
        { base + 80, "getgroups" },
        { base + 81, "setgroups" },
        { base + 82, "reserved#82" },
        { base + 83, "symlink" },
        { base + 85, "readlink", readlinkFunc },
        { base + 86, "uselib" },
        { base + 87, "swapon" },
        { base + 88, "reboot" },
        { base + 89, "readdir" },
        { base + 90, "mmap", mmapFunc<ArmLinux32> },
        { base + 91, "munmap", munmapFunc },
        { base + 92, "truncate", truncateFunc },
        { base + 93, "ftruncate", ftruncateFunc },
        { base + 94, "fchmod" },
        { base + 95, "fchown" },
        { base + 96, "getpriority" },
        { base + 97, "setpriority" },
        { base + 99, "statfs" },
        { base + 100, "fstatfs" },
        { base + 102, "socketcall" },
        { base + 103, "syslog" },
        { base + 104, "setitimer" },
        { base + 105, "getitimer" },
        { base + 106, "stat",  statFunc<ArmLinux32> },
        { base + 107, "lstat" },
        { base + 108, "fstat", fstatFunc<ArmLinux32> },
        { base + 111, "vhangup" },
        { base + 113, "syscall" },
        { base + 114, "wait4" },
        { base + 115, "swapoff" },
        { base + 116, "sysinfo", sysinfoFunc<ArmLinux32> },
        { base + 117, "ipc" },
        { base + 118, "fsync" },
        { base + 119, "sigreturn" },
        { base + 120, "clone", cloneBackwardsFunc<ArmLinux32> },
        { base + 121, "setdomainname" },
        { base + 122, "uname", unameFunc32 },
        { base + 124, "adjtimex" },
        { base + 125, "mprotect", ignoreFunc },
        { base + 126, "sigprocmask", ignoreWarnOnceFunc },
        { base + 128, "init_module" },
        { base + 129, "delete_module" },
        { base + 131, "quotactl" },
        { base + 132, "getpgid" },
        { base + 133, "fchdir" },
        { base + 134, "bdflush" },
        { base + 135, "sysfs" },
        { base + 136, "personality" },
        { base + 137, "reserved#138" },
        { base + 138, "setfsuid" },
        { base + 139, "setfsgid" },
        { base + 140, "llseek", _llseekFunc },
#if defined(SYS_getdents)
        { base + 141, "getdents", getdentsFunc },
#else
        { base + 141, "getdents" },
#endif
        { base + 142, "newselect" },
        { base + 143, "flock" },
        { base + 144, "msync" },
        { base + 145, "readv" },
        { base + 146, "writev", writevFunc<ArmLinux32> },
        { base + 147, "getsid" },
        { base + 148, "fdatasync" },
        { base + 149, "sysctl" },
        { base + 150, "mlock" },
        { base + 151, "munlock" },
        { base + 152, "mlockall" },
        { base + 153, "munlockall" },
        { base + 154, "sched_setparam", ignoreWarnOnceFunc },
        { base + 155, "sched_getparam", ignoreWarnOnceFunc },
        { base + 156, "sched_setscheduler", ignoreWarnOnceFunc },
        { base + 157, "sched_getscheduler", ignoreWarnOnceFunc },
        { base + 158, "sched_yield", ignoreWarnOnceFunc },
        { base + 159, "sched_get_priority_max", ignoreWarnOnceFunc },
        { base + 160, "sched_get_priority_min", ignoreWarnOnceFunc },
        { base + 161, "sched_rr_get_interval", ignoreWarnOnceFunc },
        { base + 162, "nanosleep", ignoreWarnOnceFunc },
        { base + 163, "mremap", mremapFunc<ArmLinux32> }, // ARM-specific
        { base + 164, "setresuid" },
        { base + 165, "getresuid" },
        { base + 168, "poll" },
        { base + 169, "nfsservctl" },
        { base + 170, "setresgid" },
        { base + 171, "getresgid" },
        { base + 172, "prctl" },
        { base + 173, "rt_sigreturn" },
        { base + 174, "rt_sigaction", ignoreWarnOnceFunc },
        { base + 175, "rt_sigprocmask", ignoreWarnOnceFunc },
        { base + 176, "rt_sigpending" },
        { base + 177, "rt_sigtimedwait" },
        { base + 178, "rt_sigqueueinfo", ignoreFunc },
        { base + 179, "rt_sigsuspend" },
        { base + 180, "pread64" },
        { base + 181, "pwrite64" },
        { base + 182, "chown" },
        { base + 183, "getcwd", getcwdFunc },
        { base + 184, "capget" },
        { base + 185, "capset" },
        { base + 186, "sigaltstack" },
        { base + 187, "sendfile" },
        { base + 190, "vfork" },
        { base + 191, "getrlimit", getrlimitFunc<ArmLinux32> },
        { base + 192, "mmap2", mmapFunc<ArmLinux32> },
        { base + 193, "truncate64" },
        { base + 194, "ftruncate64", ftruncate64Func },
        { base + 195, "stat64", stat64Func<ArmLinux32> },
        { base + 196, "lstat64", lstat64Func<ArmLinux32> },
        { base + 197, "fstat64", fstat64Func<ArmLinux32> },
        { base + 198, "lchown" },
        { base + 199, "getuid", getuidFunc },
        { base + 200, "getgid", getgidFunc },
        { base + 201, "geteuid", geteuidFunc },
        { base + 202, "getegid", getegidFunc },
        { base + 203, "setreuid" },
        { base + 204, "setregid" },
        { base + 205, "getgroups" },
        { base + 206, "setgroups" },
        { base + 207, "fchown" },
        { base + 208, "setresuid" },
        { base + 209, "getresuid" },
        { base + 210, "setresgid" },
        { base + 211, "getresgid" },
        { base + 212, "chown" },
        { base + 213, "setuid" },
        { base + 214, "setgid" },
        { base + 215, "setfsuid" },
        { base + 216, "setfsgid" },
#if defined(SYS_getdents64)
        { base + 217, "getdents64", getdents64Func },
#else
        { base + 217, "getdents64" },
#endif
        { base + 218, "pivot_root" },
        { base + 219, "mincore" },
        { base + 220, "madvise", ignoreFunc },
        { base + 221, "fcntl64", fcntl64Func },
        { base + 224, "gettid", gettidFunc },
        { base + 225, "readahead" },
        { base + 226, "setxattr" },
        { base + 227, "lsetxattr" },
        { base + 228, "fsetxattr" },
        { base + 229, "getxattr" },
        { base + 230, "lgetxattr" },
        { base + 231, "fgetxattr" },
        { base + 232, "listxattr" },
        { base + 233, "llistxattr" },
        { base + 234, "flistxattr" },
        { base + 235, "removexattr" },
        { base + 236, "lremovexattr" },
        { base + 237, "fremovexattr" },
        { base + 238, "tkill" },
        { base + 239, "sendfile64" },
        { base + 240, "futex", futexFunc<ArmLinux32> },
        { base + 241, "sched_setaffinity", ignoreWarnOnceFunc },
        { base + 242, "sched_getaffinity", ignoreFunc },
        { base + 243, "io_setup" },
        { base + 244, "io_destroy" },
        { base + 245, "io_getevents" },
        { base + 246, "io_submit" },
        { base + 247, "io_cancel" },
        { base + 248, "exit_group", exitGroupFunc },
        { base + 249, "lookup_dcookie" },
        { base + 250, "epoll_create" },
        { base + 251, "epoll_ctl" },
        { base + 252, "epoll_wait" },
        { base + 253, "remap_file_pages" },
        { base + 256, "set_tid_address", setTidAddressFunc },
        { base + 257, "timer_create" },
        { base + 258, "timer_settime" },
        { base + 259, "timer_gettime" },
        { base + 260, "timer_getoverrun" },
        { base + 261, "timer_delete" },
        { base + 262, "clock_settime" },
        { base + 263, "clock_gettime", clock_gettimeFunc<ArmLinux32> },
        { base + 264, "clock_getres", clock_getresFunc<ArmLinux32> },
        { base + 265, "clock_nanosleep" },
        { base + 266, "statfs64" },
        { base + 267, "fstatfs64" },
        { base + 268, "tgkill", tgkillFunc<ArmLinux32> },
        { base + 269, "utimes" },
        { base + 270, "arm_fadvise64_64" },
        { base + 271, "pciconfig_iobase" },
        { base + 272, "pciconfig_read" },
        { base + 273, "pciconfig_write" },
        { base + 274, "mq_open" },
        { base + 275, "mq_unlink" },
        { base + 276, "mq_timedsend" },
        { base + 277, "mq_timedreceive" },
        { base + 278, "mq_notify" },
        { base + 279, "mq_getsetattr" },
        { base + 280, "waitid" },
        { base + 281, "socket" },
        { base + 282, "bind" },
        { base + 283, "connect" },
        { base + 284, "listen" },
        { base + 285, "accept" },
        { base + 286, "getsockname" },
        { base + 287, "getpeername" },
        { base + 288, "socketpair" },
        { base + 289, "send" },
        { base + 290, "sendto" },
        { base + 291, "recv" },
        { base + 292, "recvfrom" },
        { base + 293, "shutdown" },
        { base + 294, "setsockopt" },
        { base + 295, "getsockopt" },
        { base + 296, "sendmsg" },
        { base + 297, "rcvmsg" },
        { base + 298, "semop" },
        { base + 299, "semget" },
        { base + 300, "semctl" },
        { base + 301, "msgsend" },
        { base + 302, "msgrcv" },
        { base + 303, "msgget" },
        { base + 304, "msgctl" },
        { base + 305, "shmat" },
        { base + 306, "shmdt" },
        { base + 307, "shmget" },
        { base + 308, "shmctl" },
        { base + 309, "add_key" },
        { base + 310, "request_key" },
        { base + 311, "keyctl" },
        { base + 312, "semtimedop" },
        { base + 314, "ioprio_set" },
        { base + 315, "ioprio_get" },
        { base + 316, "inotify_init" },
        { base + 317, "inotify_add_watch" },
        { base + 318, "inotify_rm_watch" },
        { base + 319, "mbind" },
        { base + 320, "get_mempolicy" },
        { base + 321, "set_mempolicy" },
        { base + 322, "openat", openatFunc<ArmLinux32> },
        { base + 323, "mkdirat" },
        { base + 324, "mknodat" },
        { base + 325, "fchownat" },
        { base + 326, "futimesat" },
        { base + 327, "fstatat64" },
        { base + 328, "unlinkat" },
        { base + 329, "renameat" },
        { base + 330, "linkat" },
        { base + 331, "symlinkat" },
        { base + 332, "readlinkat" },
        { base + 333, "fchmodat" },
        { base + 334, "faccessat" },
        { base + 335, "pselect6" },
        { base + 336, "ppoll" },
        { base + 337, "unshare" },
        { base + 338, "set_robust_list", ignoreFunc },
        { base + 339, "get_robust_list" },
        { base + 340, "splice" },
        { base + 341, "arm_sync_file_range" },
        { base + 342, "tee" },
        { base + 343, "vmsplice" },
        { base + 344, "move_pages" },
        { base + 345, "getcpu", getcpuFunc },
        { base + 346, "epoll_pwait" },
        { base + 347, "sys_kexec_load" },
        { base + 348, "sys_utimensat" },
        { base + 349, "sys_signalfd" },
        { base + 350, "sys_timerfd_create" },
        { base + 351, "sys_eventfd" },
        { base + 352, "sys_fallocate" },
        { base + 353, "sys_timerfd_settime" },
        { base + 354, "sys_timerfd_gettime" },
        { base + 355, "sys_signalfd4" },
        { base + 356, "sys_eventfd2" },
        { base + 357, "sys_epoll_create1" },
        { base + 358, "sys_dup3" },
        { base + 359, "sys_pipe2" },
        { base + 360, "sys_inotify_init1" },
        { base + 361, "sys_preadv" },
        { base + 362, "sys_pwritev" },
        { base + 363, "sys_rt_tgsigqueueinfo" },
        { base + 364, "sys_perf_event_open" },
        { base + 365, "sys_recvmmsg" },
    })
    {}
};

static SyscallTable32 syscallDescs32Low(0), syscallDescs32High(0x900000);

class SyscallTable64 : public SyscallDescTable<EmuLinux::SyscallABI64>
{
  public:
    SyscallTable64(int base) : SyscallDescTable<EmuLinux::SyscallABI64>({
        {    base + 0, "io_setup" },
        {    base + 1, "io_destroy" },
        {    base + 2, "io_submit" },
        {    base + 3, "io_cancel" },
        {    base + 4, "io_getevents" },
        {    base + 5, "setxattr" },
        {    base + 6, "lsetxattr" },
        {    base + 7, "fsetxattr" },
        {    base + 8, "getxattr" },
        {    base + 9, "lgetxattr" },
        {   base + 10, "fgetxattr" },
        {   base + 11, "listxattr" },
        {   base + 12, "llistxattr" },
        {   base + 13, "flistxattr" },
        {   base + 14, "removexattr" },
        {   base + 15, "lremovexattr" },
        {   base + 16, "fremovexattr" },
        {   base + 17, "getcwd", getcwdFunc },
        {   base + 18, "lookup_dcookie" },
        {   base + 19, "eventfd2" },
        {   base + 20, "epoll_create1" },
        {   base + 21, "epoll_ctl" },
        {   base + 22, "epoll_pwait" },
        {   base + 23, "dup", dupFunc },
        {   base + 24, "dup3" },
        {   base + 25, "fcntl64", fcntl64Func },
        {   base + 26, "inotify_init1" },
        {   base + 27, "inotify_add_watch" },
        {   base + 28, "inotify_rm_watch" },
        {   base + 29, "ioctl", ioctlFunc<ArmLinux64> },
        {   base + 30, "ioprio_set" },
        {   base + 31, "ioprio_get" },
        {   base + 32, "flock" },
        {   base + 33, "mknodat" },
        {   base + 34, "mkdirat" },
        {   base + 35, "unlinkat", unlinkatFunc<ArmLinux64> },
        {   base + 36, "symlinkat" },
        {   base + 37, "linkat" },
        {   base + 38, "renameat", renameatFunc<ArmLinux64> },
        {   base + 39, "umount2" },
        {   base + 40, "mount" },
        {   base + 41, "pivot_root" },
        {   base + 42, "nfsservctl" },
        {   base + 43, "statfs64" },
        {   base + 44, "fstatfs64" },
        {   base + 45, "truncate64" },
        {   base + 46, "ftruncate64", ftruncate64Func },
        {   base + 47, "fallocate" },
        {   base + 48, "faccessat", faccessatFunc<ArmLinux64> },
        {   base + 49, "chdir" },
        {   base + 50, "fchdir" },
        {   base + 51, "chroot" },
        {   base + 52, "fchmod" },
        {   base + 53, "fchmodat" },
        {   base + 54, "fchownat" },
        {   base + 55, "fchown" },
        {   base + 56, "openat", openatFunc<ArmLinux64> },
        {   base + 57, "close", closeFunc },
        {   base + 58, "vhangup" },
        {   base + 59, "pipe2" },
        {   base + 60, "quotactl" },
#if defined(SYS_getdents64)
        {   base + 61, "getdents64", getdents64Func },
#else
        {   base + 61, "getdents64" },
#endif
        {   base + 62, "llseek", lseekFunc },
        {   base + 63, "read", readFunc<ArmLinux64> },
        {   base + 64, "write", writeFunc<ArmLinux64> },
        {   base + 65, "readv" },
        {   base + 66, "writev", writevFunc<ArmLinux64> },
        {   base + 67, "pread64" },
        {   base + 68, "pwrite64" },
        {   base + 69, "preadv" },
        {   base + 70, "pwritev" },
        {   base + 71, "sendfile64" },
        {   base + 72, "pselect6" },
        {   base + 73, "ppoll" },
        {   base + 74, "signalfd4" },
        {   base + 75, "vmsplice" },
        {   base + 76, "splice" },
        {   base + 77, "tee" },
        {   base + 78, "readlinkat", readlinkatFunc<ArmLinux64> },
        {   base + 79, "fstatat64", fstatat64Func<ArmLinux64> },
        {   base + 80, "fstat64", fstat64Func<ArmLinux64> },
        {   base + 81, "sync" },
        {   base + 82, "fsync" },
        {   base + 83, "fdatasync" },
        {   base + 84, "sync_file_range" },
        {   base + 85, "timerfd_create" },
        {   base + 86, "timerfd_settime" },
        {   base + 87, "timerfd_gettime" },
        {   base + 88, "utimensat" },
        {   base + 89, "acct" },
        {   base + 90, "capget" },
        {   base + 91, "capset" },
        {   base + 92, "personality" },
        {   base + 93, "exit", exitFunc },
        {   base + 94, "exit_group", exitGroupFunc },
        {   base + 95, "waitid" },
        {   base + 96, "set_tid_address", setTidAddressFunc },
        {   base + 97, "unshare" },
        {   base + 98, "futex", futexFunc<ArmLinux64> },
        {   base + 99, "set_robust_list", ignoreFunc },
        {  base + 100, "get_robust_list" },
        {  base + 101, "nanosleep", ignoreWarnOnceFunc },
        {  base + 102, "getitimer" },
        {  base + 103, "setitimer" },
        {  base + 104, "kexec_load" },
        {  base + 105, "init_module" },
        {  base + 106, "delete_module" },
        {  base + 107, "timer_create" },
        {  base + 108, "timer_gettime" },
        {  base + 109, "timer_getoverrun" },
        {  base + 110, "timer_settime" },
        {  base + 111, "timer_delete" },
        {  base + 112, "clock_settime" },
        {  base + 113, "clock_gettime", clock_gettimeFunc<ArmLinux64> },
        {  base + 114, "clock_getres" },
        {  base + 115, "clock_nanosleep" },
        {  base + 116, "syslog" },
        {  base + 117, "ptrace" },
        {  base + 118, "sched_setparam", ignoreWarnOnceFunc },
        {  base + 119, "sched_setscheduler", ignoreWarnOnceFunc },
        {  base + 120, "sched_getscheduler", ignoreWarnOnceFunc },
        {  base + 121, "sched_getparam", ignoreWarnOnceFunc },
        {  base + 122, "sched_setaffinity", ignoreWarnOnceFunc },
        {  base + 123, "sched_getaffinity", ignoreFunc },
        {  base + 124, "sched_yield", ignoreWarnOnceFunc },
        {  base + 125, "sched_get_priority_max", ignoreWarnOnceFunc },
        {  base + 126, "sched_get_priority_min", ignoreWarnOnceFunc },
        {  base + 127, "sched_rr_get_interval", ignoreWarnOnceFunc },
        {  base + 128, "restart_syscall" },
        {  base + 129, "kill", ignoreFunc },
        {  base + 130, "tkill" },
        {  base + 131, "tgkill", tgkillFunc<ArmLinux64> },
        {  base + 132, "sigaltstack" },
        {  base + 133, "rt_sigsuspend" },
        {  base + 134, "rt_sigaction", ignoreFunc },
        {  base + 135, "rt_sigprocmask", ignoreWarnOnceFunc },
        {  base + 136, "rt_sigpending" },
        {  base + 137, "rt_sigtimedwait" },
        {  base + 138, "rt_sigqueueinfo", ignoreFunc },
        {  base + 139, "rt_sigreturn" },
        {  base + 140, "setpriority" },
        {  base + 141, "getpriority" },
        {  base + 142, "reboot" },
        {  base + 143, "setregid" },
        {  base + 144, "setgid" },
        {  base + 145, "setreuid" },
        {  base + 146, "setuid" },
        {  base + 147, "setresuid" },
        {  base + 148, "getresuid" },
        {  base + 149, "setresgid" },
        {  base + 150, "getresgid" },
        {  base + 151, "setfsuid" },
        {  base + 152, "setfsgid" },
        {  base + 153, "times", timesFunc<ArmLinux64> },
        {  base + 154, "setpgid" },
        {  base + 155, "getpgid" },
        {  base + 156, "getsid" },
        {  base + 157, "setsid" },
        {  base + 158, "getgroups" },
        {  base + 159, "setgroups" },
        {  base + 160, "uname", unameFunc64 },
        {  base + 161, "sethostname", ignoreFunc },
        {  base + 162, "setdomainname" },
        {  base + 163, "getrlimit", getrlimitFunc<ArmLinux64> },
        {  base + 164, "setrlimit", ignoreFunc },
        {  base + 165, "getrusage", getrusageFunc<ArmLinux64> },
        {  base + 166, "umask" },
        {  base + 167, "prctl" },
        {  base + 168, "getcpu", getcpuFunc },
        {  base + 169, "gettimeofday", gettimeofdayFunc<ArmLinux64> },
        {  base + 170, "settimeofday" },
        {  base + 171, "adjtimex" },
        {  base + 172, "getpid", getpidFunc },
        {  base + 173, "getppid", getppidFunc },
        {  base + 174, "getuid", getuidFunc },
        {  base + 175, "geteuid", geteuidFunc },
        {  base + 176, "getgid", getgidFunc },
        {  base + 177, "getegid", getegidFunc },
        {  base + 178, "gettid", gettidFunc },
        {  base + 179, "sysinfo", sysinfoFunc<ArmLinux64> },
        {  base + 180, "mq_open" },
        {  base + 181, "mq_unlink" },
        {  base + 182, "mq_timedsend" },
        {  base + 183, "mq_timedreceive" },
        {  base + 184, "mq_notify" },
        {  base + 185, "mq_getsetattr" },
        {  base + 186, "msgget" },
        {  base + 187, "msgctl" },
        {  base + 188, "msgrcv" },
        {  base + 189, "msgsnd" },
        {  base + 190, "semget" },
        {  base + 191, "semctl" },
        {  base + 192, "semtimedop" },
        {  base + 193, "semop" },
        {  base + 194, "shmget" },
        {  base + 195, "shmctl" },
        {  base + 196, "shmat" },
        {  base + 197, "shmdt" },
        {  base + 198, "socket" },
        {  base + 199, "socketpair" },
        {  base + 200, "bind" },
        {  base + 201, "listen" },
        {  base + 202, "accept" },
        {  base + 203, "connect" },
        {  base + 204, "getsockname" },
        {  base + 205, "getpeername" },
        {  base + 206, "sendto" },
        {  base + 207, "recvfrom" },
        {  base + 208, "setsockopt" },
        {  base + 209, "getsockopt" },
        {  base + 210, "shutdown" },
        {  base + 211, "sendmsg" },
        {  base + 212, "recvmsg" },
        {  base + 213, "readahead" },
        {  base + 214, "brk", brkFunc },
        {  base + 215, "munmap", munmapFunc },
        {  base + 216, "mremap", mremapFunc<ArmLinux64> },
        {  base + 217, "add_key" },
        {  base + 218, "request_key" },
        {  base + 219, "keyctl" },
        {  base + 220, "clone", cloneBackwardsFunc<ArmLinux64> },
        {  base + 221, "execve", execveFunc<ArmLinux64> },
        {  base + 222, "mmap2", mmapFunc<ArmLinux64> },
        {  base + 223, "fadvise64_64" },
        {  base + 224, "swapon" },
        {  base + 225, "swapoff" },
        {  base + 226, "mprotect", ignoreFunc },
        {  base + 227, "msync" },
        {  base + 228, "mlock" },
        {  base + 229, "munlock" },
        {  base + 230, "mlockall" },
        {  base + 231, "munlockall" },
        {  base + 232, "mincore" },
        {  base + 233, "madvise", ignoreFunc },
        {  base + 234, "remap_file_pages" },
        {  base + 235, "mbind" },
        {  base + 236, "get_mempolicy" },
        {  base + 237, "set_mempolicy" },
        {  base + 238, "migrate_pages" },
        {  base + 239, "move_pages" },
        {  base + 240, "rt_tgsigqueueinfo" },
        {  base + 241, "perf_event_open" },
        {  base + 242, "accept4" },
        {  base + 243, "recvmmsg" },
        {  base + 260, "wait4" },
        {  base + 261, "prlimit64", prlimitFunc<ArmLinux64> },
        {  base + 262, "fanotify_init" },
        {  base + 263, "fanotify_mark" },
        {  base + 264, "name_to_handle_at" },
        {  base + 265, "open_by_handle_at" },
        {  base + 266, "clock_adjtime" },
        {  base + 267, "syncfs" },
        {  base + 268, "setns" },
        {  base + 269, "sendmmsg" },
        {  base + 270, "process_vm_readv" },
        {  base + 271, "process_vm_writev" },
        { base + 1024, "open", openFunc<ArmLinux64> },
        { base + 1025, "link" },
        { base + 1026, "unlink", unlinkFunc },
        { base + 1027, "mknod" },
        { base + 1028, "chmod", chmodFunc<ArmLinux64> },
        { base + 1029, "chown" },
        { base + 1030, "mkdir", mkdirFunc },
        { base + 1031, "rmdir" },
        { base + 1032, "lchown" },
        { base + 1033, "access", accessFunc },
        { base + 1034, "rename", renameFunc },
        { base + 1035, "readlink", readlinkFunc },
        { base + 1036, "symlink" },
        { base + 1037, "utimes" },
        { base + 1038, "stat64", stat64Func<ArmLinux64> },
        { base + 1039, "lstat64", lstat64Func<ArmLinux64> },
        { base + 1040, "pipe", pipePseudoFunc },
        { base + 1041, "dup2" },
        { base + 1042, "epoll_create" },
        { base + 1043, "inotify_init" },
        { base + 1044, "eventfd" },
        { base + 1045, "signalfd" },
        { base + 1046, "sendfile" },
        { base + 1047, "ftruncate", ftruncateFunc },
        { base + 1048, "truncate", truncateFunc },
        { base + 1049, "stat", statFunc<ArmLinux64> },
        { base + 1050, "lstat" },
        { base + 1051, "fstat", fstatFunc<ArmLinux64> },
        { base + 1052, "fcntl", fcntlFunc },
        { base + 1053, "fadvise64" },
        { base + 1054, "newfstatat" },
        { base + 1055, "fstatfs" },
        { base + 1056, "statfs" },
        { base + 1057, "lseek", lseekFunc },
        { base + 1058, "mmap", mmapFunc<ArmLinux64> },
        { base + 1059, "alarm" },
        { base + 1060, "getpgrp" },
        { base + 1061, "pause" },
        { base + 1062, "time", timeFunc<ArmLinux64> },
        { base + 1063, "utime" },
        { base + 1064, "creat" },
#if defined(SYS_getdents)
        { base + 1065, "getdents", getdentsFunc },
#else
        { base + 1065, "getdents" },
#endif
        { base + 1066, "futimesat" },
        { base + 1067, "select" },
        { base + 1068, "poll" },
        { base + 1069, "epoll_wait" },
        { base + 1070, "ustat" },
        { base + 1071, "vfork" },
        { base + 1072, "oldwait4" },
        { base + 1073, "recv" },
        { base + 1074, "send" },
        { base + 1075, "bdflush" },
        { base + 1076, "umount" },
        { base + 1077, "uselib" },
        { base + 1078, "_sysctl" },
        { base + 1079, "fork" }
    })
    {}
};

static SyscallTable64 syscallDescs64Low(0), syscallDescs64High(0x900000);

static SyscallDescTable<EmuLinux::SyscallABI32> privSyscallDescs32 = {
    { 0xf0001, "breakpoint" },
    { 0xf0002, "cacheflush" },
    { 0xf0003, "usr26" },
    { 0xf0004, "usr32" },
    { 0xf0005, "set_tls", setTLSFunc32 },
};

// Indices 1, 3 and 4 are unallocated.
static SyscallDescTable<EmuLinux::SyscallABI64> privSyscallDescs64 = {
    { 0x1002, "cacheflush" },
    { 0x1005, "set_tls", setTLSFunc64 }
};

void
EmuLinux::syscall(ThreadContext *tc)
{
    Process *process = tc->getProcessPtr();
    // Call the syscall function in the base Process class to update stats.
    // This will move into the base SEWorkload function at some point.
    process->Process::syscall(tc);

    SyscallDesc *desc = nullptr;
    if (dynamic_cast<ArmLinuxProcess64 *>(process)) {
        int num = tc->readIntReg(INTREG_X8);
        desc = syscallDescs64Low.get(num, false);
        if (!desc)
            desc = syscallDescs64Low.get(num, false);
        if (!desc)
            desc = privSyscallDescs64.get(num);
    } else {
        int num = tc->readIntReg(INTREG_R7);
        desc = syscallDescs32Low.get(num, false);
        if (!desc)
            desc = syscallDescs32Low.get(num, false);
        if (!desc)
            desc = privSyscallDescs32.get(num);
    }
    assert(desc);
    desc->doSyscall(tc);
}

} // namespace ArmISA
} // namespace gem5
