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