/*
 * 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: Nathan Binkert
 */

#include "kern/tru64/tru64_syscalls.hh"

namespace {
    const char *
    standard_strings[SystemCalls<Tru64>::StandardNumber] = {
        "syscall",                      // 0
        "exit",                         // 1
        "fork",                         // 2
        "read",                         // 3
        "write",                        // 4
        "old_open",                     // 5
        "close",                        // 6
        "wait4",                        // 7
        "old_creat",                    // 8
        "link",                         // 9

        "unlink",                       // 10
        "execv",                        // 11
        "chdir",                        // 12
        "fchdir",                       // 13
        "mknod",                        // 14
        "chmod",                        // 15
        "chown",                        // 16
        "obreak",                       // 17
        "pre_F64_getfsstat",            // 18
        "lseek",                        // 19

        "getpid",                       // 20
        "mount",                        // 21
        "unmount",                      // 22
        "setuid",                       // 23
        "getuid",                       // 24
        "exec_with_loader",             // 25
        "ptrace",                       // 26
        "recvmsg",                      // 27
        "sendmsg",                      // 28
        "recvfrom",                     // 29

        "accept",                       // 30
        "getpeername",                  // 31
        "getsockname",                  // 32
        "access",                       // 33
        "chflags",                      // 34
        "fchflags",                     // 35
        "sync",                         // 36
        "kill",                         // 37
        "old_stat",                     // 38
        "setpgid",                      // 39

        "old_lstat",                    // 40
        "dup",                          // 41
        "pipe",                         // 42
        "set_program_attributes",       // 43
        "profil",                       // 44
        "open",                         // 45
        "obsolete_osigaction",          // 46
        "getgid",                       // 47
        "sigprocmask",                  // 48
        "getlogin",                     // 49

        "setlogin",                     // 50
        "acct",                         // 51
        "sigpending",                   // 52
        "classcntl",                    // 53
        "ioctl",                        // 54
        "reboot",                       // 55
        "revoke",                       // 56
        "symlink",                      // 57
        "readlink",                     // 58
        "execve",                       // 59

        "umask",                        // 60
        "chroot",                       // 61
        "old_fstat",                    // 62
        "getpgrp",                      // 63
        "getpagesize",                  // 64
        "mremap",                       // 65
        "vfork",                        // 66
        "pre_F64_stat",                 // 67
        "pre_F64_lstat",                // 68
        "sbrk",                         // 69

        "sstk",                         // 70
        "mmap",                         // 71
        "ovadvise",                     // 72
        "munmap",                       // 73
        "mprotect",                     // 74
        "madvise",                      // 75
        "old_vhangup",                  // 76
        "kmodcall",                     // 77
        "mincore",                      // 78
        "getgroups",                    // 79

        "setgroups",                    // 80
        "old_getpgrp",                  // 81
        "setpgrp",                      // 82
        "setitimer",                    // 83
        "old_wait",                     // 84
        "table",                        // 85
        "getitimer",                    // 86
        "gethostname",                  // 87
        "sethostname",                  // 88
        "getdtablesize",                // 89

        "dup2",                         // 90
        "pre_F64_fstat",                // 91
        "fcntl",                        // 92
        "select",                       // 93
        "poll",                         // 94
        "fsync",                        // 95
        "setpriority",                  // 96
        "socket",                       // 97
        "connect",                      // 98
        "old_accept",                   // 99

        "getpriority",                  // 100
        "old_send",                     // 101
        "old_recv",                     // 102
        "sigreturn",                    // 103
        "bind",                         // 104
        "setsockopt",                   // 105
        "listen",                       // 106
        "plock",                        // 107
        "old_sigvec",                   // 108
        "old_sigblock",                 // 109

        "old_sigsetmask",               // 110
        "sigsuspend",                   // 111
        "sigstack",                     // 112
        "old_recvmsg",                  // 113
        "old_sendmsg",                  // 114
        "obsolete_vtrcae",              // 115
        "gettimeofday",                 // 116
        "getrusage",                    // 117
        "getsockopt",                   // 118
        "numa_syscalls",                // 119

        "readv",                        // 120
        "writev",                       // 121
        "settimeofday",                 // 122
        "fchown",                       // 123
        "fchmod",                       // 124
        "old_recvfrom",                 // 125
        "setreuid",                     // 126
        "setregid",                     // 127
        "rename",                       // 128
        "truncate",                     // 129

        "ftruncate",                    // 130
        "flock",                        // 131
        "setgid",                       // 132
        "sendto",                       // 133
        "shutdown",                     // 134
        "socketpair",                   // 135
        "mkdir",                        // 136
        "rmdir",                        // 137
        "utimes",                       // 138
        "obsolete_42_sigreturn",        // 139

        "adjtime",                      // 140
        "old_getpeername",              // 141
        "gethostid",                    // 142
        "sethostid",                    // 143
        "getrlimit",                    // 144
        "setrlimit",                    // 145
        "old_killpg",                   // 146
        "setsid",                       // 147
        "quotactl",                     // 148
        "oldquota",                     // 149

        "old_getsockname",              // 150
        "pread",                        // 151
        "pwrite",                       // 152
        "pid_block",                    // 153
        "pid_unblock",                  // 154
        "signal_urti",                  // 155
        "sigaction",                    // 156
        "sigwaitprim",                  // 157
        "nfssvc",                       // 158
        "getdirentries",                // 159

        "pre_F64_statfs",               // 160
        "pre_F64_fstatfs",              // 161
        0,                              // 162
        "async_daemon",                 // 163
        "getfh",                        // 164
        "getdomainname",                // 165
        "setdomainname",                // 166
        0,                              // 167
        0,                              // 168
        "exportfs",                     // 169

        0,                              // 170
        0,                              // 171
        0,                              // 172
        0,                              // 173
        0,                              // 174
        0,                              // 175
        0,                              // 176
        0,                              // 177
        0,                              // 178
        0,                              // 179

        0,                              // 180
        "alt_plock",                    // 181
        0,                              // 182
        0,                              // 183
        "getmnt",                       // 184
        0,                              // 185
        0,                              // 186
        "alt_sigpending",               // 187
        "alt_setsid",                   // 188
        0,                              // 189

        0,                              // 190
        0,                              // 191
        0,                              // 192
        0,                              // 193
        0,                              // 194
        0,                              // 195
        0,                              // 196
        0,                              // 197
        0,                              // 198
        "swapon",                       // 199

        "msgctl",                       // 200
        "msgget",                       // 201
        "msgrcv",                       // 202
        "msgsnd",                       // 203
        "semctl",                       // 204
        "semget",                       // 205
        "semop",                        // 206
        "uname",                        // 207
        "lchown",                       // 208
        "shmat",                        // 209

        "shmctl",                       // 210
        "shmdt",                        // 211
        "shmget",                       // 212
        "mvalid",                       // 213
        "getaddressconf",               // 214
        "msleep",                       // 215
        "mwakeup",                      // 216
        "msync",                        // 217
        "signal",                       // 218
        "utc_gettime",                  // 219

        "utc_adjtime",                  // 220
        0,                              // 221
        "security",                     // 222
        "kloadcall",                    // 223
        "stat",                         // 224
        "lstat",                        // 225
        "fstat",                        // 226
        "statfs",                       // 227
        "fstatfs",                      // 228
        "getfsstat",                    // 229

        "gettimeofday64",               // 230
        "settimeofday64",               // 231
        0,                              // 232
        "getpgid",                      // 233
        "getsid",                       // 234
        "sigaltstack",                  // 235
        "waitid",                       // 236
        "priocntlset",                  // 237
        "sigsendset",                   // 238
        "set_speculative",              // 239

        "msfs_syscall",                 // 240
        "sysinfo",                      // 241
        "uadmin",                       // 242
        "fuser",                        // 243
        "proplist_syscall",             // 244
        "ntp_adjtime",                  // 245
        "ntp_gettime",                  // 246
        "pathconf",                     // 247
        "fpathconf",                    // 248
        "sync2",                        // 249

        "uswitch",                      // 250
        "usleep_thread",                // 251
        "audcntl",                      // 252
        "audgen",                       // 253
        "sysfs",                        // 254
        "subsys_info",                  // 255
        "getsysinfo",                   // 256
        "setsysinfo",                   // 257
        "afs_syscall",                  // 258
        "swapctl",                      // 259

        "memcntl",                      // 260
        "fdatasync",                    // 261
        "oflock",                       // 262
        "_F64_readv",                   // 263
        "_F64_writev",                  // 264
        "cdslxlate",                    // 265
        "sendfile",                     // 266
    };

    const char *
    mach_strings[SystemCalls<Tru64>::MachNumber] = {
        0,                                      // 0
        0,                                      // 1
        0,                                      // 2
        0,                                      // 3
        0,                                      // 4
        0,                                      // 5
        0,                                      // 6
        0,                                      // 7
        0,                                      // 8
        0,                                      // 9

        "task_self",                            // 10
        "thread_reply",                         // 11
        "task_notify",                          // 12
        "thread_self",                          // 13
        0,                                      // 14
        0,                                      // 15
        0,                                      // 16
        0,                                      // 17
        0,                                      // 18
        0,                                      // 19

        "msg_send_trap",                        // 20
        "msg_receive_trap",                     // 21
        "msg_rpc_trap",                         // 22
        0,                                      // 23
        "nxm_block",                            // 24
        "nxm_unblock",                          // 25
        0,                                      // 26
        0,                                      // 27
        0,                                      // 28
        "nxm_thread_destroy",                   // 29

        "lw_wire",                              // 30
        "lw_unwire",                            // 31
        "nxm_thread_create",                    // 32
        "nxm_task_init",                        // 33
        0,                                      // 34
        "nxm_idle",                             // 35
        "nxm_wakeup_idle",                      // 36
        "nxm_set_pthid",                        // 37
        "nxm_thread_kill",                      // 38
        "nxm_thread_block",                     // 39

        "nxm_thread_wakeup",                    // 40
        "init_process",                         // 41
        "nxm_get_binding",                      // 42
        "map_fd",                               // 43
        "nxm_resched",                          // 44
        "nxm_set_cancel",                       // 45
        "nxm_set_binding",                      // 46
        "stack_create",                         // 47
        "nxm_get_state",                        // 48
        "nxm_thread_suspend",                   // 49

        "nxm_thread_resume",                    // 50
        "nxm_signal_check",                     // 51
        "htg_unix_syscall",                     // 52
        0,                                      // 53
        0,                                      // 54
        "host_self",                            // 55
        "host_priv_self",                       // 56
        0,                                      // 57
        0,                                      // 58
        "swtch_pri",                            // 59

        "swtch",                                // 60
        "thread_switch",                        // 61
        "semop_fast",                           // 62
        "nxm_pshared_init",                     // 63
        "nxm_pshared_block",                    // 64
        "nxm_pshared_unblock",                  // 65
        "nxm_pshared_destroy",                  // 66
        "nxm_swtch_pri",                        // 67
        "lw_syscall",                           // 68
        0,                                      // 69

        "mach_sctimes_0",                       // 70
        "mach_sctimes_1",                       // 71
        "mach_sctimes_2",                       // 72
        "mach_sctimes_3",                       // 73
        "mach_sctimes_4",                       // 74
        "mach_sctimes_5",                       // 75
        "mach_sctimes_6",                       // 76
        "mach_sctimes_7",                       // 77
        "mach_sctimes_8",                       // 78
        "mach_sctimes_9",                       // 79

        "mach_sctimes_10",                      // 80
        "mach_sctimes_11",                      // 81
        "mach_sctimes_port_alloc_dealloc",      // 82
    };
}

const char *
SystemCalls<Tru64>::name(int num)
{
    if (num >= Number)
        return 0;
    else if (num >= StandardNumber)
        return mach_strings[num - StandardNumber];
    else if (num >= 0)
        return standard_strings[num];
    else if (num > -MachNumber)
        return mach_strings[-num];
    else
        return 0;
}