/*
 * Copyright (c) 2003-2005 The Regents of The University of Michigan
 * All rights reserved.
 *
 * 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.
 *
 * Authors: Gabe Black
 */

#include "arch/sparc/linux/process.hh"
#include "sim/syscall_desc.hh"
#include "sim/syscall_emul.hh"

class Process;
class ThreadContext;

namespace SparcISA {

/// Target uname() handler.
static SyscallReturn
unameFunc(SyscallDesc *desc, int callnum, ThreadContext *tc)
{
    int index = 0;
    auto process = tc->getProcessPtr();
    TypedBufferArg<Linux::utsname> name(process->getSyscallArg(tc, index));

    strcpy(name->sysname, "Linux");
    strcpy(name->nodename, "sim.gem5.org");
    strcpy(name->release, process->release.c_str());
    strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003");
    strcpy(name->machine, "sparc");

    name.copyOut(tc->getVirtProxy());

    return 0;
}


SyscallReturn
getresuidFunc(SyscallDesc *desc, int num, ThreadContext *tc)
{
    const uint64_t id = htobe(100);
    int index = 0;
    auto p = tc->getProcessPtr();
    Addr ruid = p->getSyscallArg(tc, index);
    Addr euid = p->getSyscallArg(tc, index);
    Addr suid = p->getSyscallArg(tc, index);
    // Handle the EFAULT case
    // Set the ruid
    if (ruid) {
        BufferArg ruidBuff(ruid, sizeof(uint64_t));
        memcpy(ruidBuff.bufferPtr(), &id, sizeof(uint64_t));
        ruidBuff.copyOut(tc->getVirtProxy());
    }
    // Set the euid
    if (euid) {
        BufferArg euidBuff(euid, sizeof(uint64_t));
        memcpy(euidBuff.bufferPtr(), &id, sizeof(uint64_t));
        euidBuff.copyOut(tc->getVirtProxy());
    }
    // Set the suid
    if (suid) {
        BufferArg suidBuff(suid, sizeof(uint64_t));
        memcpy(suidBuff.bufferPtr(), &id, sizeof(uint64_t));
        suidBuff.copyOut(tc->getVirtProxy());
    }
    return 0;
}

SyscallDescABI<DefaultSyscallABI> SparcLinuxProcess::syscall32Descs[] = {
    /*   0 */ { "restart_syscall" },
    /*   1 */ { "exit", exitFunc }, // 32 bit
    /*   2 */ { "fork" },
    /*   3 */ { "read", readFunc<Sparc32Linux> },
    /*   4 */ { "write", writeFunc<Sparc32Linux> },
    /*   5 */ { "open", openFunc<Sparc32Linux> }, // 32 bit
    /*   6 */ { "close", closeFunc },
    /*   7 */ { "wait4" }, // 32 bit
    /*   8 */ { "creat" }, // 32 bit
    /*   9 */ { "link" },
    /*  10 */ { "unlink", unlinkFunc },
    /*  11 */ { "execv" },
    /*  12 */ { "chdir" },
    /*  13 */ { "chown", chownFunc }, // 32 bit
    /*  14 */ { "mknod" },
    /*  15 */ { "chmod" },
    /*  16 */ { "lchown" }, // 32 bit
    /*  17 */ { "brk", brkFunc },
    /*  18 */ { "perfctr" }, // 32 bit
    /*  19 */ { "lseek", lseekFunc }, // 32 bit
    /*  20 */ { "getpid", getpidFunc },
    /*  21 */ { "capget" },
    /*  22 */ { "capset" },
    /*  23 */ { "setuid", ignoreFunc }, // 32 bit
    /*  24 */ { "getuid", getuidFunc }, // 32 bit
    /*  25 */ { "time" },
    /*  26 */ { "ptrace" },
    /*  27 */ { "alarm" },
    /*  28 */ { "sigaltstack" }, // 32 bit
    /*  29 */ { "pause" }, // 32 bit
    /*  30 */ { "utime" },
    /*  31 */ { "lchown32" },
    /*  32 */ { "fchown32" },
    /*  33 */ { "access" }, // 32 bit
    /*  34 */ { "nice" }, // 32 bit
    /*  35 */ { "chown32" },
    /*  36 */ { "sync" },
    /*  37 */ { "kill" }, // 32 bit
    /*  38 */ { "stat" },
    /*  39 */ { "sendfile" }, // 32 bit
    /*  40 */ { "lstat" },
    /*  41 */ { "dup" },
    /*  42 */ { "pipe", pipePseudoFunc },
    /*  43 */ { "times", ignoreFunc },
    /*  44 */ { "getuid32" },
    /*  45 */ { "umount2" }, // 32 bit
    /*  46 */ { "setgid" }, // 32 bit
    /*  47 */ { "getgid", getgidFunc }, // 32 bit
    /*  48 */ { "signal" }, // 32 bit
    /*  49 */ { "geteuid", geteuidFunc }, // 32 bit
    /*  50 */ { "getegid", getegidFunc }, // 32 bit
    /*  51 */ { "acct" },
    /*  52 */ { "memory_ordering" },
    /*  53 */ { "getgid32" },
    /*  54 */ { "ioctl" },
    /*  55 */ { "reboot" }, // 32 bit
    /*  56 */ { "mmap2" }, // 32 bit
    /*  57 */ { "symlink" },
    /*  58 */ { "readlink", readlinkFunc }, // 32 bit
    /*  59 */ { "execve" }, // 32 bit
    /*  60 */ { "umask" }, // 32 bit
    /*  61 */ { "chroot" },
    /*  62 */ { "fstat" },
    /*  63 */ { "fstat64", fstat64Func<Sparc32Linux> },
    /*  64 */ { "getpagesize" },
    /*  65 */ { "msync" }, // 32 bit
    /*  66 */ { "vfork" },
    /*  67 */ { "pread64" }, // 32 bit
    /*  68 */ { "pwrite64" }, // 32 bit
    /*  69 */ { "geteuid32" },
    /*  70 */ { "getegid32" },
    /*  71 */ { "mmap", mmapFunc<Sparc32Linux> },
    /*  72 */ { "setreuid32" },
    /*  73 */ { "munmap", munmapFunc },
    /*  74 */ { "mprotect", ignoreFunc },
    /*  75 */ { "madvise" },
    /*  76 */ { "vhangup" },
    /*  77 */ { "truncate64" }, // 32 bit
    /*  78 */ { "mincore" },
    /*  79 */ { "getgroups" }, // 32 bit
    /*  80 */ { "setgroups" }, // 32 bit
    /*  81 */ { "getpgrp" },
    /*  82 */ { "setgroups32" }, // 32 bit
    /*  83 */ { "setitimer" }, // 32 bit
    /*  84 */ { "ftruncate64" }, // 32 bit
    /*  85 */ { "swapon" }, // 32 bit
    /*  86 */ { "getitimer" }, // 32 bit
    /*  87 */ { "setuid32" },
    /*  88 */ { "sethostname" }, // 32 bit
    /*  89 */ { "setgid32" },
    /*  90 */ { "dup2" },
    /*  91 */ { "setfsuid32" },
    /*  92 */ { "fcntl" },
    /*  93 */ { "select" }, // 32 bit
    /*  94 */ { "setfsgid32" },
    /*  95 */ { "fsync" },
    /*  96 */ { "setpriority" }, // 32 bit
    /*  97 */ { "socket" },
    /*  98 */ { "connect" },
    /*  99 */ { "accept" },
    /* 100 */ { "getpriority" }, // 32 bit
    /* 101 */ { "rt_sigreturn" }, // 32 bit
    /* 102 */ { "rt_sigaction", ignoreFunc }, // 32 bit
    /* 103 */ { "rt_sigprocmask", ignoreFunc }, // 32 bit
    /* 104 */ { "rt_sigpending" }, // 32 bit
    /* 105 */ { "rt_sigtimedwait" },
    /* 106 */ { "rt_sigqueueinfo" }, // 32 bit
    /* 107 */ { "rt_sigsuspend" },
    /* 108 */ { "setresuid32" },
    /* 109 */ { "getresuid32", getresuidFunc },
    /* 110 */ { "setresgid32", ignoreFunc },
    /* 111 */ { "getresgid32" },
    /* 112 */ { "setregid32" },
    /* 113 */ { "revcmsg" },
    /* 114 */ { "sendmsg" },
    /* 115 */ { "getgroups32" }, // 32 bit
    /* 116 */ { "gettimeofday", gettimeofdayFunc<Sparc32Linux> }, // 32 bit
    /* 117 */ { "getrusage" }, // 32 bit
    /* 118 */ { "getsockopt" },
    /* 119 */ { "getcwd", getcwdFunc },
    /* 120 */ { "readv" },
    /* 121 */ { "writev" },
    /* 122 */ { "settimeofday" }, // 32 bit
    /* 123 */ { "fchown" }, // 32 bit
    /* 124 */ { "fchmod" },
    /* 125 */ { "recvfrom" },
    /* 126 */ { "setreuid" }, // 32 bit
    /* 127 */ { "setregid" }, // 32 bit
    /* 128 */ { "rename", renameFunc },
    /* 129 */ { "truncate" },
    /* 130 */ { "ftruncate" },
    /* 131 */ { "flock" },
    /* 132 */ { "lstat64" },
    /* 133 */ { "sendto" },
    /* 134 */ { "shutdown" },
    /* 135 */ { "socketpair" },
    /* 136 */ { "mkdir", mkdirFunc }, // 32 bit
    /* 137 */ { "rmdir" },
    /* 138 */ { "utimes" }, // 32 bit
    /* 139 */ { "stat64" },
    /* 140 */ { "sendfile64" }, // 32 bit
    /* 141 */ { "getpeername" },
    /* 142 */ { "futex" }, // 32 bit
    /* 143 */ { "gettid" },
    /* 144 */ { "getrlimit" },
    /* 145 */ { "setrlimit" },
    /* 146 */ { "pivot_root" },
    /* 147 */ { "prctl" }, // 32 bit
    /* 148 */ { "pciconfig_read" },
    /* 149 */ { "pciconfig_write" },
    /* 150 */ { "getsockname" },
    /* 151 */ { "inotify_init" },
    /* 152 */ { "inotify_add_watch" },
    /* 153 */ { "poll" },
    /* 154 */ { "getdents64" },
    /* 155 */ { "fcntl64" },
    /* 156 */ { "inotify_rm_watch" },
    /* 157 */ { "statfs" },
    /* 158 */ { "fstatfs" },
    /* 159 */ { "umount" },
    /* 160 */ { "sched_setaffinity" },
    /* 161 */ { "sched_getaffinity" },
    /* 162 */ { "getdomainname" }, // 32 bit
    /* 163 */ { "setdomainname" }, // 32 bit
    /* 164 */ { "ni_syscall" },
    /* 165 */ { "quotactl" },
    /* 166 */ { "set_tid_address" },
    /* 167 */ { "mount" },
    /* 168 */ { "ustat" },
    /* 169 */ { "setxattr" }, // 32 bit
    /* 170 */ { "lsetxattr" }, // 32 bit
    /* 171 */ { "fsetxattr" }, // 32 bit
    /* 172 */ { "getxattr" },
    /* 173 */ { "lgetxattr" },
    /* 174 */ { "getdents" },
    /* 175 */ { "setsid" },
    /* 176 */ { "fchdir" },
    /* 177 */ { "fgetxattr" }, // 32 bit
    /* 178 */ { "listxattr" },
    /* 179 */ { "llistxattr" },
    /* 180 */ { "flistxattr" }, // 32 bit
    /* 181 */ { "removexattr" },
    /* 182 */ { "lremovexattr" },
    /* 183 */ { "sigpending" },
    /* 184 */ { "query_module" },
    /* 185 */ { "setpgid" }, // 32 bit
    /* 186 */ { "fremovexattr" }, // 32 bit
    /* 187 */ { "tkill" }, // 32 bit
    /* 188 */ { "exit_group", exitGroupFunc }, // 32 bit
    /* 189 */ { "uname", unameFunc },
    /* 190 */ { "init_module" }, // 32 bit
    /* 191 */ { "personality" },
    /* 192 */ { "remap_file_pages" },
    /* 193 */ { "epoll_create" }, // 32 bit
    /* 194 */ { "epoll_ctl" }, // 32 bit
    /* 195 */ { "epoll_wait" }, // 32 bit
    /* 196 */ { "ioprio_set" }, // 32 bit
    /* 197 */ { "getppid", getppidFunc },
    /* 198 */ { "sigaction" }, // 32 bit
    /* 199 */ { "sgetmask" },
    /* 200 */ { "ssetmask" },
    /* 201 */ { "sigsuspend" },
    /* 202 */ { "oldlstat" },
    /* 203 */ { "uselib" },
    /* 204 */ { "readdir" },
    /* 205 */ { "readahead" }, // 32 bit
    /* 206 */ { "socketcall" }, // 32 bit
    /* 207 */ { "syslog" }, // 32 bit
    /* 208 */ { "lookup_dcookie" }, // 32 bit
    /* 209 */ { "fadvise64" }, // 32 bit
    /* 210 */ { "fadvise64_64" }, // 32 bit
    /* 211 */ { "tgkill" }, // 32 bit
    /* 212 */ { "waitpid" }, // 32 bit
    /* 213 */ { "swapoff" },
    /* 214 */ { "sysinfo", sysinfoFunc<Sparc32Linux> }, // 32 bit
    /* 215 */ { "ipc" }, // 32 bit
    /* 216 */ { "sigreturn" }, // 32 bit
    /* 217 */ { "clone", cloneFunc<Sparc32Linux> },
    /* 218 */ { "ioprio_get" }, // 32 bit
    /* 219 */ { "adjtimex" }, // 32 bit
    /* 220 */ { "sigprocmask" }, // 32 bit
    /* 221 */ { "create_module" },
    /* 222 */ { "delete_module" }, // 32 bit
    /* 223 */ { "get_kernel_syms" },
    /* 224 */ { "getpgid" }, // 32 bit
    /* 225 */ { "bdflush" }, // 32 bit
    /* 226 */ { "sysfs" }, // 32 bit
    /* 227 */ { "afs_syscall" },
    /* 228 */ { "setfsuid" }, // 32 bit
    /* 229 */ { "setfsgid" }, // 32 bit
    /* 230 */ { "_newselect" }, // 32 bit
    /* 231 */ { "time", ignoreFunc },
    /* 232 */ { "oldstat" },
    /* 233 */ { "stime" },
    /* 234 */ { "statfs64" },
    /* 235 */ { "fstatfs64" },
    /* 236 */ { "_llseek", _llseekFunc },
    /* 237 */ { "mlock" },
    /* 238 */ { "munlock" },
    /* 239 */ { "mlockall" }, // 32 bit
    /* 240 */ { "munlockall" },
    /* 241 */ { "sched_setparam" }, // 32 bit
    /* 242 */ { "sched_getparam" }, // 32 bit
    /* 243 */ { "sched_setscheduler" }, // 32 bit
    /* 244 */ { "sched_getscheduler" }, // 32 bit
    /* 245 */ { "sched_yield" },
    /* 246 */ { "sched_get_priority_max" }, // 32 bit
    /* 247 */ { "sched_get_priority_min" }, // 32 bit
    /* 248 */ { "sched_rr_get_interval" }, // 32 bit
    /* 249 */ { "nanosleep" },
    /* 250 */ { "mremap", mremapFunc<Sparc32Linux> }, // 32 bit
    /* 251 */ { "_sysctl" }, // 32 bit
    /* 252 */ { "getsid" }, // 32 bit
    /* 253 */ { "fdatasync" },
    /* 254 */ { "nfsservctl" }, // 32 bit
    /* 255 */ { "aplib" },
    /* 256 */ { "clock_settime" },
    /* 257 */ { "clock_gettime" },
    /* 258 */ { "clock_getres" },
    /* 259 */ { "clock_nanosleep" }, // 32 bit
    /* 260 */ { "sched_getaffinity" },
    /* 261 */ { "sched_setaffinity" },
    /* 262 */ { "timer_settime" }, // 32 bit
    /* 263 */ { "timer_gettime" },
    /* 264 */ { "timer_getoverrun" },
    /* 265 */ { "timer_delete" },
    /* 266 */ { "timer_create" },
    /* 267 */ { "vserver" },
    /* 268 */ { "io_setup" },
    /* 269 */ { "io_destroy" },
    /* 270 */ { "io_submit" }, // 32 bit
    /* 271 */ { "io_cancel" },
    /* 272 */ { "io_getevents" },
    /* 273 */ { "mq_open" }, // 32 bit
    /* 274 */ { "mq_unlink" },
    /* 275 */ { "mq_timedsend" },
    /* 276 */ { "mq_timedreceive" },
    /* 277 */ { "mq_notify" },
    /* 278 */ { "mq_getsetattr" },
    /* 279 */ { "waitid" },
    /* 280 */ { "sys_setaltroot" },
    /* 281 */ { "add_key" },
    /* 282 */ { "request_key" },
    /* 283 */ { "keyctl" },
    /* 284 */ { "openat" },
    /* 285 */ { "mkdirat" },
    /* 286 */ { "mknodat" },
    /* 287 */ { "fchownat" },
    /* 288 */ { "futimesat" },
    /* 289 */ { "fstatat64" },
    /* 290 */ { "unlinkat" },
    /* 291 */ { "renameat" },
    /* 292 */ { "linkat" },
    /* 293 */ { "symlinkat" },
    /* 294 */ { "readlinkat" },
    /* 295 */ { "fchmodat" },
    /* 296 */ { "faccessat" },
    /* 297 */ { "pselect6" },
    /* 298 */ { "ppoll" },
    /* 299 */ { "unshare" }
};

const int SparcLinuxProcess::Num_Syscall32_Descs =
    sizeof(SparcLinuxProcess::syscall32Descs) / sizeof(SyscallDesc);

SyscallDescABI<DefaultSyscallABI> SparcLinuxProcess::syscallDescs[] = {
    /*  0 */ { "restart_syscall" },
    /*  1 */ { "exit", exitFunc },
    /*  2 */ { "fork" },
    /*  3 */ { "read", readFunc<SparcLinux> },
    /*  4 */ { "write", writeFunc<SparcLinux> },
    /*  5 */ { "open", openFunc<SparcLinux> },
    /*  6 */ { "close", closeFunc },
    /*  7 */ { "wait4" },
    /*  8 */ { "creat" },
    /*  9 */ { "link" },
    /* 10 */ { "unlink", unlinkFunc },
    /* 11 */ { "execv" },
    /* 12 */ { "chdir" },
    /* 13 */ { "chown", chownFunc },
    /* 14 */ { "mknod" },
    /* 15 */ { "chmod", chmodFunc<Linux> },
    /* 16 */ { "lchown" },
    /* 17 */ { "brk", brkFunc },
    /* 18 */ { "perfctr" },
    /* 19 */ { "lseek", lseekFunc },
    /* 20 */ { "getpid", getpidFunc },
    /* 21 */ { "capget" },
    /* 22 */ { "capset" },
    /* 23 */ { "setuid", ignoreFunc },
    /* 24 */ { "getuid", getuidFunc },
    /* 25 */ { "time" },
    /* 26 */ { "ptrace" },
    /* 27 */ { "alarm" },
    /* 28 */ { "sigaltstack" },
    /* 29 */ { "pause" },
    /* 30 */ { "utime" },
    /* 31 */ { "lchown32" },
    /* 32 */ { "fchown32" },
    /* 33 */ { "access" },
    /* 34 */ { "nice" },
    /* 35 */ { "chown32" },
    /* 36 */ { "sync" },
    /* 37 */ { "kill" },
    /* 38 */ { "stat" },
    /* 39 */ { "sendfile" },
    /* 40 */ { "lstat" },
    /* 41 */ { "dup" },
    /* 42 */ { "pipe", pipePseudoFunc },
    /* 43 */ { "times", ignoreFunc },
    /* 44 */ { "getuid32" },
    /* 45 */ { "umount2" },
    /* 46 */ { "setgid" },
    /* 47 */ { "getgid", getgidFunc },
    /* 48 */ { "signal" },
    /* 49 */ { "geteuid", geteuidFunc },
    /* 50 */ { "getegid", getegidFunc },
    /* 51 */ { "acct" },
    /* 52 */ { "memory_ordering" },
    /* 53 */ { "getgid32" },
    /* 54 */ { "ioctl" },
    /* 55 */ { "reboot" },
    /* 56 */ { "mmap2" },
    /* 57 */ { "symlink" },
    /* 58 */ { "readlink", readlinkFunc },
    /* 59 */ { "execve" },
    /* 60 */ { "umask" },
    /* 61 */ { "chroot" },
    /* 62 */ { "fstat", fstatFunc<SparcLinux> },
    /* 63 */ { "fstat64" },
    /* 64 */ { "getpagesize" },
    /* 65 */ { "msync" },
    /* 66 */ { "vfork" },
    /* 67 */ { "pread64" },
    /* 68 */ { "pwrite64" },
    /* 69 */ { "geteuid32" },
    /* 70 */ { "getegid32" },
    /* 71 */ { "mmap", mmapFunc<SparcLinux> },
    /* 72 */ { "setreuid32" },
    /* 73 */ { "munmap", munmapFunc },
    /* 74 */ { "mprotect", ignoreFunc },
    /* 75 */ { "madvise" },
    /* 76 */ { "vhangup" },
    /* 77 */ { "truncate64" },
    /* 78 */ { "mincore" },
    /* 79 */ { "getgroups" },
    /* 80 */ { "setgroups" },
    /* 81 */ { "getpgrp" },
    /* 82 */ { "setgroups32" },
    /* 83 */ { "setitimer" },
    /* 84 */ { "ftruncate64" },
    /* 85 */ { "swapon" },
    /* 86 */ { "getitimer" },
    /* 87 */ { "setuid32" },
    /* 88 */ { "sethostname" },
    /* 89 */ { "setgid32" },
    /* 90 */ { "dup2" },
    /* 91 */ { "setfsuid32" },
    /* 92 */ { "fcntl" },
    /* 93 */ { "select" },
    /* 94 */ { "setfsgid32" },
    /* 95 */ { "fsync" },
    /* 96 */ { "setpriority" },
    /* 97 */ { "socket" },
    /* 98 */ { "connect" },
    /* 99 */ { "accept" },
    /* 100 */ { "getpriority" },
    /* 101 */ { "rt_sigreturn" },
    /* 102 */ { "rt_sigaction", ignoreFunc },
    /* 103 */ { "rt_sigprocmask", ignoreFunc },
    /* 104 */ { "rt_sigpending" },
    /* 105 */ { "rt_sigtimedwait" },
    /* 106 */ { "rt_sigqueueinfo" },
    /* 107 */ { "rt_sigsuspend" },
    /* 108 */ { "setresuid" },
    /* 109 */ { "getresuid", getresuidFunc },
    /* 110 */ { "setresgid", ignoreFunc },
    /* 111 */ { "getresgid" },
    /* 112 */ { "setregid32" },
    /* 113 */ { "recvmsg" },
    /* 114 */ { "sendmsg" },
    /* 115 */ { "getgroups32" },
    /* 116 */ { "gettimeofday", gettimeofdayFunc<SparcLinux> },
    /* 117 */ { "getrusage" },
    /* 118 */ { "getsockopt" },
    /* 119 */ { "getcwd" },
    /* 120 */ { "readv" },
    /* 121 */ { "writev" },
    /* 122 */ { "settimeofday" },
    /* 123 */ { "fchown" },
    /* 124 */ { "fchmod" },
    /* 125 */ { "recvfrom" },
    /* 126 */ { "setreuid" },
    /* 127 */ { "setregid" },
    /* 128 */ { "rename", renameFunc },
    /* 129 */ { "truncate" },
    /* 130 */ { "ftruncate" },
    /* 131 */ { "flock" },
    /* 132 */ { "lstat64" },
    /* 133 */ { "sendto" },
    /* 134 */ { "shutdown" },
    /* 135 */ { "socketpair" },
    /* 136 */ { "mkdir", mkdirFunc },
    /* 137 */ { "rmdir" },
    /* 138 */ { "utimes" },
    /* 139 */ { "stat64" },
    /* 140 */ { "sendfile64" },
    /* 141 */ { "getpeername" },
    /* 142 */ { "futex" },
    /* 143 */ { "gettid" },
    /* 144 */ { "getrlimit" },
    /* 145 */ { "setrlimit" },
    /* 146 */ { "pivot_root" },
    /* 147 */ { "prctl" },
    /* 148 */ { "pciconfig_read" },
    /* 149 */ { "pciconfig_write" },
    /* 150 */ { "getsockname" },
    /* 151 */ { "inotify_init" },
    /* 152 */ { "inotify_add_watch" },
    /* 153 */ { "poll" },
    /* 154 */ { "getdents64" },
    /* 155 */ { "fcntl64" },
    /* 156 */ { "inotify_rm_watch" },
    /* 157 */ { "statfs" },
    /* 158 */ { "fstatfs" },
    /* 159 */ { "umount" },
    /* 160 */ { "sched_set_affinity" },
    /* 161 */ { "sched_get_affinity" },
    /* 162 */ { "getdomainname" },
    /* 163 */ { "setdomainname" },
    /* 164 */ { "utrap_install" },
    /* 165 */ { "quotactl" },
    /* 166 */ { "set_tid_address" },
    /* 167 */ { "mount" },
    /* 168 */ { "ustat" },
    /* 169 */ { "setxattr" },
    /* 170 */ { "lsetxattr" },
    /* 171 */ { "fsetxattr" },
    /* 172 */ { "getxattr" },
    /* 173 */ { "lgetxattr" },
    /* 174 */ { "getdents" },
    /* 175 */ { "setsid" },
    /* 176 */ { "fchdir" },
    /* 177 */ { "fgetxattr" },
    /* 178 */ { "listxattr" },
    /* 179 */ { "llistxattr" },
    /* 180 */ { "flistxattr" },
    /* 181 */ { "removexattr" },
    /* 182 */ { "lremovexattr" },
    /* 183 */ { "sigpending" },
    /* 184 */ { "query_module" },
    /* 185 */ { "setpgid" },
    /* 186 */ { "fremovexattr" },
    /* 187 */ { "tkill" },
    /* 188 */ { "exit_group", exitGroupFunc },
    /* 189 */ { "uname", unameFunc },
    /* 190 */ { "init_module" },
    /* 191 */ { "personality" },
    /* 192 */ { "remap_file_pages" },
    /* 193 */ { "epoll_create" },
    /* 194 */ { "epoll_ctl" },
    /* 195 */ { "epoll_wait" },
    /* 196 */ { "ioprio_set" },
    /* 197 */ { "getppid", getppidFunc },
    /* 198 */ { "sigaction", ignoreFunc },
    /* 199 */ { "sgetmask" },
    /* 200 */ { "ssetmask" },
    /* 201 */ { "sigsuspend" },
    /* 202 */ { "oldlstat" },
    /* 203 */ { "uselib" },
    /* 204 */ { "readdir" },
    /* 205 */ { "readahead" },
    /* 206 */ { "socketcall" },
    /* 207 */ { "syslog" },
    /* 208 */ { "lookup_dcookie" },
    /* 209 */ { "fadvise64" },
    /* 210 */ { "fadvise64_64" },
    /* 211 */ { "tgkill" },
    /* 212 */ { "waitpid" },
    /* 213 */ { "swapoff" },
    /* 214 */ { "sysinfo", sysinfoFunc<SparcLinux> },
    /* 215 */ { "ipc" },
    /* 216 */ { "sigreturn" },
    /* 217 */ { "clone", cloneFunc<SparcLinux> },
    /* 218 */ { "ioprio_get" },
    /* 219 */ { "adjtimex" },
    /* 220 */ { "sigprocmask" },
    /* 221 */ { "create_module" },
    /* 222 */ { "delete_module" },
    /* 223 */ { "get_kernel_syms" },
    /* 224 */ { "getpgid" },
    /* 225 */ { "bdflush" },
    /* 226 */ { "sysfs" },
    /* 227 */ { "afs_syscall" },
    /* 228 */ { "setfsuid" },
    /* 229 */ { "setfsgid" },
    /* 230 */ { "_newselect" },
    /* 231 */ { "time", ignoreFunc },
    /* 232 */ { "oldstat" },
    /* 233 */ { "stime" },
    /* 234 */ { "statfs64" },
    /* 235 */ { "fstatfs64" },
    /* 236 */ { "_llseek", _llseekFunc },
    /* 237 */ { "mlock" },
    /* 238 */ { "munlock" },
    /* 239 */ { "mlockall" },
    /* 240 */ { "munlockall" },
    /* 241 */ { "sched_setparam" },
    /* 242 */ { "sched_getparam" },
    /* 243 */ { "sched_setscheduler" },
    /* 244 */ { "sched_getscheduler" },
    /* 245 */ { "sched_yield" },
    /* 246 */ { "sched_get_priority_max" },
    /* 247 */ { "sched_get_priority_min" },
    /* 248 */ { "sched_rr_get_interval" },
    /* 249 */ { "nanosleep" },
    /* 250 */ { "mremap", mremapFunc<SparcLinux> },
    /* 251 */ { "_sysctl" },
    /* 252 */ { "getsid" },
    /* 253 */ { "fdatasync" },
    /* 254 */ { "nfsservctl" },
    /* 255 */ { "aplib" },
    /* 256 */ { "clock_settime" },
    /* 257 */ { "clock_gettime" },
    /* 258 */ { "clock_getres" },
    /* 259 */ { "clock_nanosleep" },
    /* 260 */ { "sched_getaffinity" },
    /* 261 */ { "sched_setaffinity" },
    /* 262 */ { "timer_settime" },
    /* 263 */ { "timer_gettime" },
    /* 264 */ { "timer_getoverrun" },
    /* 265 */ { "timer_delete" },
    /* 266 */ { "timer_create" },
    /* 267 */ { "vserver" },
    /* 268 */ { "io_setup" },
    /* 269 */ { "io_destroy" },
    /* 270 */ { "io_submit" },
    /* 271 */ { "io_cancel" },
    /* 272 */ { "io_getevents" },
    /* 273 */ { "mq_open" },
    /* 274 */ { "mq_unlink" },
    /* 275 */ { "mq_timedsend" },
    /* 276 */ { "mq_timedreceive" },
    /* 277 */ { "mq_notify" },
    /* 278 */ { "mq_getsetattr" },
    /* 279 */ { "waitid" },
    /* 280 */ { "sys_setaltroot" },
    /* 281 */ { "add_key" },
    /* 282 */ { "request_key" },
    /* 283 */ { "keyctl" }
};

const int SparcLinuxProcess::Num_Syscall_Descs =
    sizeof(SparcLinuxProcess::syscallDescs) / sizeof(SyscallDesc);

} // namespace SparcISA
