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