1 /*
   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 
  22 /*
  23  * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
  24  * Copyright (c) 2015, Joyent, Inc.  All rights reserved.
  25  * Copyright 2020 Oxide Computer Company
  26  */
  27 
  28 /*      Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T     */
  29 /*        All Rights Reserved   */
  30 
  31 /* Copyright (c) 2013, OmniTI Computer Consulting, Inc. All rights reserved. */
  32 
  33 /*
  34  * Copyright (c) 2014, Joyent, Inc. All rights reserved.
  35  */
  36 #include <stdio.h>
  37 #include <stdlib.h>
  38 #include <fcntl.h>
  39 #include <unistd.h>
  40 #include <string.h>
  41 #include <signal.h>
  42 #include <sys/types.h>
  43 #include <libproc.h>
  44 #include <sys/aio.h>
  45 #include <sys/port_impl.h>
  46 #include "ramdata.h"
  47 #include "systable.h"
  48 #include "print.h"
  49 #include "proto.h"
  50 
  51 /*
  52  * Tables of information about system calls - read-only data.
  53  */
  54 
  55 const   char *const     errcode[] = {   /* error code names */
  56         NULL,           /*  0 */
  57         "EPERM",        /*  1 */
  58         "ENOENT",       /*  2 */
  59         "ESRCH",        /*  3 */
  60         "EINTR",        /*  4 */
  61         "EIO",          /*  5 */
  62         "ENXIO",        /*  6 */
  63         "E2BIG",        /*  7 */
  64         "ENOEXEC",      /*  8 */
  65         "EBADF",        /*  9 */
  66         "ECHILD",       /* 10 */
  67         "EAGAIN",       /* 11 */
  68         "ENOMEM",       /* 12 */
  69         "EACCES",       /* 13 */
  70         "EFAULT",       /* 14 */
  71         "ENOTBLK",      /* 15 */
  72         "EBUSY",        /* 16 */
  73         "EEXIST",       /* 17 */
  74         "EXDEV",        /* 18 */
  75         "ENODEV",       /* 19 */
  76         "ENOTDIR",      /* 20 */
  77         "EISDIR",       /* 21 */
  78         "EINVAL",       /* 22 */
  79         "ENFILE",       /* 23 */
  80         "EMFILE",       /* 24 */
  81         "ENOTTY",       /* 25 */
  82         "ETXTBSY",      /* 26 */
  83         "EFBIG",        /* 27 */
  84         "ENOSPC",       /* 28 */
  85         "ESPIPE",       /* 29 */
  86         "EROFS",        /* 30 */
  87         "EMLINK",       /* 31 */
  88         "EPIPE",        /* 32 */
  89         "EDOM",         /* 33 */
  90         "ERANGE",       /* 34 */
  91         "ENOMSG",       /* 35 */
  92         "EIDRM",        /* 36 */
  93         "ECHRNG",       /* 37 */
  94         "EL2NSYNC",     /* 38 */
  95         "EL3HLT",       /* 39 */
  96         "EL3RST",       /* 40 */
  97         "ELNRNG",       /* 41 */
  98         "EUNATCH",      /* 42 */
  99         "ENOCSI",       /* 43 */
 100         "EL2HLT",       /* 44 */
 101         "EDEADLK",      /* 45 */
 102         "ENOLCK",       /* 46 */
 103         "ECANCELED",    /* 47 */
 104         "ENOTSUP",      /* 48 */
 105         "EDQUOT",       /* 49 */
 106         "EBADE",        /* 50 */
 107         "EBADR",        /* 51 */
 108         "EXFULL",       /* 52 */
 109         "ENOANO",       /* 53 */
 110         "EBADRQC",      /* 54 */
 111         "EBADSLT",      /* 55 */
 112         "EDEADLOCK",    /* 56 */
 113         "EBFONT",       /* 57 */
 114         "EOWNERDEAD",   /* 58 */
 115         "ENOTRECOVERABLE",      /* 59 */
 116         "ENOSTR",       /* 60 */
 117         "ENODATA",      /* 61 */
 118         "ETIME",        /* 62 */
 119         "ENOSR",        /* 63 */
 120         "ENONET",       /* 64 */
 121         "ENOPKG",       /* 65 */
 122         "EREMOTE",      /* 66 */
 123         "ENOLINK",      /* 67 */
 124         "EADV",         /* 68 */
 125         "ESRMNT",       /* 69 */
 126         "ECOMM",        /* 70 */
 127         "EPROTO",       /* 71 */
 128         "ELOCKUNMAPPED",        /* 72 */
 129         "ENOTACTIVE",   /* 73 */
 130         "EMULTIHOP",    /* 74 */
 131         NULL,           /* 75 */
 132         NULL,           /* 76 */
 133         "EBADMSG",      /* 77 */
 134         "ENAMETOOLONG", /* 78 */
 135         "EOVERFLOW",    /* 79 */
 136         "ENOTUNIQ",     /* 80 */
 137         "EBADFD",       /* 81 */
 138         "EREMCHG",      /* 82 */
 139         "ELIBACC",      /* 83 */
 140         "ELIBBAD",      /* 84 */
 141         "ELIBSCN",      /* 85 */
 142         "ELIBMAX",      /* 86 */
 143         "ELIBEXEC",     /* 87 */
 144         "EILSEQ",       /* 88 */
 145         "ENOSYS",       /* 89 */
 146         "ELOOP",        /* 90 */
 147         "ERESTART",     /* 91 */
 148         "ESTRPIPE",     /* 92 */
 149         "ENOTEMPTY",    /* 93 */
 150         "EUSERS",       /* 94 */
 151         "ENOTSOCK",     /* 95 */
 152         "EDESTADDRREQ", /* 96 */
 153         "EMSGSIZE",     /* 97 */
 154         "EPROTOTYPE",   /* 98 */
 155         "ENOPROTOOPT",  /* 99 */
 156         NULL,           /* 100 */
 157         NULL,           /* 101 */
 158         NULL,           /* 102 */
 159         NULL,           /* 103 */
 160         NULL,           /* 104 */
 161         NULL,           /* 105 */
 162         NULL,           /* 106 */
 163         NULL,           /* 107 */
 164         NULL,           /* 108 */
 165         NULL,           /* 109 */
 166         NULL,           /* 110 */
 167         NULL,           /* 111 */
 168         NULL,           /* 112 */
 169         NULL,           /* 113 */
 170         NULL,           /* 114 */
 171         NULL,           /* 115 */
 172         NULL,           /* 116 */
 173         NULL,           /* 117 */
 174         NULL,           /* 118 */
 175         NULL,           /* 119 */
 176         "EPROTONOSUPPORT",      /* 120 */
 177         "ESOCKTNOSUPPORT",      /* 121 */
 178         "EOPNOTSUPP",   /* 122 */
 179         "EPFNOSUPPORT", /* 123 */
 180         "EAFNOSUPPORT", /* 124 */
 181         "EADDRINUSE",   /* 125 */
 182         "EADDRNOTAVAIL", /* 126 */
 183         "ENETDOWN",     /* 127 */
 184         "ENETUNREACH",  /* 128 */
 185         "ENETRESET",    /* 129 */
 186         "ECONNABORTED", /* 130 */
 187         "ECONNRESET",   /* 131 */
 188         "ENOBUFS",      /* 132 */
 189         "EISCONN",      /* 133 */
 190         "ENOTCONN",     /* 134 */
 191         NULL,           /* 135 */
 192         NULL,           /* 136 */
 193         NULL,           /* 137 */
 194         NULL,           /* 138 */
 195         NULL,           /* 139 */
 196         NULL,           /* 140 */
 197         NULL,           /* 141 */
 198         NULL,           /* 142 */
 199         "ESHUTDOWN",    /* 143 */
 200         "ETOOMANYREFS", /* 144 */
 201         "ETIMEDOUT",    /* 145 */
 202         "ECONNREFUSED", /* 146 */
 203         "EHOSTDOWN",    /* 147 */
 204         "EHOSTUNREACH", /* 148 */
 205         "EALREADY",     /* 149 */
 206         "EINPROGRESS",  /* 150 */
 207         "ESTALE"        /* 151 */
 208 };
 209 
 210 #define NERRCODE        (sizeof (errcode) / sizeof (char *))
 211 
 212 
 213 const char *
 214 errname(int err)        /* return the error code name (NULL if none) */
 215 {
 216         const char *ename = NULL;
 217 
 218         if (err >= 0 && err < NERRCODE)
 219                 ename = errcode[err];
 220 
 221         return (ename);
 222 }
 223 
 224 
 225 const struct systable systable[] = {
 226 { NULL,         8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
 227 {"_exit",       1, DEC, NOV, DEC},                              /*   1 */
 228 {"psecflags",   3, DEC, NOV, HEX, PSFW, PSDLT},                 /*   2 */
 229 {"read",        3, DEC, NOV, DEC, IOB, UNS},                    /*   3 */
 230 {"write",       3, DEC, NOV, DEC, IOB, UNS},                    /*   4 */
 231 {"open",        3, DEC, NOV, STG, OPN, OCT},                    /*   5 */
 232 {"close",       1, DEC, NOV, DEC},                              /*   6 */
 233 {"linkat",      5, DEC, NOV, ATC, STG, ATC, STG, SNF},          /*   7 */
 234 { NULL,         8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
 235 {"link",        2, DEC, NOV, STG, STG},                         /*   9 */
 236 {"unlink",      1, DEC, NOV, STG},                              /*  10 */
 237 {"symlinkat",   3, DEC, NOV, STG, ATC, STG},                    /*  11 */
 238 {"chdir",       1, DEC, NOV, STG},                              /*  12 */
 239 {"time",        0, DEC, NOV},                                   /*  13 */
 240 {"mknod",       3, DEC, NOV, STG, OCT, HEX},                    /*  14 */
 241 {"chmod",       2, DEC, NOV, STG, OCT},                         /*  15 */
 242 {"chown",       3, DEC, NOV, STG, DEC, DEC},                    /*  16 */
 243 {"brk",         1, DEC, NOV, HEX},                              /*  17 */
 244 {"stat",        2, DEC, NOV, STG, HEX},                         /*  18 */
 245 {"lseek",       3, DEC, NOV, DEC, DEX, WHN},                    /*  19 */
 246 {"getpid",      0, DEC, DEC},                                   /*  20 */
 247 {"mount",       8, DEC, NOV, STG, STG, MTF, MFT, HEX, DEC, HEX, DEC}, /* 21 */
 248 {"readlinkat",  4, DEC, NOV, ATC, STG, RLK, UNS},               /*  22 */
 249 {"setuid",      1, DEC, NOV, UNS},                              /*  23 */
 250 {"getuid",      0, UNS, UNS},                                   /*  24 */
 251 {"stime",       1, DEC, NOV, DEC},                              /*  25 */
 252 {"pcsample",    2, DEC, NOV, HEX, DEC},                         /*  26 */
 253 {"alarm",       1, DEC, NOV, UNS},                              /*  27 */
 254 {"fstat",       2, DEC, NOV, DEC, HEX},                         /*  28 */
 255 {"pause",       0, DEC, NOV},                                   /*  29 */
 256 { NULL,         8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
 257 {"stty",        2, DEC, NOV, DEC, DEC},                         /*  31 */
 258 {"gtty",        2, DEC, NOV, DEC, DEC},                         /*  32 */
 259 {"access",      2, DEC, NOV, STG, ACC},                         /*  33 */
 260 {"nice",        1, DEC, NOV, DEC},                              /*  34 */
 261 {"statfs",      4, DEC, NOV, STG, HEX, DEC, DEC},               /*  35 */
 262 {"sync",        0, DEC, NOV},                                   /*  36 */
 263 {"kill",        2, DEC, NOV, DEC, SIG},                         /*  37 */
 264 {"fstatfs",     4, DEC, NOV, DEC, HEX, DEC, DEC},               /*  38 */
 265 {"pgrpsys",     3, DEC, NOV, DEC, DEC, DEC},                    /*  39 */
 266 {"uucopystr",   3, DEC, NOV, STG, RST, UNS},                    /*  40 */
 267 { NULL,         8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
 268 {"pipe",        2, DEC, NOV, PFD, PIP},                         /*  42 */
 269 {"times",       1, DEC, NOV, HEX},                              /*  43 */
 270 {"profil",      4, DEC, NOV, HEX, UNS, HEX, OCT},               /*  44 */
 271 {"faccessat",   4, DEC, NOV, ATC, STG, ACC, FAT},               /*  45 */
 272 {"setgid",      1, DEC, NOV, UNS},                              /*  46 */
 273 {"getgid",      0, UNS, UNS},                                   /*  47 */
 274 {"mknodat",     4, DEC, NOV, ATC, STG, OCT, HEX},               /*  48 */
 275 {"msgsys",      6, DEC, NOV, DEC, DEC, DEC, DEC, DEC, DEC},     /*  49 */
 276 {"sysi86",      4, HEX, NOV, S86, HEX, HEX, HEX, DEC, DEC},     /*  50 */
 277 {"acct",        1, DEC, NOV, STG},                              /*  51 */
 278 {"shmsys",      4, DEC, NOV, DEC, HEX, HEX, HEX},               /*  52 */
 279 {"semsys",      5, DEC, NOV, DEC, HEX, HEX, HEX, HEX},          /*  53 */
 280 {"ioctl",       3, DEC, NOV, DEC, IOC, IOA},                    /*  54 */
 281 {"uadmin",      3, DEC, NOV, DEC, DEC, DEC},                    /*  55 */
 282 {"fchownat",    5, DEC, NOV, ATC, STG, DEC, DEC, SNF},          /*  56 */
 283 {"utssys",      4, DEC, NOV, HEX, DEC, UTS, HEX},               /*  57 */
 284 {"fdsync",      2, DEC, NOV, DEC, FFG},                         /*  58 */
 285 {"execve",      3, DEC, NOV, STG, HEX, HEX},                    /*  59 */
 286 {"umask",       1, OCT, NOV, OCT},                              /*  60 */
 287 {"chroot",      1, DEC, NOV, STG},                              /*  61 */
 288 {"fcntl",       3, DEC, NOV, DEC, FCN, HEX},                    /*  62 */
 289 {"ulimit",      2, DEX, NOV, ULM, DEC},                         /*  63 */
 290 {"renameat",    4, DEC, NOV, ATC, STG, ATC, STG},               /*  64 */
 291 {"unlinkat",    3, DEC, NOV, ATC, STG, UAT},                    /*  65 */
 292 {"fstatat",     4, DEC, NOV, ATC, STG, HEX, SNF},               /*  66 */
 293 {"fstatat64",   4, DEC, NOV, ATC, STG, HEX, SNF},               /*  67 */
 294 {"openat",      4, DEC, NOV, ATC, STG, OPN, OCT},               /*  68 */
 295 {"openat64",    4, DEC, NOV, ATC, STG, OPN, OCT},               /*  69 */
 296 {"tasksys",     5, DEC, NOV, DEC, DEC, DEC, HEX, DEC},          /*  70 */
 297 {"acctctl",     3, DEC, NOV, HEX, HEX, UNS},                    /*  71 */
 298 {"exacctsys",   6, DEC, NOV, DEC, IDT, DEC, HEX, DEC, HEX},     /*  72 */
 299 {"getpagesizes", 2, DEC, NOV, HEX, DEC},                        /*  73 */
 300 {"rctlsys",     6, DEC, NOV, RSC, STG, HEX, HEX, DEC, DEC},     /*  74 */
 301 {"sidsys",      4, UNS, UNS, DEC, DEC, DEC, DEC},               /*  75 */
 302 { NULL,         8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
 303 {"lwp_park",    3, DEC, NOV, DEC, HEX, DEC},                    /*  77 */
 304 {"sendfilev",   5, DEC, NOV, DEC, DEC, HEX, DEC, HEX},          /*  78 */
 305 {"rmdir",       1, DEC, NOV, STG},                              /*  79 */
 306 {"mkdir",       2, DEC, NOV, STG, OCT},                         /*  80 */
 307 {"getdents",    3, DEC, NOV, DEC, HEX, UNS},                    /*  81 */
 308 {"privsys",     5, HEX, NOV, DEC, DEC, DEC, HEX, DEC},          /*  82 */
 309 {"ucredsys",    3, DEC, NOV, DEC, DEC, HEX},                    /*  83 */
 310 {"sysfs",       3, DEC, NOV, SFS, DEX, DEX},                    /*  84 */
 311 {"getmsg",      4, DEC, NOV, DEC, HEX, HEX, HEX},               /*  85 */
 312 {"putmsg",      4, DEC, NOV, DEC, HEX, HEX, SMF},               /*  86 */
 313 { NULL,         8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
 314 {"lstat",       2, DEC, NOV, STG, HEX},                         /*  88 */
 315 {"symlink",     2, DEC, NOV, STG, STG},                         /*  89 */
 316 {"readlink",    3, DEC, NOV, STG, RLK, UNS},                    /*  90 */
 317 {"setgroups",   2, DEC, NOV, DEC, HEX},                         /*  91 */
 318 {"getgroups",   2, DEC, NOV, DEC, HEX},                         /*  92 */
 319 {"fchmod",      2, DEC, NOV, DEC, OCT},                         /*  93 */
 320 {"fchown",      3, DEC, NOV, DEC, DEC, DEC},                    /*  94 */
 321 {"sigprocmask", 3, DEC, NOV, SPM, HEX, HEX},                    /*  95 */
 322 {"sigsuspend",  1, DEC, NOV, HEX},                              /*  96 */
 323 {"sigaltstack", 2, DEC, NOV, HEX, HEX},                         /*  97 */
 324 {"sigaction",   3, DEC, NOV, SIG, HEX, HEX},                    /*  98 */
 325 {"sigpendsys",  2, DEC, NOV, DEC, HEX},                         /*  99 */
 326 {"context",     2, DEC, NOV, DEC, HEX},                         /* 100 */
 327 {"fchmodat",    4, DEC, NOV, ATC, STG, OCT, SNF},               /* 101 */
 328 {"mkdirat",     3, DEC, NOV, ATC, STG, OCT},                    /* 102 */
 329 {"statvfs",     2, DEC, NOV, STG, HEX},                         /* 103 */
 330 {"fstatvfs",    2, DEC, NOV, DEC, HEX},                         /* 104 */
 331 {"getloadavg",  2, DEC, NOV, HEX, DEC},                         /* 105 */
 332 {"nfssys",      2, DEC, NOV, DEC, HEX},                         /* 106 */
 333 {"waitid",      4, DEC, NOV, IDT, DEC, HEX, WOP},               /* 107 */
 334 {"sigsendsys",  2, DEC, NOV, HEX, SIG},                         /* 108 */
 335 {"hrtsys",      5, DEC, NOV, DEC, HEX, HEX, HEX, HEX},          /* 109 */
 336 {"utimesys",    5, DEC, NOV, DEC, HEX, HEX, HEX, HEX},          /* 110 */
 337 {"sigresend",   3, DEC, NOV, SIG, HEX, HEX},                    /* 111 */
 338 {"priocntlsys", 5, DEC, NOV, DEC, HEX, DEC, PC4, PC5},          /* 112 */
 339 {"pathconf",    2, DEC, NOV, STG, PTC},                         /* 113 */
 340 {"mincore",     3, DEC, NOV, HEX, UNS, HEX},                    /* 114 */
 341 {"mmap",        6, HEX, NOV, HEX, UNS, MPR, MTY, DEC, DEC},     /* 115 */
 342 {"mprotect",    3, DEC, NOV, HEX, UNS, MPR},                    /* 116 */
 343 {"munmap",      2, DEC, NOV, HEX, UNS},                         /* 117 */
 344 {"fpathconf",   2, DEC, NOV, DEC, PTC},                         /* 118 */
 345 {"vfork",       0, DEC, NOV},                                   /* 119 */
 346 {"fchdir",      1, DEC, NOV, DEC},                              /* 120 */
 347 {"readv",       3, DEC, NOV, DEC, HEX, DEC},                    /* 121 */
 348 {"writev",      3, DEC, NOV, DEC, HEX, DEC},                    /* 122 */
 349 {"preadv",      4, DEC, NOV, DEC, HEX, DEC, DEC},               /* 123 */
 350 {"pwritev",     4, DEC, NOV, DEC, HEX, DEC, DEC},               /* 124 */
 351 {"upanic",      2, DEC, NOV, HEX, DEC},                         /* 125 */
 352 {"getrandom",   3, DEC, NOV, IOB, UNS, GRF},                    /* 126 */
 353 {"mmapobj",     5, DEC, NOV, DEC, MOB, HEX, HEX, HEX},          /* 127 */
 354 {"setrlimit",   2, DEC, NOV, RLM, HEX},                         /* 128 */
 355 {"getrlimit",   2, DEC, NOV, RLM, HEX},                         /* 129 */
 356 {"lchown",      3, DEC, NOV, STG, DEC, DEC},                    /* 130 */
 357 {"memcntl",     6, DEC, NOV, HEX, UNS, MCF, MC4, MC5, DEC},     /* 131 */
 358 {"getpmsg",     5, DEC, NOV, DEC, HEX, HEX, HEX, HEX},          /* 132 */
 359 {"putpmsg",     5, DEC, NOV, DEC, HEX, HEX, DEC, HHX},          /* 133 */
 360 {"rename",      2, DEC, NOV, STG, STG},                         /* 134 */
 361 {"uname",       1, DEC, NOV, HEX},                              /* 135 */
 362 {"setegid",     1, DEC, NOV, UNS},                              /* 136 */
 363 {"sysconfig",   1, DEC, NOV, CNF},                              /* 137 */
 364 {"adjtime",     2, DEC, NOV, HEX, HEX},                         /* 138 */
 365 {"sysinfo",     3, DEC, NOV, INF, RST, DEC},                    /* 139 */
 366 {"sharefs",     3, DEC, NOV, DEC, HEX, DEC},                    /* 140 */
 367 {"seteuid",     1, DEC, NOV, UNS},                              /* 141 */
 368 {"forksys",     2, DEC, NOV, DEC, HHX},                         /* 142 */
 369 { NULL,         8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
 370 {"sigtimedwait", 3, DEC, NOV, HEX, HEX, HEX},                   /* 144 */
 371 {"lwp_info",    1, DEC, NOV, HEX},                              /* 145 */
 372 {"yield",       0, DEC, NOV},                                   /* 146 */
 373 { NULL,         8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
 374 {"lwp_sema_post", 1, DEC, NOV, HEX},                            /* 148 */
 375 {"lwp_sema_trywait", 1, DEC, NOV, HEX},                         /* 149 */
 376 {"lwp_detach",  1, DEC, NOV, DEC},                              /* 150 */
 377 {"corectl",     4, DEC, NOV, DEC, HEX, HEX, HEX},               /* 151 */
 378 {"modctl",      5, DEC, NOV, MOD, HEX, HEX, HEX, HEX},          /* 152 */
 379 {"fchroot",     1, DEC, NOV, DEC},                              /* 153 */
 380 { NULL,         8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
 381 {"vhangup",     0, DEC, NOV},                                   /* 155 */
 382 {"gettimeofday", 1, DEC, NOV, HEX},                             /* 156 */
 383 {"getitimer",   2, DEC, NOV, ITM, HEX},                         /* 157 */
 384 {"setitimer",   3, DEC, NOV, ITM, HEX, HEX},                    /* 158 */
 385 {"lwp_create",  3, DEC, NOV, HEX, LWF, HEX},                    /* 159 */
 386 {"lwp_exit",    0, DEC, NOV},                                   /* 160 */
 387 {"lwp_suspend", 1, DEC, NOV, DEC},                              /* 161 */
 388 {"lwp_continue", 1, DEC, NOV, DEC},                             /* 162 */
 389 {"lwp_kill",    2, DEC, NOV, DEC, SIG},                         /* 163 */
 390 {"lwp_self",    0, DEC, NOV},                                   /* 164 */
 391 {"lwp_sigmask", 5, HEX, HEX, SPM, HEX, HEX, HEX, HEX},          /* 165 */
 392 {"lwp_private", 3, HEX, NOV, DEC, DEC, HEX},                    /* 166 */
 393 {"lwp_wait",    2, DEC, NOV, DEC, HEX},                         /* 167 */
 394 {"lwp_mutex_wakeup", 2, DEC, NOV, HEX, DEC},                    /* 168 */
 395 { NULL,         8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
 396 {"lwp_cond_wait", 4, DEC, NOV, HEX, HEX, HEX, DEC},             /* 170 */
 397 {"lwp_cond_signal", 1, DEC, NOV, HEX},                          /* 171 */
 398 {"lwp_cond_broadcast", 1, DEC, NOV, HEX},                       /* 172 */
 399 {"pread",       4, DEC, NOV, DEC, IOB, UNS, DEX},               /* 173 */
 400 {"pwrite",      4, DEC, NOV, DEC, IOB, UNS, DEX},               /* 174 */
 401 {"llseek",      4, LLO, NOV, DEC, LLO, HID, WHN},               /* 175 */
 402 {"inst_sync",   2, DEC, NOV, STG, DEC},                         /* 176 */
 403 {"brand",       6, DEC, NOV, DEC, HEX, HEX, HEX, HEX, HEX},     /* 177 */
 404 {"kaio",        7, DEC, NOV, AIO, HEX, HEX, HEX, HEX, HEX, HEX}, /* 178 */
 405 {"cpc",         5, DEC, NOV, CPC, DEC, HEX, HEX, HEX},          /* 179 */
 406 {"lgrpsys",     3, DEC, NOV, DEC, DEC, HEX},                    /* 180 */
 407 {"rusagesys",   5, DEC, NOV, DEC, HEX, DEC, HEX, HEX},          /* 181 */
 408 {"portfs",      6, HEX, HEX, DEC, HEX, HEX, HEX, HEX, HEX},     /* 182 */
 409 {"pollsys",     4, DEC, NOV, HEX, DEC, HEX, HEX},               /* 183 */
 410 {"labelsys",    2, DEC, NOV, DEC, HEX},                         /* 184 */
 411 {"acl",         4, DEC, NOV, STG, ACL, DEC, HEX},               /* 185 */
 412 {"auditsys",    4, DEC, NOV, AUD, HEX, HEX, HEX},               /* 186 */
 413 {"processor_bind", 4, DEC, NOV, IDT, DEC, DEC, HEX},            /* 187 */
 414 {"processor_info", 2, DEC, NOV, DEC, HEX},                      /* 188 */
 415 {"p_online",    2, DEC, NOV, DEC, DEC},                         /* 189 */
 416 {"sigqueue",    5, DEC, NOV, DEC, SIG, HEX, SQC, DEC},          /* 190 */
 417 {"clock_gettime", 2, DEC, NOV, DEC, HEX},                       /* 191 */
 418 {"clock_settime", 2, DEC, NOV, DEC, HEX},                       /* 192 */
 419 {"clock_getres", 2, DEC, NOV, DEC, HEX},                        /* 193 */
 420 {"timer_create", 3, DEC, NOV, DEC, HEX, HEX},                   /* 194 */
 421 {"timer_delete", 1, DEC, NOV, DEC},                             /* 195 */
 422 {"timer_settime", 4, DEC, NOV, DEC, DEC, HEX, HEX},             /* 196 */
 423 {"timer_gettime", 2, DEC, NOV, DEC, HEX},                       /* 197 */
 424 {"timer_getoverrun", 1, DEC, NOV, DEC},                         /* 198 */
 425 {"nanosleep",   2, DEC, NOV, HEX, HEX},                         /* 199 */
 426 {"facl",        4, DEC, NOV, DEC, ACL, DEC, HEX},               /* 200 */
 427 {"door",        6, DEC, NOV, DEC, HEX, HEX, HEX, HEX, DEC},     /* 201 */
 428 {"setreuid",    2, DEC, NOV, UN1, UN1},                         /* 202 */
 429 {"setregid",    2, DEC, NOV, UN1, UN1},                         /* 203 */
 430 {"install_utrap", 3, DEC, NOV, DEC, HEX, HEX},                  /* 204 */
 431 {"signotify",   3, DEC, NOV, DEC, HEX, HEX},                    /* 205 */
 432 {"schedctl",    0, HEX, NOV},                                   /* 206 */
 433 {"pset",        5, DEC, NOV, DEC, HEX, HEX, HEX, HEX},          /* 207 */
 434 {"sparc_utrap_install", 5, DEC, NOV, UTT, UTH, UTH, HEX, HEX},  /* 208 */
 435 {"resolvepath", 3, DEC, NOV, STG, RLK, DEC},                    /* 209 */
 436 {"lwp_mutex_timedlock", 3, DEC, NOV, HEX, HEX, HEX},            /* 210 */
 437 {"lwp_sema_timedwait", 3, DEC, NOV, HEX, HEX, DEC},             /* 211 */
 438 {"lwp_rwlock_sys", 3, DEC, NOV, DEC, HEX, HEX},                 /* 212 */
 439 {"getdents64",  3, DEC, NOV, DEC, HEX, UNS},                    /* 213 */
 440 {"mmap64",      7, HEX, NOV, HEX, UNS, MPR, MTY, DEC, LLO, HID}, /* 214 */
 441 {"stat64",      2, DEC, NOV, STG, HEX},                         /* 215 */
 442 {"lstat64",     2, DEC, NOV, STG, HEX},                         /* 216 */
 443 {"fstat64",     2, DEC, NOV, DEC, HEX},                         /* 217 */
 444 {"statvfs64",   2, DEC, NOV, STG, HEX},                         /* 218 */
 445 {"fstatvfs64",  2, DEC, NOV, DEC, HEX},                         /* 219 */
 446 {"setrlimit64", 2, DEC, NOV, RLM, HEX},                         /* 220 */
 447 {"getrlimit64", 2, DEC, NOV, RLM, HEX},                         /* 221 */
 448 {"pread64",     5, DEC, NOV, DEC, IOB, UNS, LLO, HID},          /* 222 */
 449 {"pwrite64",    5, DEC, NOV, DEC, IOB, UNS, LLO, HID},          /* 223 */
 450 { NULL,         8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
 451 {"open64",      3, DEC, NOV, STG, OPN, OCT},                    /* 225 */
 452 {"rpcmod",      3, DEC, NOV, DEC, HEX},                         /* 226 */
 453 {"zone",        5, DEC, NOV, DEC, HEX, HEX, HEX, HEX},          /* 227 */
 454 {"autofssys",   2, DEC, NOV, DEC, HEX},                         /* 228 */
 455 {"getcwd",      3, DEC, NOV, RST, DEC},                         /* 229 */
 456 {"so_socket",   5, DEC, NOV, PFM, SKT, SKP, STG, SKV},          /* 230 */
 457 {"so_socketpair", 1, DEC, NOV, HEX},                            /* 231 */
 458 {"bind",        4, DEC, NOV, DEC, HEX, DEC, SKV},               /* 232 */
 459 {"listen",      3, DEC, NOV, DEC, DEC, SKV},                    /* 233 */
 460 {"accept",      5, DEC, NOV, DEC, HEX, HEX, SKV, ACF},          /* 234 */
 461 {"connect",     4, DEC, NOV, DEC, HEX, DEC, SKV},               /* 235 */
 462 {"shutdown",    3, DEC, NOV, DEC, SHT, SKV},                    /* 236 */
 463 {"recv",        4, DEC, NOV, DEC, IOB, DEC, DEC},               /* 237 */
 464 {"recvfrom",    6, DEC, NOV, DEC, IOB, DEC, DEC, HEX, HEX},     /* 238 */
 465 {"recvmsg",     3, DEC, NOV, DEC, HEX, DEC},                    /* 239 */
 466 {"send",        4, DEC, NOV, DEC, IOB, DEC, DEC},               /* 240 */
 467 {"sendmsg",     3, DEC, NOV, DEC, HEX, DEC},                    /* 241 */
 468 {"sendto",      6, DEC, NOV, DEC, IOB, DEC, DEC, HEX, DEC},     /* 242 */
 469 {"getpeername", 4, DEC, NOV, DEC, HEX, HEX, SKV},               /* 243 */
 470 {"getsockname", 4, DEC, NOV, DEC, HEX, HEX, SKV},               /* 244 */
 471 {"getsockopt",  6, DEC, NOV, DEC, SOL, SON, HEX, HEX, SKV},     /* 245 */
 472 {"setsockopt",  6, DEC, NOV, DEC, SOL, SON, HEX, DEC, SKV},     /* 246 */
 473 {"sockconfig",  5, DEC, NOV, DEC, HEX, HEX, HEX, HEX},          /* 247 */
 474 {"ntp_gettime", 1, DEC, NOV, HEX},                              /* 248 */
 475 {"ntp_adjtime", 1, DEC, NOV, HEX},                              /* 249 */
 476 {"lwp_mutex_unlock", 1, DEC, NOV, HEX},                         /* 250 */
 477 {"lwp_mutex_trylock", 2, DEC, NOV, HEX, HEX},                   /* 251 */
 478 {"lwp_mutex_register", 2, DEC, NOV, HEX, HEX},                  /* 252 */
 479 {"cladm",       3, DEC, NOV, CLC, CLF, HEX},                    /* 253 */
 480 {"uucopy",      3, DEC, NOV, HEX, HEX, UNS},                    /* 254 */
 481 {"umount2",     2, DEC, NOV, STG, MTF},                         /* 255 */
 482 { NULL, -1, DEC, NOV},
 483 };
 484 
 485 /* SYSEND == max syscall number + 1 */
 486 #define SYSEND  ((sizeof (systable) / sizeof (struct systable))-1)
 487 
 488 
 489 /*
 490  * The following are for interpreting syscalls with sub-codes.
 491  */
 492 
 493 const   struct systable faccessattable[] = {
 494 {"faccessat",   4, DEC, NOV, ATC, STG, ACC, FAT},               /*  0 */
 495 {"access",      3, DEC, NOV, HID, STG, ACC},                    /*  1 */
 496 };
 497 #define NACCESSCODE     (sizeof (faccessattable) / sizeof (struct systable))
 498 
 499 const   struct systable fchmodattable[] = {
 500 {"fchmodat",    4, DEC, NOV, ATC, STG, OCT, SNF},               /*  0 */
 501 {"chmod",       3, DEC, NOV, HID, STG, OCT},                    /*  1 */
 502 {"fchmodat",    4, DEC, NOV, ATC, STG, OCT, SNF},               /*  2 */
 503 {"fchmod",      3, DEC, NOV, DEC, HID, OCT},                    /*  3 */
 504 };
 505 #define NCHMODCODE      (sizeof (fchmodattable) / sizeof (struct systable))
 506 
 507 const   struct systable fchownattable[] = {
 508 {"fchownat",    5, DEC, NOV, ATC, STG, DEC, DEC, SNF},          /*  0 */
 509 {"chown",       4, DEC, NOV, HID, STG, DEC, DEC},               /*  1 */
 510 {"lchown",      4, DEC, NOV, HID, STG, DEC, DEC},               /*  2 */
 511 {"fchown",      4, DEC, NOV, DEC, HID, DEC, DEC},               /*  3 */
 512 };
 513 #define NCHOWNCODE      (sizeof (fchownattable) / sizeof (struct systable))
 514 
 515 const   struct systable mkdiratattable[] = {
 516 {"mkdirat",     3, DEC, NOV, ATC, STG, OCT},                    /*  0 */
 517 {"mkdir",       3, DEC, NOV, HID, STG, OCT},                    /*  1 */
 518 };
 519 #define NMKDIRCODE      (sizeof (mkdiratattable) / sizeof (struct systable))
 520 
 521 const   struct systable mknodatattable[] = {
 522 {"mknodat",     4, DEC, NOV, ATC, STG, OCT, HEX},               /*  0 */
 523 {"mknod",       4, DEC, NOV, HID, STG, OCT, HEX},               /*  1 */
 524 };
 525 #define NMKMODCODE      (sizeof (mknodatattable) / sizeof (struct systable))
 526 
 527 const   struct systable renameattable[] = {
 528 {"renameat",    4, DEC, NOV, ATC, STG, ATC, STG},               /*  0 */
 529 {"rename",      4, DEC, NOV, HID, STG, HID, STG},               /*  1 */
 530 };
 531 #define NRENAMECODE     (sizeof (renameattable) / sizeof (struct systable))
 532 
 533 const   struct systable linkattable[] = {
 534 {"linkat",      5, DEC, NOV, ATC, STG, ATC, STG, SNF},          /*  0 */
 535 {"link",        4, DEC, NOV, HID, STG, HID, STG},               /*  1 */
 536 };
 537 #define NLINKATCODE     (sizeof (linkattable) / sizeof (struct systable))
 538 
 539 const   struct systable unlinkattable[] = {
 540 {"unlinkat",    3, DEC, NOV, ATC, STG, UAT},                    /*  0 */
 541 {"unlink",      2, DEC, NOV, HID, STG},                         /*  1 */
 542 {"rmdir",       2, DEC, NOV, HID, STG},                         /*  2 */
 543 };
 544 #define NUNLINKCODE     (sizeof (unlinkattable) / sizeof (struct systable))
 545 
 546 const   struct systable symlinkattable[] = {
 547 {"symlinkat",   3, DEC, NOV, STG, ATC, STG},                    /*  0 */
 548 {"symlink",     3, DEC, NOV, STG, HID, STG},                    /*  1 */
 549 };
 550 #define NSYMLINKCODE    (sizeof (symlinkattable) / sizeof (struct systable))
 551 
 552 const   struct systable readlinkattable[] = {
 553 {"readlinkat",  4, DEC, NOV, ATC, STG, RLK, UNS},               /*  0 */
 554 {"readlink",    4, DEC, NOV, HID, STG, RLK, UNS},               /*  1 */
 555 };
 556 #define NREADLINKCODE   (sizeof (readlinkattable) / sizeof (struct systable))
 557 
 558 const   struct systable fstatattable[] = {
 559 {"fstatat",     4, DEC, NOV, ATC, STG, HEX, SNF},               /*  0 */
 560 {"stat",        3, DEC, NOV, HID, STG, HEX},                    /*  1 */
 561 {"lstat",       3, DEC, NOV, HID, STG, HEX},                    /*  2 */
 562 {"fstat",       3, DEC, NOV, DEC, HID, HEX},                    /*  3 */
 563 };
 564 #define NSTATCODE       (sizeof (fstatattable) / sizeof (struct systable))
 565 
 566 const   struct systable fstatat64table[] = {
 567 {"fstatat64",   4, DEC, NOV, ATC, STG, HEX, SNF},               /*  0 */
 568 {"stat64",      3, DEC, NOV, HID, STG, HEX},                    /*  1 */
 569 {"lstat64",     3, DEC, NOV, HID, STG, HEX},                    /*  2 */
 570 {"fstat64",     3, DEC, NOV, DEC, HID, HEX},                    /*  3 */
 571 };
 572 #define NSTAT64CODE     (sizeof (fstatat64table) / sizeof (struct systable))
 573 
 574 const   struct systable openattable[] = {
 575 {"openat",      3, DEC, NOV, ATC, STG, OPN},                    /* 0 */
 576 {"openat",      4, DEC, NOV, ATC, STG, OPN, OCT},               /* 1 */
 577 {"open",        3, DEC, NOV, HID, STG, OPN},                    /* 2 */
 578 {"open",        4, DEC, NOV, HID, STG, OPN, OCT},               /* 3 */
 579 };
 580 #define NOPENATCODE     (sizeof (openattable) / sizeof (struct systable))
 581 
 582 const   struct systable openat64table[] = {
 583 {"openat64",    3, DEC, NOV, ATC, STG, OPN},                    /* 0 */
 584 {"openat64",    4, DEC, NOV, ATC, STG, OPN, OCT},               /* 1 */
 585 {"open64",      3, DEC, NOV, HID, STG, OPN},                    /* 2 */
 586 {"open64",      4, DEC, NOV, HID, STG, OPN, OCT},               /* 3 */
 587 };
 588 #define NOPENAT64CODE   (sizeof (openat64table) / sizeof (struct systable))
 589 
 590 const   struct systable opentable[] = {
 591 {"open",        2, DEC, NOV, STG, OPN},                         /* 0 */
 592 {"open",        3, DEC, NOV, STG, OPN, OCT},                    /* 1 */
 593 };
 594 #define NOPENCODE       (sizeof (opentable) / sizeof (struct systable))
 595 
 596 const   struct systable open64table[] = {
 597 {"open64",      2, DEC, NOV, STG, OPN},                         /* 0 */
 598 {"open64",      3, DEC, NOV, STG, OPN, OCT},                    /* 1 */
 599 };
 600 #define NOPEN64CODE     (sizeof (open64table) / sizeof (struct systable))
 601 
 602 const   struct systable fcntltable[] = {
 603 {"fcntl",       3, DEC, NOV, DEC, FCN, HEX},                    /* 0: default */
 604 {"fcntl",       2, DEC, NOV, DEC, FCN},                         /* 1: no arg */
 605 {"fcntl",       3, DEC, NOV, DEC, FCN, FFG},                    /* 2: F_SETFL */
 606 };
 607 #define NFCNTLCODE      (sizeof (fcntltable) / sizeof (struct systable))
 608 
 609 const   struct systable msgtable[] = {
 610 {"msgget",      3, DEC, NOV, HID, KEY, MSF},                    /* 0 */
 611 {"msgctl",      4, DEC, NOV, HID, DEC, MSC, HEX},               /* 1 */
 612 {"msgrcv",      6, DEC, NOV, HID, DEC, HEX, UNS, DEC, MSF},     /* 2 */
 613 {"msgsnd",      5, DEC, NOV, HID, DEC, HEX, UNS, MSF},          /* 3 */
 614 {"msgids",      4, DEC, NOV, HID, HEX, UNS, HEX},               /* 4 */
 615 {"msgsnap",     5, DEC, NOV, HID, DEC, HEX, UNS, DEC},          /* 5 */
 616 };
 617 #define NMSGCODE        (sizeof (msgtable) / sizeof (struct systable))
 618 
 619 const   struct systable semtable[] = {
 620 {"semctl",      5, DEC, NOV, HID, DEC, DEC, SMC, DEX},          /* 0 */
 621 {"semget",      4, DEC, NOV, HID, KEY, DEC, SEF},               /* 1 */
 622 {"semop",       4, DEC, NOV, HID, DEC, HEX, UNS},               /* 2 */
 623 {"semids",      4, DEC, NOV, HID, HEX, UNS, HEX},               /* 3 */
 624 {"semtimedop",  5, DEC, NOV, HID, DEC, HEX, UNS, HEX},          /* 4 */
 625 };
 626 #define NSEMCODE        (sizeof (semtable) / sizeof (struct systable))
 627 
 628 const   struct systable shmtable[] = {
 629 {"shmat",       4, HEX, NOV, HID, DEC, DEX, SHF},               /* 0 */
 630 {"shmctl",      4, DEC, NOV, HID, DEC, SHC, DEX},               /* 1 */
 631 {"shmdt",       2, DEC, NOV, HID, HEX},                         /* 2 */
 632 {"shmget",      4, DEC, NOV, HID, KEY, UNS, SHF},               /* 3 */
 633 {"shmids",      4, DEC, NOV, HID, HEX, UNS, HEX},               /* 4 */
 634 };
 635 #define NSHMCODE        (sizeof (shmtable) / sizeof (struct systable))
 636 
 637 const   struct systable pidtable[] = {
 638 {"getpgrp",     1, DEC, NOV, HID},                              /* 0 */
 639 {"setpgrp",     1, DEC, NOV, HID},                              /* 1 */
 640 {"getsid",      2, DEC, NOV, HID, DEC},                         /* 2 */
 641 {"setsid",      1, DEC, NOV, HID},                              /* 3 */
 642 {"getpgid",     2, DEC, NOV, HID, DEC},                         /* 4 */
 643 {"setpgid",     3, DEC, NOV, HID, DEC, DEC},                    /* 5 */
 644 };
 645 #define NPIDCODE        (sizeof (pidtable) / sizeof (struct systable))
 646 
 647 const   struct systable sfstable[] = {
 648 {"sysfs",       3, DEC, NOV, SFS, DEX, DEX},                    /* 0 */
 649 {"sysfs",       2, DEC, NOV, SFS, STG},                         /* 1 */
 650 {"sysfs",       3, DEC, NOV, SFS, DEC, RST},                    /* 2 */
 651 {"sysfs",       1, DEC, NOV, SFS},                              /* 3 */
 652 };
 653 #define NSFSCODE        (sizeof (sfstable) / sizeof (struct systable))
 654 
 655 const   struct systable utstable[] = {
 656 {"utssys",      3, DEC, NOV, HEX, DEC, UTS},                    /* 0 */
 657 {"utssys",      4, DEC, NOV, HEX, HEX, HEX, HEX},               /* err */
 658 {"utssys",      3, DEC, NOV, HEX, HHX, UTS},                    /* 2 */
 659 {"utssys",      4, DEC, NOV, STG, FUI, UTS, HEX}                /* 3 */
 660 };
 661 #define NUTSCODE        (sizeof (utstable) / sizeof (struct systable))
 662 
 663 const   struct systable rctltable[] = {
 664 {"getrctl",     6, DEC, NOV, HID, STG, HEX, HEX, HID, RGF},     /* 0 */
 665 {"setrctl",     6, DEC, NOV, HID, STG, HEX, HEX, HID, RSF},     /* 1 */
 666 {"rctlsys_lst", 6, DEC, NOV, HID, HID, HEX, HID, HEX, HID},     /* 2 */
 667 {"rctlsys_ctl", 6, DEC, NOV, HID, STG, HEX, HID, HID, RCF},     /* 3 */
 668 {"setprojrctl", 6, DEC, NOV, HID, STG, HID, HEX, HEX, SPF},     /* 4 */
 669 };
 670 #define NRCTLCODE       (sizeof (rctltable) / sizeof (struct systable))
 671 
 672 const   struct systable sgptable[] = {
 673 {"sigpendsys",  2, DEC, NOV, DEC, HEX},                         /* err */
 674 {"sigpending",  2, DEC, NOV, HID, HEX},                         /* 1 */
 675 {"sigfillset",  2, DEC, NOV, HID, HEX},                         /* 2 */
 676 };
 677 #define NSGPCODE        (sizeof (sgptable) / sizeof (struct systable))
 678 
 679 const   struct systable ctxtable[] = {
 680 {"getcontext",  2, DEC, NOV, HID, HEX},                         /* 0 */
 681 {"setcontext",  2, DEC, NOV, HID, HEX},                         /* 1 */
 682 {"getustack",   2, DEC, NOV, HID, HEX},                         /* 2 */
 683 {"setustack",   2, DEC, NOV, HID, HEX},                         /* 3 */
 684 {"getcontext_extd",     2, DEC, NOV, HID, HEX},                         /* 4 */
 685 };
 686 #define NCTXCODE        (sizeof (ctxtable) / sizeof (struct systable))
 687 
 688 const   struct systable hrttable[] = {
 689 {"hrtcntl",     5, DEC, NOV, HID, DEC, DEC, HEX, HEX},          /* 0 */
 690 {"hrtalarm",    3, DEC, NOV, HID, HEX, DEC},                    /* 1 */
 691 {"hrtsleep",    2, DEC, NOV, HID, HEX},                         /* 2 */
 692 {"hrtcancel",   3, DEC, NOV, HID, HEX, DEC},                    /* 3 */
 693 };
 694 #define NHRTCODE        (sizeof (hrttable) / sizeof (struct systable))
 695 
 696 const   struct systable cortable[] = {
 697 {"corectl",     4, DEC, NOV, COR, HEX, HEX, HEX},               /* 0 */
 698 {"corectl",     2, DEC, NOV, COR, CCO},                         /* 1 */
 699 {"corectl",     1, HHX, NOV, COR},                              /* 2 */
 700 {"corectl",     3, DEC, NOV, COR, STG, DEC},                    /* 3 */
 701 {"corectl",     3, DEC, NOV, COR, RST, DEC},                    /* 4 */
 702 {"corectl",     4, DEC, NOV, COR, STG, DEC, DEC},               /* 5 */
 703 {"corectl",     4, DEC, NOV, COR, RST, DEC, DEC},               /* 6 */
 704 {"corectl",     2, DEC, NOV, COR, CCC},                         /* 7 */
 705 {"corectl",     2, DEC, NOV, COR, RCC},                         /* 8 */
 706 {"corectl",     3, DEC, NOV, COR, CCC, DEC},                    /* 9 */
 707 {"corectl",     3, DEC, NOV, COR, RCC, DEC},                    /* 10 */
 708 {"corectl",     3, DEC, NOV, COR, STG, DEC},                    /* 11 */
 709 {"corectl",     3, DEC, NOV, COR, RST, DEC},                    /* 12 */
 710 {"corectl",     2, DEC, NOV, COR, CCC},                         /* 13 */
 711 {"corectl",     2, DEC, NOV, COR, RCC},                         /* 14 */
 712 };
 713 #define NCORCODE        (sizeof (cortable) / sizeof (struct systable))
 714 
 715 const   struct systable aiotable[] = {
 716 {"kaio",        7, DEC, NOV, AIO, DEC, HEX, DEC, LLO, HID, HEX}, /* 0 */
 717 {"kaio",        7, DEC, NOV, AIO, DEC, HEX, DEC, LLO, HID, HEX}, /* 1 */
 718 {"kaio",        3, DEC, NOV, AIO, HEX, DEC},                    /* 2 */
 719 {"kaio",        3, DEC, NOV, AIO, DEC, HEX},                    /* 3 */
 720 {"kaio",        1, DEC, NOV, AIO},                              /* 4 */
 721 {"kaio",        1, DEC, NOV, AIO},                              /* 5 */
 722 {"kaio",        1, DEC, NOV, AIO},                              /* 6 */
 723 {"kaio",        5, DEC, NOV, AIO, LIO, HEX, DEC, HEX},          /* 7 */
 724 {"kaio",        5, DEC, NOV, AIO, HEX, DEC, HEX, DEC},          /* 8 */
 725 {"kaio",        2, DEC, NOV, AIO, HEX},                         /* 9 */
 726 {"kaio",        5, DEC, NOV, AIO, LIO, HEX, DEC, HEX},          /* 10 */
 727 {"kaio",        2, DEC, NOV, AIO, HEX},                         /* 11 */
 728 {"kaio",        2, DEC, NOV, AIO, HEX},                         /* 12 */
 729 {"kaio",        5, DEC, NOV, AIO, LIO, HEX, DEC, HEX},          /* 13 */
 730 {"kaio",        5, DEC, NOV, AIO, HEX, DEC, HEX, DEC},          /* 14 */
 731 {"kaio",        2, DEC, NOV, AIO, HEX},                         /* 15 */
 732 {"kaio",        5, DEC, NOV, AIO, LIO, HEX, DEC, HEX},          /* 16 */
 733 {"kaio",        2, DEC, NOV, AIO, HEX},                         /* 17 */
 734 {"kaio",        2, DEC, NOV, AIO, HEX},                         /* 18 */
 735 {"kaio",        3, DEC, NOV, AIO, DEC, HEX},                    /* 19 */
 736 {"kaio",        1, DEC, NOV, AIO},                              /* 20 */
 737 {"kaio",        5, DEC, NOV, AIO, HEX, DEC, HEX, HEX},          /* 21 */
 738 };
 739 #define NAIOCODE        (sizeof (aiotable) / sizeof (struct systable))
 740 
 741 const   struct systable doortable[] = {
 742 {"door_create", 3, DEC, NOV, HEX, HEX, DFL},                    /* 0 */
 743 {"door_revoke", 1, DEC, NOV, DEC},                              /* 1 */
 744 {"door_info",   2, DEC, NOV, DEC, HEX},                         /* 2 */
 745 {"door_call",   2, DEC, NOV, DEC, HEX},                         /* 3 */
 746 {"door_return", 4, DEC, NOV, HEX, DEC, HEX, DEC},               /* 4 (old) */
 747 {"door_cred",   1, DEC, NOV, HEX},                              /* 5 (old) */
 748 {"door_bind",   1, DEC, NOV, DEC},                              /* 6 */
 749 {"door_unbind", 0, DEC, NOV},                                   /* 7 */
 750 {"door_unref",  0, DEC, NOV},                                   /* 8 */
 751 {"door_ucred",  1, DEC, NOV, HEX},                              /* 9 */
 752 {"door_return", 5, DEC, NOV, HEX, DEC, HEX, HEX, DEC},          /* 10 */
 753 {"door_getparam", 3, DEC, NOV, DEC, DPM, HEX},                  /* 11 */
 754 {"door_setparam", 3, DEC, NOV, DEC, DPM, DEC},                  /* 12 */
 755 };
 756 #define NDOORCODE       (sizeof (doortable) / sizeof (struct systable))
 757 
 758 const   struct systable psettable[] = {
 759 {"pset_create", 2, DEC, NOV, HID, HEX},                         /* 0 */
 760 {"pset_destroy", 2, DEC, NOV, HID, PST},                        /* 1 */
 761 {"pset_assign", 4, DEC, NOV, HID, PST, DEC, HEX},               /* 2 */
 762 {"pset_info",   5, DEC, NOV, HID, PST, HEX, HEX, HEX},          /* 3 */
 763 {"pset_bind",   5, DEC, NOV, HID, PST, IDT, DEC, HEX},          /* 4 */
 764 {"pset_getloadavg", 4, DEC, NOV, HID, PST, HEX, DEC},           /* 5 */
 765 {"pset_list",   3, DEC, NOV, HID, HEX, HEX},                    /* 6 */
 766 {"pset_setattr", 3, DEC, NOV, HID, PST, HEX},                   /* 7 */
 767 {"pset_getattr", 3, DEC, NOV, HID, PST, HEX},                   /* 8 */
 768 {"pset_assign_forced",  4, DEC, NOV, HID, PST, DEC, HEX},       /* 9 */
 769 };
 770 #define NPSETCODE       (sizeof (psettable) / sizeof (struct systable))
 771 
 772 const   struct systable lwpcreatetable[] = {
 773 {"lwp_create",  3, DEC, NOV, HEX, LWF, HEX},                    /* 0 */
 774 {"lwp_create",  0, DEC, NOV},                                   /* 1 */
 775 };
 776 #define NLWPCREATECODE  (sizeof (lwpcreatetable) / sizeof (struct systable))
 777 
 778 static  const   struct systable tasksystable[] = {
 779 {"settaskid",   3, DEC, NOV, HID, DEC, HEX},                    /* 0 */
 780 {"gettaskid",   1, DEC, NOV, HID},                              /* 1 */
 781 {"getprojid",   1, DEC, NOV, HID},                              /* 2 */
 782 };
 783 #define NTASKSYSCODE    (sizeof (tasksystable) / sizeof (struct systable))
 784 
 785 static const    struct systable privsystable[] = {
 786 {"setppriv",            4, DEC, NOV, HID, PRO, PRN, PRS},       /* 0 */
 787 {"getppriv",            4, DEC, NOV, HID, HID, PRN, PRS},       /* 1 */
 788 {"getprivimplinfo",     5, DEC, NOV, HID, HID, HID, HEX, DEC},  /* 2 */
 789 {"setpflags",           3, DEC, NOV, HID, PFL, DEC},            /* 3 */
 790 {"getpflags",           2, DEC, NOV, HID, PFL},                 /* 4 */
 791 {"issetugid",           0, DEC, NOV, HID},                      /* 5 */
 792 };
 793 #define NPRIVSYSCODE    (sizeof (privsystable) / sizeof (struct systable))
 794 
 795 static  const   struct systable exacctsystable[] = {
 796 {"getacct",     5, DEC, NOV, HID, IDT, DEC, HEX, UNS},          /* 0 */
 797 {"putacct",     6, DEC, NOV, HID, IDT, DEC, HEX, UNS, HEX},     /* 1 */
 798 {"wracct",      4, DEC, NOV, HID, IDT, DEC, HEX},               /* 2 */
 799 };
 800 #define NEXACCTSYSCODE  (sizeof (exacctsystable) / sizeof (struct systable))
 801 
 802 static  const   struct systable lwpparktable[] = {
 803 {"lwp_park",    3, DEC, NOV, HID, HEX, DEC},                    /* 0 */
 804 {"lwp_unpark",  2, DEC, NOV, HID, DEC},                         /* 1 */
 805 {"lwp_unpark_all", 3, DEC, NOV, HID, HEX, DEC},                 /* 2 */
 806 {"lwp_unpark_cancel",   2, DEC, NOV, HID, DEC},                 /* 3 */
 807 {"lwp_set_park",        3, DEC, NOV, HID, HEX, DEC},            /* 4 */
 808 };
 809 #define NLWPPARKCODE    (sizeof (lwpparktable) / sizeof (struct systable))
 810 
 811 static  const   struct systable lwprwlocktable[] = {
 812 {"lwp_rwlock_rdlock", 3, DEC, NOV, HID, HEX, HEX},              /* 0 */
 813 {"lwp_rwlock_wrlock", 3, DEC, NOV, HID, HEX, HEX},              /* 1 */
 814 {"lwp_rwlock_tryrdlock", 2, DEC, NOV, HID, HEX},                /* 2 */
 815 {"lwp_rwlock_trywrlock", 2, DEC, NOV, HID, HEX},                /* 3 */
 816 {"lwp_rwlock_unlock", 2, DEC, NOV, HID, HEX},                   /* 4 */
 817 };
 818 #define NLWPRWLOCKCODE  (sizeof (lwprwlocktable) / sizeof (struct systable))
 819 
 820 static  const   struct systable sendfilevsystable[] = {
 821 {"sendfilev",   5, DEC, NOV, DEC, DEC, HEX, DEC, HEX},          /* 0 */
 822 {"sendfilev64", 5, DEC, NOV, DEC, DEC, HEX, DEC, HEX},          /* 1 */
 823 };
 824 #define NSENDFILESYSCODE \
 825                 (sizeof (sendfilevsystable) / sizeof (struct systable))
 826 
 827 static  const   struct systable lgrpsystable[] = {
 828 {"meminfo",             3, DEC, NOV, HID, NOV, MIF},            /* 0 */
 829 {"_lgrpsys",            3, DEC, NOV, DEC, DEC, NOV},            /* 1 */
 830 {"lgrp_version",        3, DEC, NOV, HID, DEC, NOV},            /* 2 */
 831 {"_lgrpsys",            3, DEC, NOV, DEC, HEX, HEX},            /* 3 */
 832 {"lgrp_affinity_get",   3, DEC, NOV, HID, NOV, LAF},            /* 4 */
 833 {"lgrp_affinity_set",   3, DEC, NOV, HID, NOV, LAF},            /* 5 */
 834 {"lgrp_latency",        3, DEC, NOV, HID, DEC, DEC},            /* 6 */
 835 };
 836 #define NLGRPSYSCODE    (sizeof (lgrpsystable) / sizeof (struct systable))
 837 
 838 static  const   struct systable rusagesystable[] = {
 839 {"getrusage",           2, DEC, NOV, HID, HEX},                 /* 0 */
 840 {"getrusage_chld",      2, DEC, NOV, HID, HEX},                 /* 1 */
 841 {"getrusage_lwp",       2, DEC, NOV, HID, HEX},                 /* 2 */
 842 {"getvmusage",          5, DEC, NOV, HID, HEX, DEC, HEX, HEX},  /* 3 */
 843 };
 844 #define NRUSAGESYSCODE \
 845                 (sizeof (rusagesystable) / sizeof (struct systable))
 846 
 847 static const    struct systable ucredsystable[] = {
 848 {"ucred_get",   3, DEC, NOV, HID, DEC, HEX},
 849 {"getpeerucred", 3, DEC, NOV, HID, DEC, HEX},
 850 };
 851 #define NUCREDSYSCODE \
 852                 (sizeof (ucredsystable) / sizeof (struct systable))
 853 
 854 const   struct systable portfstable[] = {
 855 {"port_create", 2, DEC, NOV, HID, DEC},                         /* 0 */
 856 {"port_associate",      6, DEC, NOV, HID, DEC, DEC, HEX, HEX, HEX}, /* 1 */
 857 {"port_dissociate",     4, DEC, NOV, HID, DEC, DEC, HEX},       /* 2 */
 858 {"port_send",   4, DEC, NOV, HID, DEC, HEX, HEX},               /* 3 */
 859 {"port_sendn",  6, DEC, DEC, HID, HEX, HEX, DEC, HEX, HEX},     /* 4 */
 860 {"port_get",    4, DEC, NOV, HID, DEC, HEX, HEX},               /* 5 */
 861 {"port_getn",   6, DEC, DEC, HID, DEC, HEX, DEC, DEC, HEX},     /* 6 */
 862 {"port_alert",  5, DEC, NOV, HID, DEC, HEX, HEX, HEX},          /* 7 */
 863 {"port_dispatch", 6, DEC, NOV, HID, DEC, DEC, HEX, HEX, HEX},   /* 8 */
 864 };
 865 #define NPORTCODE       (sizeof (portfstable) / sizeof (struct systable))
 866 
 867 static const struct systable zonetable[] = {
 868 {"zone_create", 2, DEC, NOV, HID, HEX},                         /* 0 */
 869 {"zone_destroy", 2, DEC, NOV, HID, DEC},                        /* 1 */
 870 {"zone_getattr", 5, DEC, NOV, HID, DEC, ZGA, HEX, DEC},         /* 2 */
 871 {"zone_enter",  2, DEC, NOV, HID, DEC},                         /* 3 */
 872 {"zone_list",   3, DEC, NOV, HID, HEX, HEX},                    /* 4 */
 873 {"zone_shutdown", 2, DEC, NOV, HID, DEC},                       /* 5 */
 874 {"zone_lookup", 2, DEC, NOV, HID, STG},                         /* 6 */
 875 {"zone_boot",   2, DEC, NOV, HID, DEC},                         /* 7 */
 876 {"zone_version", 2, HEX, NOV, HID, DEC},                        /* 8 */
 877 {"zone_setattr", 5, DEC, NOV, HID, DEC, ZGA, HEX, DEC},         /* 9 */
 878 {"zone_add_datalink", 3, DEC, NOV, HID, DEC, STG},              /* 10 */
 879 {"zone_remove_datalink", 3, DEC, NOV, HID, DEC, STG},           /* 11 */
 880 {"zone_check_datalink", 3, DEC, NOV, HID, HEX, STG},            /* 12 */
 881 {"zone_list_datalink", 4, DEC, NOV, HID, DEC, HEX, HEX},        /* 13 */
 882 };
 883 #define NZONECODE       (sizeof (zonetable) / sizeof (struct systable))
 884 
 885 static const struct systable labeltable[] = {
 886 {"labelsys",    3, DEC, NOV, HID, HEX, HEX},                    /* 0 */
 887 {"is_system_labeled", 1, DEC, NOV, HID},                        /* 1 */
 888 {"tnrh",        3, DEC, NOV, HID, TND, HEX},                    /* 2 */
 889 {"tnrhtp",      3, DEC, NOV, HID, TND, HEX},                    /* 3 */
 890 {"tnmlp",       3, DEC, NOV, HID, TND, HEX},                    /* 4 */
 891 {"getlabel",    3, DEC, NOV, HID, STG, HEX},                    /* 5 */
 892 {"fgetlabel",   3, DEC, NOV, HID, DEC, HEX},                    /* 6 */
 893 };
 894 #define NLABELCODE      (sizeof (labeltable) / sizeof (struct systable))
 895 
 896 const   struct systable forktable[] = {
 897 /* parent codes */
 898 {"forkx",       2, DEC, NOV, HID, FXF},                         /* 0 */
 899 {"forkallx",    2, DEC, NOV, HID, FXF},                         /* 1 */
 900 {"vforkx",      2, DEC, NOV, HID, FXF},                         /* 2 */
 901 /* child codes */
 902 {"forkx",       0, DEC, NOV},                                   /* 3 */
 903 {"forkallx",    0, DEC, NOV},                                   /* 4 */
 904 {"vforkx",      0, DEC, NOV},                                   /* 5 */
 905 };
 906 #define NFORKCODE       (sizeof (forktable) / sizeof (struct systable))
 907 
 908 const   struct systable sidsystable[] = {
 909 {"allocids",    4, UNS, UNS, HID, DEC, DEC, DEC},               /* 0 */
 910 {"idmap_reg",   2, DEC, NOV, HID, DEC},                         /* 1 */
 911 {"idmap_unreg", 2, DEC, NOV, HID, DEC},                         /* 2 */
 912 };
 913 #define NSIDSYSCODE     (sizeof (sidsystable) / sizeof (struct systable))
 914 
 915 const   struct systable utimesystable[] = {
 916 {"futimens",    3, DEC, NOV, HID, DEC, HEX},                    /* 0 */
 917 {"utimensat",   5, DEC, NOV, HID, ATC, STG, HEX, SNF},          /* 1 */
 918 };
 919 #define NUTIMESYSCODE   (sizeof (utimesystable) / sizeof (struct systable))
 920 
 921 const   struct systable sockconfigtable[] = {
 922 {"sockconfig", 5, DEC, NOV, SKC, DEC, DEC, DEC, STG},   /* 0 */
 923 {"sockconfig", 4, DEC, NOV, SKC, DEC, DEC, DEC},        /* 1 */
 924 {"sockconfig", 3, DEC, NOV, SKC, STG, HEX },            /* 2 */
 925 {"sockconfig", 2, DEC, NOV, SKC, STG },                 /* 3 */
 926 };
 927 #define NSOCKCONFIGCODE (sizeof (sockconfigtable) / sizeof (struct systable))
 928 
 929 const   struct sysalias sysalias[] = {
 930         { "exit",       SYS_exit        },
 931         { "fork",       SYS_forksys     },
 932         { "fork1",      SYS_forksys     },
 933         { "forkall",    SYS_forksys     },
 934         { "forkx",      SYS_forksys     },
 935         { "forkallx",   SYS_forksys     },
 936         { "vforkx",     SYS_forksys     },
 937         { "sbrk",       SYS_brk         },
 938         { "getppid",    SYS_getpid      },
 939         { "geteuid",    SYS_getuid      },
 940         { "getpgrp",    SYS_pgrpsys     },
 941         { "setpgrp",    SYS_pgrpsys     },
 942         { "getsid",     SYS_pgrpsys     },
 943         { "setsid",     SYS_pgrpsys     },
 944         { "getpgid",    SYS_pgrpsys     },
 945         { "setpgid",    SYS_pgrpsys     },
 946         { "getegid",    SYS_getgid      },
 947         { "msgget",     SYS_msgsys      },
 948         { "msgctl",     SYS_msgsys      },
 949         { "msgctl64",   SYS_msgsys      },
 950         { "msgrcv",     SYS_msgsys      },
 951         { "msgsnd",     SYS_msgsys      },
 952         { "msgids",     SYS_msgsys      },
 953         { "msgsnap",    SYS_msgsys      },
 954         { "msgop",      SYS_msgsys      },
 955         { "shmat",      SYS_shmsys      },
 956         { "shmctl",     SYS_shmsys      },
 957         { "shmctl64",   SYS_shmsys      },
 958         { "shmdt",      SYS_shmsys      },
 959         { "shmget",     SYS_shmsys      },
 960         { "shmids",     SYS_shmsys      },
 961         { "shmop",      SYS_shmsys      },
 962         { "semctl",     SYS_semsys      },
 963         { "semctl64",   SYS_semsys      },
 964         { "semget",     SYS_semsys      },
 965         { "semids",     SYS_semsys      },
 966         { "semop",      SYS_semsys      },
 967         { "semtimedop", SYS_semsys      },
 968         { "uname",      SYS_utssys      },
 969         { "ustat",      SYS_utssys      },
 970         { "fusers",     SYS_utssys      },
 971         { "exec",       SYS_execve      },
 972         { "execl",      SYS_execve      },
 973         { "execv",      SYS_execve      },
 974         { "execle",     SYS_execve      },
 975         { "execlp",     SYS_execve      },
 976         { "execvp",     SYS_execve      },
 977         { "sigfillset", SYS_sigpending  },
 978         { "getcontext", SYS_context     },
 979         { "setcontext", SYS_context     },
 980         { "getustack",  SYS_context     },
 981         { "setustack",  SYS_context     },
 982         { "hrtcntl",    SYS_hrtsys      },
 983         { "hrtalarm",   SYS_hrtsys      },
 984         { "hrtsleep",   SYS_hrtsys      },
 985         { "hrtcancel",  SYS_hrtsys      },
 986         { "aioread",    SYS_kaio        },
 987         { "aiowrite",   SYS_kaio        },
 988         { "aiowait",    SYS_kaio        },
 989         { "aiocancel",  SYS_kaio        },
 990         { "aionotify",  SYS_kaio        },
 991         { "audit",      SYS_auditsys    },
 992         { "door_create",        SYS_door        },
 993         { "door_revoke",        SYS_door        },
 994         { "door_info",          SYS_door        },
 995         { "door_call",          SYS_door        },
 996         { "door_return",        SYS_door        },
 997         { "door_bind",          SYS_door        },
 998         { "door_unbind",        SYS_door        },
 999         { "door_unref",         SYS_door        },
1000         { "door_ucred",         SYS_door        },
1001         { "door_getparam",      SYS_door        },
1002         { "door_setparam",      SYS_door        },
1003         { "pset_create",        SYS_pset        },
1004         { "pset_destroy",       SYS_pset        },
1005         { "pset_assign",        SYS_pset        },
1006         { "pset_info",          SYS_pset        },
1007         { "pset_bind",          SYS_pset        },
1008         { "pset_getloadavg",    SYS_pset        },
1009         { "pset_list",          SYS_pset        },
1010         { "pset_setattr",       SYS_pset        },
1011         { "pset_getattr",       SYS_pset        },
1012         { "pset_assign_forced", SYS_pset        },
1013         { "settaskid",          SYS_tasksys     },
1014         { "gettaskid",          SYS_tasksys     },
1015         { "getprojid",          SYS_tasksys     },
1016         { "setppriv",           SYS_privsys     },
1017         { "getppriv",           SYS_privsys     },
1018         { "getprivimplinfo",    SYS_privsys     },
1019         { "setpflags",          SYS_privsys     },
1020         { "getpflags",          SYS_privsys     },
1021         { "getacct",            SYS_exacctsys   },
1022         { "putacct",            SYS_exacctsys   },
1023         { "wracct",             SYS_exacctsys   },
1024         { "lwp_cond_timedwait", SYS_lwp_cond_wait },
1025         { "lwp_sema_wait",      SYS_lwp_sema_timedwait },
1026         { "lwp_park",           SYS_lwp_park    },
1027         { "lwp_unpark",         SYS_lwp_park    },
1028         { "lwp_unpark_all",     SYS_lwp_park    },
1029         { "lwp_rwlock_rdlock",  SYS_lwp_rwlock_sys },
1030         { "lwp_rwlock_wrlock",  SYS_lwp_rwlock_sys },
1031         { "lwp_rwlock_tryrdlock", SYS_lwp_rwlock_sys },
1032         { "lwp_rwlock_trywrlock", SYS_lwp_rwlock_sys },
1033         { "lwp_rwlock_unlock",  SYS_lwp_rwlock_sys },
1034         { "lwp_mutex_lock",     SYS_lwp_mutex_timedlock },
1035         { "sendfilev64",        SYS_sendfilev   },
1036         { "creat",              SYS_open        },
1037         { "creat64",            SYS_open64      },
1038         { "openattrdirat",      SYS_openat      },
1039         { "lgrpsys",            SYS_lgrpsys     },
1040         { "getrusage",          SYS_rusagesys   },
1041         { "getrusage_chld",     SYS_rusagesys   },
1042         { "getrusage_lwp",      SYS_rusagesys   },
1043         { "getvmusage",         SYS_rusagesys   },
1044         { "getpeerucred",       SYS_ucredsys    },
1045         { "ucred_get",          SYS_ucredsys    },
1046         { "port_create",        SYS_port        },
1047         { "port_associate",     SYS_port        },
1048         { "port_dissociate",    SYS_port        },
1049         { "port_send",          SYS_port        },
1050         { "port_sendn",         SYS_port        },
1051         { "port_get",           SYS_port        },
1052         { "port_getn",          SYS_port        },
1053         { "port_alert",         SYS_port        },
1054         { "port_dispatch",      SYS_port        },
1055         { "zone_create",        SYS_zone        },
1056         { "zone_destroy",       SYS_zone        },
1057         { "zone_getattr",       SYS_zone        },
1058         { "zone_setattr",       SYS_zone        },
1059         { "zone_enter",         SYS_zone        },
1060         { "getzoneid",          SYS_zone        },
1061         { "zone_list",          SYS_zone        },
1062         { "zone_shutdown",      SYS_zone        },
1063         { "zone_add_datalink",  SYS_zone        },
1064         { "zone_remove_datalink", SYS_zone      },
1065         { "zone_check_datalink", SYS_zone       },
1066         { "zone_list_datalink", SYS_zone        },
1067         { "is_system_labeled",  SYS_labelsys    },
1068         { "tnrh",               SYS_labelsys    },
1069         { "tnrhtp",             SYS_labelsys    },
1070         { "tnmlp",              SYS_labelsys    },
1071         { "getlabel",           SYS_labelsys    },
1072         { "fgetlabel",          SYS_labelsys    },
1073         { "getrctl",            SYS_rctlsys     },
1074         { "setrctl",            SYS_rctlsys     },
1075         { "rctlsys_lst",        SYS_rctlsys     },
1076         { "rctlsys_ctl",        SYS_rctlsys     },
1077         { "allocids",           SYS_sidsys      },
1078         { "futimens",           SYS_utimesys    },
1079         { "utimensat",          SYS_utimesys    },
1080         { "poll",               SYS_pollsys     },
1081         { "umount",             SYS_umount2     },
1082         { "wait",               SYS_waitid      },
1083         {  NULL,        0       }       /* end-of-list */
1084 };
1085 
1086 /*
1087  * Return structure to interpret system call with sub-codes.
1088  */
1089 const struct systable *
1090 subsys(int syscall, int subcode)
1091 {
1092         const struct systable *stp = NULL;
1093 
1094         if (subcode != -1) {
1095                 switch (syscall) {
1096                 case SYS_faccessat:
1097                         if ((unsigned)subcode < NACCESSCODE)
1098                                 stp = &faccessattable[subcode];
1099                         break;
1100                 case SYS_fchmodat:
1101                         if ((unsigned)subcode < NCHMODCODE)
1102                                 stp = &fchmodattable[subcode];
1103                         break;
1104                 case SYS_fchownat:
1105                         if ((unsigned)subcode < NCHOWNCODE)
1106                                 stp = &fchownattable[subcode];
1107                         break;
1108                 case SYS_mkdirat:
1109                         if ((unsigned)subcode < NMKDIRCODE)
1110                                 stp = &mkdiratattable[subcode];
1111                         break;
1112                 case SYS_mknodat:
1113                         if ((unsigned)subcode < NMKMODCODE)
1114                                 stp = &mknodatattable[subcode];
1115                         break;
1116                 case SYS_renameat:
1117                         if ((unsigned)subcode < NRENAMECODE)
1118                                 stp = &renameattable[subcode];
1119                         break;
1120                 case SYS_linkat:
1121                         if ((unsigned)subcode < NLINKATCODE)
1122                                 stp = &linkattable[subcode];
1123                         break;
1124                 case SYS_unlinkat:
1125                         if ((unsigned)subcode < NUNLINKCODE)
1126                                 stp = &unlinkattable[subcode];
1127                         break;
1128                 case SYS_symlinkat:
1129                         if ((unsigned)subcode < NSYMLINKCODE)
1130                                 stp = &symlinkattable[subcode];
1131                         break;
1132                 case SYS_readlinkat:
1133                         if ((unsigned)subcode < NREADLINKCODE)
1134                                 stp = &readlinkattable[subcode];
1135                         break;
1136                 case SYS_fstatat:
1137                         if ((unsigned)subcode < NSTATCODE)
1138                                 stp = &fstatattable[subcode];
1139                         break;
1140                 case SYS_fstatat64:
1141                         if ((unsigned)subcode < NSTAT64CODE)
1142                                 stp = &fstatat64table[subcode];
1143                         break;
1144                 case SYS_openat:
1145                         if ((unsigned)subcode < NOPENATCODE)
1146                                 stp = &openattable[subcode];
1147                         break;
1148                 case SYS_openat64:
1149                         if ((unsigned)subcode < NOPENAT64CODE)
1150                                 stp = &openat64table[subcode];
1151                         break;
1152                 case SYS_open:
1153                         if ((unsigned)subcode < NOPENCODE)
1154                                 stp = &opentable[subcode];
1155                         break;
1156                 case SYS_open64:
1157                         if ((unsigned)subcode < NOPEN64CODE)
1158                                 stp = &open64table[subcode];
1159                         break;
1160                 case SYS_msgsys:        /* msgsys() */
1161                         if ((unsigned)subcode < NMSGCODE)
1162                                 stp = &msgtable[subcode];
1163                         break;
1164                 case SYS_semsys:        /* semsys() */
1165                         if ((unsigned)subcode < NSEMCODE)
1166                                 stp = &semtable[subcode];
1167                         break;
1168                 case SYS_shmsys:        /* shmsys() */
1169                         if ((unsigned)subcode < NSHMCODE)
1170                                 stp = &shmtable[subcode];
1171                         break;
1172                 case SYS_pgrpsys:       /* pgrpsys() */
1173                         if ((unsigned)subcode < NPIDCODE)
1174                                 stp = &pidtable[subcode];
1175                         break;
1176                 case SYS_utssys:        /* utssys() */
1177                         if ((unsigned)subcode < NUTSCODE)
1178                                 stp = &utstable[subcode];
1179                         break;
1180                 case SYS_sysfs:         /* sysfs() */
1181                         if ((unsigned)subcode < NSFSCODE)
1182                                 stp = &sfstable[subcode];
1183                         break;
1184                 case SYS_sigpending:    /* sigpending()/sigfillset() */
1185                         if ((unsigned)subcode < NSGPCODE)
1186                                 stp = &sgptable[subcode];
1187                         break;
1188                 case SYS_context:       /* [get|set]context() */
1189                         if ((unsigned)subcode < NCTXCODE)
1190                                 stp = &ctxtable[subcode];
1191                         break;
1192                 case SYS_hrtsys:        /* hrtsys() */
1193                         if ((unsigned)subcode < NHRTCODE)
1194                                 stp = &hrttable[subcode];
1195                         break;
1196                 case SYS_corectl:       /* corectl() */
1197                         if ((unsigned)subcode < NCORCODE)
1198                                 stp = &cortable[subcode];
1199                         break;
1200                 case SYS_kaio:          /* kaio() */
1201                         if ((unsigned)subcode < NAIOCODE)
1202                                 stp = &aiotable[subcode];
1203                         break;
1204                 case SYS_door:          /* doors */
1205                         if ((unsigned)subcode < NDOORCODE)
1206                                 stp = &doortable[subcode];
1207                         break;
1208                 case SYS_pset:          /* pset() */
1209                         if ((unsigned)subcode < NPSETCODE)
1210                                 stp = &psettable[subcode];
1211                         break;
1212                 case SYS_lwp_create:    /* lwp_create() */
1213                         if ((unsigned)subcode < NLWPCREATECODE)
1214                                 stp = &lwpcreatetable[subcode];
1215                         break;
1216                 case SYS_tasksys:       /* tasks */
1217                         if ((unsigned)subcode < NTASKSYSCODE)
1218                                 stp = &tasksystable[subcode];
1219                         break;
1220                 case SYS_exacctsys:     /* exacct */
1221                         if ((unsigned)subcode < NEXACCTSYSCODE)
1222                                 stp = &exacctsystable[subcode];
1223                         break;
1224                 case SYS_privsys:       /* privileges */
1225                         if ((unsigned)subcode < NPRIVSYSCODE)
1226                                 stp = &privsystable[subcode];
1227                         break;
1228                 case SYS_lwp_park:      /* lwp_park */
1229                         if ((unsigned)subcode < NLWPPARKCODE)
1230                                 stp = &lwpparktable[subcode];
1231                         break;
1232                 case SYS_lwp_rwlock_sys:
1233                         if ((unsigned)subcode < NLWPRWLOCKCODE)
1234                                 stp = &lwprwlocktable[subcode];
1235                         break;
1236                 case SYS_sendfilev:     /* sendfilev */
1237                         if ((unsigned)subcode < NSENDFILESYSCODE)
1238                                 stp = &sendfilevsystable[subcode];
1239                         break;
1240                 case SYS_lgrpsys:       /* lgrpsys */
1241                         if ((unsigned)subcode < NLGRPSYSCODE)
1242                                 stp = &lgrpsystable[subcode];
1243                         break;
1244                 case SYS_rusagesys:     /* rusagesys */
1245                         if ((unsigned)subcode < NRUSAGESYSCODE)
1246                                 stp = &rusagesystable[subcode];
1247                         break;
1248                 case SYS_fcntl:         /* fcntl */
1249                         if ((unsigned)subcode < NFCNTLCODE)
1250                                 stp = &fcntltable[subcode];
1251                         break;
1252                 case SYS_ucredsys:
1253                         if ((unsigned)subcode < NUCREDSYSCODE)
1254                                 stp = &ucredsystable[subcode];
1255                         break;
1256                 case SYS_port:  /* portfs */
1257                         if ((unsigned)subcode < NPORTCODE)
1258                                 stp = &portfstable[subcode];
1259                         break;
1260                 case SYS_zone:          /* zone family */
1261                         if ((unsigned)subcode < NZONECODE)
1262                                 stp = &zonetable[subcode];
1263                         break;
1264                 case SYS_labelsys:      /* label family */
1265                         if ((unsigned)subcode < NLABELCODE)
1266                                 stp = &labeltable[subcode];
1267                         break;
1268                 case SYS_rctlsys:       /* rctl family */
1269                         if ((unsigned)subcode < NRCTLCODE)
1270                                 stp = &rctltable[subcode];
1271                         break;
1272                 case SYS_forksys:       /* fork family */
1273                         if ((unsigned)subcode < NFORKCODE)
1274                                 stp = &forktable[subcode];
1275                         break;
1276                 case SYS_sidsys:        /* SID family */
1277                         if ((unsigned)subcode < NSIDSYSCODE)
1278                                 stp = &sidsystable[subcode];
1279                         break;
1280                 case SYS_utimesys:      /* utime family */
1281                         if ((unsigned)subcode < NUTIMESYSCODE)
1282                                 stp = &utimesystable[subcode];
1283                         break;
1284                 case SYS_sockconfig:    /* sockconfig family */
1285                         if ((unsigned)subcode < NSOCKCONFIGCODE)
1286                                 stp = &sockconfigtable[subcode];
1287                         break;
1288                 }
1289         }
1290 
1291         if (stp == NULL)
1292                 stp = &systable[((unsigned)syscall < SYSEND)? syscall : 0];
1293 
1294         return (stp);
1295 }
1296 
1297 /*
1298  * Return the name of the system call.
1299  */
1300 const char *
1301 sysname(private_t *pri, int syscall, int subcode)
1302 {
1303         const struct systable *stp = subsys(syscall, subcode);
1304         const char *name = stp->name;        /* may be NULL */
1305 
1306         if (name == NULL) {             /* manufacture a name */
1307                 (void) sprintf(pri->sys_name, "sys#%d", syscall);
1308                 name = pri->sys_name;
1309         }
1310 
1311         return (name);
1312 }
1313 
1314 /*
1315  * Return the name of the signal.
1316  * Return NULL if unknown signal.
1317  */
1318 const char *
1319 rawsigname(private_t *pri, int sig)
1320 {
1321         /*
1322          * The C library function sig2str() omits the leading "SIG".
1323          */
1324         (void) strcpy(pri->raw_sig_name, "SIG");
1325 
1326         if (sig > 0 && sig2str(sig, pri->raw_sig_name+3) == 0)
1327                 return (pri->raw_sig_name);
1328         return (NULL);
1329 }
1330 
1331 /*
1332  * Return the name of the signal.
1333  * Manufacture a name for unknown signal.
1334  */
1335 const char *
1336 signame(private_t *pri, int sig)
1337 {
1338         const char *name = rawsigname(pri, sig);
1339 
1340         if (name == NULL) {                     /* manufacture a name */
1341                 (void) sprintf(pri->sig_name, "SIG#%d", sig);
1342                 name = pri->sig_name;
1343         }
1344 
1345         return (name);
1346 }
1347 
1348 /*
1349  * Determine the subcode for this syscall, if any.
1350  */
1351 int
1352 getsubcode(private_t *pri)
1353 {
1354         const lwpstatus_t *Lsp = pri->lwpstat;
1355         int syscall = Lsp->pr_syscall;
1356         int nsysarg = Lsp->pr_nsysarg;
1357         int subcode = -1;
1358         int arg0;
1359 
1360         if (syscall > 0 && nsysarg > 0 && !prismember(&rawout, syscall)) {
1361                 arg0 = Lsp->pr_sysarg[0];
1362                 switch (syscall) {
1363                 case SYS_utssys:        /* utssys() */
1364                         if (nsysarg > 2)
1365                                 subcode = Lsp->pr_sysarg[2];
1366                         break;
1367                 case SYS_faccessat:
1368                         if (nsysarg > 3)
1369                                 subcode = ((int)Lsp->pr_sysarg[0] == AT_FDCWD &&
1370                                     Lsp->pr_sysarg[3] == 0)? 1 : 0;
1371                         break;
1372                 case SYS_fchmodat:
1373                         if (nsysarg > 1 && Lsp->pr_sysarg[1] == 0) {
1374                                 subcode = 3;
1375                                 break;
1376                         }
1377                         if (nsysarg > 0 && (int)Lsp->pr_sysarg[0] != AT_FDCWD) {
1378                                 subcode = 0;
1379                                 break;
1380                         }
1381                         if (nsysarg > 3)
1382                                 subcode = (Lsp->pr_sysarg[3] == 0)? 1 :
1383                                     (Lsp->pr_sysarg[3] == AT_SYMLINK_NOFOLLOW)?
1384                                     2 : 0;
1385                         break;
1386                 case SYS_fchownat:
1387                         if (nsysarg > 1 && Lsp->pr_sysarg[1] == 0) {
1388                                 subcode = 3;
1389                                 break;
1390                         }
1391                         if (nsysarg > 0 && (int)Lsp->pr_sysarg[0] != AT_FDCWD) {
1392                                 subcode = 0;
1393                                 break;
1394                         }
1395                         if (nsysarg > 4)
1396                                 subcode = (Lsp->pr_sysarg[4] == 0)? 1 :
1397                                     (Lsp->pr_sysarg[4] == AT_SYMLINK_NOFOLLOW)?
1398                                     2 : 0;
1399                         break;
1400                 case SYS_mkdirat:
1401                 case SYS_mknodat:
1402                 case SYS_readlinkat:
1403                         if (nsysarg > 0)
1404                                 subcode = ((int)Lsp->pr_sysarg[0] == AT_FDCWD)?
1405                                     1 : 0;
1406                         break;
1407                 case SYS_renameat:
1408                         if (nsysarg > 2)
1409                                 subcode = ((int)Lsp->pr_sysarg[0] == AT_FDCWD &&
1410                                     (int)Lsp->pr_sysarg[2] == AT_FDCWD)? 1 : 0;
1411                         break;
1412                 case SYS_linkat:
1413                         if (nsysarg > 4)
1414                                 subcode = ((int)Lsp->pr_sysarg[0] == AT_FDCWD &&
1415                                     (int)Lsp->pr_sysarg[2] == AT_FDCWD &&
1416                                     Lsp->pr_sysarg[4] == 0)? 1 : 0;
1417                         break;
1418                 case SYS_unlinkat:
1419                         if (nsysarg > 2)
1420                                 subcode =
1421                                     ((int)Lsp->pr_sysarg[0] != AT_FDCWD)? 0 :
1422                                     (Lsp->pr_sysarg[2] == AT_REMOVEDIR)? 2 :
1423                                     (Lsp->pr_sysarg[2] == 0)? 1 : 0;
1424                         break;
1425                 case SYS_symlinkat:
1426                         if (nsysarg > 1)
1427                                 subcode = ((int)Lsp->pr_sysarg[1] == AT_FDCWD)?
1428                                     1 : 0;
1429                         break;
1430                 case SYS_fstatat:
1431                 case SYS_fstatat64:
1432                         if (nsysarg > 1 && Lsp->pr_sysarg[1] == 0) {
1433                                 subcode = 3;
1434                                 break;
1435                         }
1436                         if (nsysarg > 0 && (int)Lsp->pr_sysarg[0] != AT_FDCWD) {
1437                                 subcode = 0;
1438                                 break;
1439                         }
1440                         if (nsysarg > 3)
1441                                 subcode = (Lsp->pr_sysarg[3] == 0)? 1 :
1442                                     (Lsp->pr_sysarg[3] == AT_SYMLINK_NOFOLLOW)?
1443                                     2 : 0;
1444                         break;
1445                 case SYS_openat:        /* openat() w/ and w/o AT_FDCWD */
1446                 case SYS_openat64:      /* and with and w/o O_CREAT */
1447                         if (nsysarg > 2)
1448                                 subcode = ((int)Lsp->pr_sysarg[0] == AT_FDCWD)?
1449                                     ((Lsp->pr_sysarg[2] & O_CREAT)? 3 : 2) :
1450                                     ((Lsp->pr_sysarg[2] & O_CREAT)? 1 : 0);
1451                         break;
1452                 case SYS_open:          /* open() w/ and w/o O_CREAT */
1453                 case SYS_open64:
1454                         if (nsysarg > 1)
1455                                 subcode = (Lsp->pr_sysarg[1] & O_CREAT)? 1 : 0;
1456                         break;
1457                 case SYS_kaio:          /* kaio() */
1458                         subcode = arg0 & ~AIO_POLL_BIT;
1459                         break;
1460                 case SYS_door:          /* doors */
1461                         if (nsysarg > 5)
1462                                 subcode = Lsp->pr_sysarg[5];
1463                         break;
1464                 case SYS_lwp_create:    /* lwp_create() */
1465                         subcode =       /* 0 for parent, 1 for child */
1466                             (Lsp->pr_why == PR_SYSEXIT && Lsp->pr_errno == 0 &&
1467                             Lsp->pr_rval1 == 0);
1468                         break;
1469                 case SYS_forksys:       /* forksys */
1470                         subcode = arg0;
1471                         if (Lsp->pr_why == PR_SYSEXIT && Lsp->pr_errno == 0 &&
1472                             pri->Rval2 != 0) /* this is the child */
1473                                 subcode += 3;
1474                         break;
1475                 case SYS_msgsys:        /* msgsys() */
1476                 case SYS_semsys:        /* semsys() */
1477                 case SYS_shmsys:        /* shmsys() */
1478                 case SYS_pgrpsys:       /* pgrpsys() */
1479                 case SYS_sysfs:         /* sysfs() */
1480                 case SYS_sigpending:    /* sigpending()/sigfillset() */
1481                 case SYS_context:       /* [get|set]context() */
1482                 case SYS_hrtsys:        /* hrtsys() */
1483                 case SYS_corectl:       /* corectl() */
1484                 case SYS_pset:          /* pset() */
1485                 case SYS_tasksys:       /* tasks */
1486                 case SYS_privsys:       /* privileges */
1487                 case SYS_exacctsys:     /* exacct */
1488                 case SYS_lwp_park:      /* lwp_park */
1489                 case SYS_lwp_rwlock_sys: /* lwp_rwlock_*() */
1490                 case SYS_sendfilev:     /* sendfilev */
1491                 case SYS_lgrpsys:       /* lgrpsys */
1492                 case SYS_rusagesys:     /* rusagesys */
1493                 case SYS_ucredsys:      /* ucredsys */
1494                 case SYS_zone:          /* zone */
1495                 case SYS_labelsys:      /* labelsys */
1496                 case SYS_rctlsys:       /* rctlsys */
1497                 case SYS_sidsys:        /* sidsys */
1498                 case SYS_utimesys:      /* utimesys */
1499                 case SYS_sockconfig:    /* sockconfig */
1500                         subcode = arg0;
1501                         break;
1502                 case SYS_fcntl:         /* fcntl() */
1503                         if (nsysarg > 2) {
1504                                 switch (Lsp->pr_sysarg[1]) {
1505                                 default:        subcode = 0; break;
1506                                 case F_GETFL:
1507                                 case F_GETOWN:
1508                                 case F_GETXFL:  subcode = 1; break;
1509                                 case F_SETFL:   subcode = 2; break;
1510                                 }
1511                         }
1512                         break;
1513                 case SYS_port:          /* portfs */
1514                         subcode = arg0 & PORT_CODE_MASK;
1515                         break;
1516                 }
1517         }
1518 
1519         return (subcode);
1520 }
1521 
1522 /*
1523  * Return the maximum number of system calls, counting
1524  * all system calls with subcodes as separate calls.
1525  */
1526 int
1527 maxsyscalls()
1528 {
1529         return (PRMAXSYS + 1
1530             + NACCESSCODE - 1
1531             + NCHMODCODE - 1
1532             + NCHOWNCODE - 1
1533             + NMKDIRCODE - 1
1534             + NMKMODCODE - 1
1535             + NRENAMECODE - 1
1536             + NLINKATCODE - 1
1537             + NUNLINKCODE - 1
1538             + NSYMLINKCODE - 1
1539             + NREADLINKCODE - 1
1540             + NSTATCODE - 1
1541             + NSTAT64CODE - 1
1542             + NOPENATCODE - 1
1543             + NOPENAT64CODE - 1
1544             + NOPENCODE - 1
1545             + NOPEN64CODE - 1
1546             + NMSGCODE - 1
1547             + NSEMCODE - 1
1548             + NSHMCODE - 1
1549             + NPIDCODE - 1
1550             + NSFSCODE - 1
1551             + NUTSCODE - 1
1552             + NSGPCODE - 1
1553             + NCTXCODE - 1
1554             + NHRTCODE - 1
1555             + NCORCODE - 1
1556             + NAIOCODE - 1
1557             + NDOORCODE - 1
1558             + NPSETCODE - 1
1559             + NLWPCREATECODE - 1
1560             + NTASKSYSCODE - 1
1561             + NEXACCTSYSCODE - 1
1562             + NLWPPARKCODE - 1
1563             + NLWPRWLOCKCODE - 1
1564             + NSENDFILESYSCODE - 1
1565             + NLGRPSYSCODE - 1
1566             + NRUSAGESYSCODE - 1
1567             + NFCNTLCODE - 1
1568             + NPRIVSYSCODE - 1
1569             + NUCREDSYSCODE - 1
1570             + NPORTCODE - 1
1571             + NZONECODE - 1
1572             + NLABELCODE - 1
1573             + NRCTLCODE - 1
1574             + NFORKCODE - 1
1575             + NSIDSYSCODE - 1
1576             + NUTIMESYSCODE - 1
1577             + NSOCKCONFIGCODE - 1);
1578 }
1579 
1580 /*
1581  * Return the number of subcodes for the specified system call number.
1582  */
1583 int
1584 nsubcodes(int syscall)
1585 {
1586         switch (syscall) {
1587         case SYS_faccessat:
1588                 return (NACCESSCODE);
1589         case SYS_fchmodat:
1590                 return (NCHMODCODE);
1591         case SYS_fchownat:
1592                 return (NCHOWNCODE);
1593         case SYS_mkdirat:
1594                 return (NMKDIRCODE);
1595         case SYS_mknodat:
1596                 return (NMKMODCODE);
1597         case SYS_renameat:
1598                 return (NRENAMECODE);
1599         case SYS_linkat:
1600                 return (NLINKATCODE);
1601         case SYS_unlinkat:
1602                 return (NUNLINKCODE);
1603         case SYS_symlinkat:
1604                 return (NSYMLINKCODE);
1605         case SYS_readlinkat:
1606                 return (NREADLINKCODE);
1607         case SYS_fstatat:
1608                 return (NSTATCODE);
1609         case SYS_fstatat64:
1610                 return (NSTAT64CODE);
1611         case SYS_openat:
1612                 return (NOPENATCODE);
1613         case SYS_openat64:
1614                 return (NOPENAT64CODE);
1615         case SYS_open:
1616                 return (NOPENCODE);
1617         case SYS_open64:
1618                 return (NOPEN64CODE);
1619         case SYS_msgsys:
1620                 return (NMSGCODE);
1621         case SYS_semsys:
1622                 return (NSEMCODE);
1623         case SYS_shmsys:
1624                 return (NSHMCODE);
1625         case SYS_pgrpsys:
1626                 return (NPIDCODE);
1627         case SYS_utssys:
1628                 return (NUTSCODE);
1629         case SYS_sysfs:
1630                 return (NSFSCODE);
1631         case SYS_sigpending:
1632                 return (NSGPCODE);
1633         case SYS_context:
1634                 return (NCTXCODE);
1635         case SYS_hrtsys:
1636                 return (NHRTCODE);
1637         case SYS_corectl:
1638                 return (NCORCODE);
1639         case SYS_kaio:
1640                 return (NAIOCODE);
1641         case SYS_door:
1642                 return (NDOORCODE);
1643         case SYS_pset:
1644                 return (NPSETCODE);
1645         case SYS_lwp_create:
1646                 return (NLWPCREATECODE);
1647         case SYS_tasksys:
1648                 return (NTASKSYSCODE);
1649         case SYS_exacctsys:
1650                 return (NEXACCTSYSCODE);
1651         case SYS_privsys:
1652                 return (NPRIVSYSCODE);
1653         case SYS_lwp_park:
1654                 return (NLWPPARKCODE);
1655         case SYS_lwp_rwlock_sys:
1656                 return (NLWPRWLOCKCODE);
1657         case SYS_sendfilev:
1658                 return (NSENDFILESYSCODE);
1659         case SYS_lgrpsys:
1660                 return (NLGRPSYSCODE);
1661         case SYS_rusagesys:
1662                 return (NRUSAGESYSCODE);
1663         case SYS_fcntl:
1664                 return (NFCNTLCODE);
1665         case SYS_ucredsys:
1666                 return (NUCREDSYSCODE);
1667         case SYS_port:
1668                 return (NPORTCODE);
1669         case SYS_zone:
1670                 return (NZONECODE);
1671         case SYS_labelsys:
1672                 return (NLABELCODE);
1673         case SYS_rctlsys:
1674                 return (NRCTLCODE);
1675         case SYS_forksys:
1676                 return (NFORKCODE);
1677         case SYS_sidsys:
1678                 return (NSIDSYSCODE);
1679         case SYS_utimesys:
1680                 return (NUTIMESYSCODE);
1681         case SYS_sockconfig:
1682                 return (NSOCKCONFIGCODE);
1683         default:
1684                 return (1);
1685         }
1686 }
1687 
1688 
1689 
1690 /* Socket address families (and protocol families) */
1691 const char * const afcodes[] = {
1692         "UNSPEC",       /* 0 */
1693         "UNIX",         /* 1 */
1694         "INET",         /* 2 */
1695         "IMPLINK",      /* 3 */
1696         "PUP",          /* 4 */
1697         "CHAOS",        /* 5 */
1698         "NS",           /* 6 */
1699         "NBS",          /* 7 */
1700         "ECMA",         /* 8 */
1701         "DATAKIT",      /* 9 */
1702         "CCITT",        /* 10 */
1703         "SNA",          /* 11 */
1704         "DECnet",       /* 12 */
1705         "DLI",          /* 13 */
1706         "LAT",          /* 14 */
1707         "HYLINK",       /* 15 */
1708         "APPLETALK",    /* 16 */
1709         "NIT",          /* 17 */
1710         "802",          /* 18 */
1711         "OSI",          /* 19 */
1712         "X25",          /* 20 */
1713         "OSINET",       /* 21 */
1714         "GOSIP",        /* 22 */
1715         "IPX",          /* 23 */
1716         "ROUTE",        /* 24 */
1717         "LINK",         /* 25 */
1718         "INET6",        /* 26 */
1719         "KEY",          /* 27 */
1720         "NCA",          /* 28 */
1721         "POLICY",       /* 29 */
1722         "RDS",          /* 30 */
1723         "TRILL",        /* 31 */
1724         "PACKET",       /* 32 */
1725         "LX_NETLINK"    /* 33 */
1726 };
1727 #if MAX_AFCODES != 34
1728 #error Need to update address-family table
1729 #endif
1730 
1731 
1732 const char * const socktype_codes[] = {         /* cf socket.h */
1733         NULL,
1734         "SOCK_DGRAM",           /* 1 */
1735         "SOCK_STREAM",          /* 2 */
1736         NULL,
1737         "SOCK_RAW",             /* 4 */
1738         "SOCK_RDM",             /* 5 */
1739         "SOCK_SEQPACKET"        /* 6 */
1740 };
1741 #if MAX_SOCKTYPES != 7
1742 #error Need to update socket-type table
1743 #endif