/*
 * Copyright (c) 2003 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.
 */

#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;
}