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