diff options
Diffstat (limited to 'usr/src/cmd/truss/systable.c')
-rw-r--r-- | usr/src/cmd/truss/systable.c | 1736 |
1 files changed, 1736 insertions, 0 deletions
diff --git a/usr/src/cmd/truss/systable.c b/usr/src/cmd/truss/systable.c new file mode 100644 index 0000000..3cd07c6 --- /dev/null +++ b/usr/src/cmd/truss/systable.c @@ -0,0 +1,1736 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved. + */ + +/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ +/* All Rights Reserved */ + +/* Copyright (c) 2013, OmniTI Computer Consulting, Inc. All rights reserved. */ + +#include <stdio.h> +#include <stdlib.h> +#include <fcntl.h> +#include <unistd.h> +#include <string.h> +#include <signal.h> +#include <sys/types.h> +#include <libproc.h> +#include <sys/aio.h> +#include <sys/port_impl.h> +#include "ramdata.h" +#include "systable.h" +#include "print.h" +#include "proto.h" + +/* + * Tables of information about system calls - read-only data. + */ + +const char *const errcode[] = { /* error code names */ + NULL, /* 0 */ + "EPERM", /* 1 */ + "ENOENT", /* 2 */ + "ESRCH", /* 3 */ + "EINTR", /* 4 */ + "EIO", /* 5 */ + "ENXIO", /* 6 */ + "E2BIG", /* 7 */ + "ENOEXEC", /* 8 */ + "EBADF", /* 9 */ + "ECHILD", /* 10 */ + "EAGAIN", /* 11 */ + "ENOMEM", /* 12 */ + "EACCES", /* 13 */ + "EFAULT", /* 14 */ + "ENOTBLK", /* 15 */ + "EBUSY", /* 16 */ + "EEXIST", /* 17 */ + "EXDEV", /* 18 */ + "ENODEV", /* 19 */ + "ENOTDIR", /* 20 */ + "EISDIR", /* 21 */ + "EINVAL", /* 22 */ + "ENFILE", /* 23 */ + "EMFILE", /* 24 */ + "ENOTTY", /* 25 */ + "ETXTBSY", /* 26 */ + "EFBIG", /* 27 */ + "ENOSPC", /* 28 */ + "ESPIPE", /* 29 */ + "EROFS", /* 30 */ + "EMLINK", /* 31 */ + "EPIPE", /* 32 */ + "EDOM", /* 33 */ + "ERANGE", /* 34 */ + "ENOMSG", /* 35 */ + "EIDRM", /* 36 */ + "ECHRNG", /* 37 */ + "EL2NSYNC", /* 38 */ + "EL3HLT", /* 39 */ + "EL3RST", /* 40 */ + "ELNRNG", /* 41 */ + "EUNATCH", /* 42 */ + "ENOCSI", /* 43 */ + "EL2HLT", /* 44 */ + "EDEADLK", /* 45 */ + "ENOLCK", /* 46 */ + "ECANCELED", /* 47 */ + "ENOTSUP", /* 48 */ + "EDQUOT", /* 49 */ + "EBADE", /* 50 */ + "EBADR", /* 51 */ + "EXFULL", /* 52 */ + "ENOANO", /* 53 */ + "EBADRQC", /* 54 */ + "EBADSLT", /* 55 */ + "EDEADLOCK", /* 56 */ + "EBFONT", /* 57 */ + "EOWNERDEAD", /* 58 */ + "ENOTRECOVERABLE", /* 59 */ + "ENOSTR", /* 60 */ + "ENODATA", /* 61 */ + "ETIME", /* 62 */ + "ENOSR", /* 63 */ + "ENONET", /* 64 */ + "ENOPKG", /* 65 */ + "EREMOTE", /* 66 */ + "ENOLINK", /* 67 */ + "EADV", /* 68 */ + "ESRMNT", /* 69 */ + "ECOMM", /* 70 */ + "EPROTO", /* 71 */ + "ELOCKUNMAPPED", /* 72 */ + "ENOTACTIVE", /* 73 */ + "EMULTIHOP", /* 74 */ + NULL, /* 75 */ + NULL, /* 76 */ + "EBADMSG", /* 77 */ + "ENAMETOOLONG", /* 78 */ + "EOVERFLOW", /* 79 */ + "ENOTUNIQ", /* 80 */ + "EBADFD", /* 81 */ + "EREMCHG", /* 82 */ + "ELIBACC", /* 83 */ + "ELIBBAD", /* 84 */ + "ELIBSCN", /* 85 */ + "ELIBMAX", /* 86 */ + "ELIBEXEC", /* 87 */ + "EILSEQ", /* 88 */ + "ENOSYS", /* 89 */ + "ELOOP", /* 90 */ + "ERESTART", /* 91 */ + "ESTRPIPE", /* 92 */ + "ENOTEMPTY", /* 93 */ + "EUSERS", /* 94 */ + "ENOTSOCK", /* 95 */ + "EDESTADDRREQ", /* 96 */ + "EMSGSIZE", /* 97 */ + "EPROTOTYPE", /* 98 */ + "ENOPROTOOPT", /* 99 */ + NULL, /* 100 */ + NULL, /* 101 */ + NULL, /* 102 */ + NULL, /* 103 */ + NULL, /* 104 */ + NULL, /* 105 */ + NULL, /* 106 */ + NULL, /* 107 */ + NULL, /* 108 */ + NULL, /* 109 */ + NULL, /* 110 */ + NULL, /* 111 */ + NULL, /* 112 */ + NULL, /* 113 */ + NULL, /* 114 */ + NULL, /* 115 */ + NULL, /* 116 */ + NULL, /* 117 */ + NULL, /* 118 */ + NULL, /* 119 */ + "EPROTONOSUPPORT", /* 120 */ + "ESOCKTNOSUPPORT", /* 121 */ + "EOPNOTSUPP", /* 122 */ + "EPFNOSUPPORT", /* 123 */ + "EAFNOSUPPORT", /* 124 */ + "EADDRINUSE", /* 125 */ + "EADDRNOTAVAIL", /* 126 */ + "ENETDOWN", /* 127 */ + "ENETUNREACH", /* 128 */ + "ENETRESET", /* 129 */ + "ECONNABORTED", /* 130 */ + "ECONNRESET", /* 131 */ + "ENOBUFS", /* 132 */ + "EISCONN", /* 133 */ + "ENOTCONN", /* 134 */ + NULL, /* 135 */ + NULL, /* 136 */ + NULL, /* 137 */ + NULL, /* 138 */ + NULL, /* 139 */ + NULL, /* 140 */ + NULL, /* 141 */ + NULL, /* 142 */ + "ESHUTDOWN", /* 143 */ + "ETOOMANYREFS", /* 144 */ + "ETIMEDOUT", /* 145 */ + "ECONNREFUSED", /* 146 */ + "EHOSTDOWN", /* 147 */ + "EHOSTUNREACH", /* 148 */ + "EALREADY", /* 149 */ + "EINPROGRESS", /* 150 */ + "ESTALE" /* 151 */ +}; + +#define NERRCODE (sizeof (errcode) / sizeof (char *)) + + +const char * +errname(int err) /* return the error code name (NULL if none) */ +{ + const char *ename = NULL; + + if (err >= 0 && err < NERRCODE) + ename = errcode[err]; + + return (ename); +} + + +const struct systable systable[] = { +{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX}, +{"_exit", 1, DEC, NOV, DEC}, /* 1 */ +{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX}, +{"read", 3, DEC, NOV, DEC, IOB, UNS}, /* 3 */ +{"write", 3, DEC, NOV, DEC, IOB, UNS}, /* 4 */ +{"open", 3, DEC, NOV, STG, OPN, OCT}, /* 5 */ +{"close", 1, DEC, NOV, DEC}, /* 6 */ +{"linkat", 5, DEC, NOV, ATC, STG, ATC, STG, SNF}, /* 7 */ +{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX}, +{"link", 2, DEC, NOV, STG, STG}, /* 9 */ +{"unlink", 1, DEC, NOV, STG}, /* 10 */ +{"symlinkat", 3, DEC, NOV, STG, ATC, STG}, /* 11 */ +{"chdir", 1, DEC, NOV, STG}, /* 12 */ +{"time", 0, DEC, NOV}, /* 13 */ +{"mknod", 3, DEC, NOV, STG, OCT, HEX}, /* 14 */ +{"chmod", 2, DEC, NOV, STG, OCT}, /* 15 */ +{"chown", 3, DEC, NOV, STG, DEC, DEC}, /* 16 */ +{"brk", 1, DEC, NOV, HEX}, /* 17 */ +{"stat", 2, DEC, NOV, STG, HEX}, /* 18 */ +{"lseek", 3, DEC, NOV, DEC, DEX, WHN}, /* 19 */ +{"getpid", 0, DEC, DEC}, /* 20 */ +{"mount", 8, DEC, NOV, STG, STG, MTF, MFT, HEX, DEC, HEX, DEC}, /* 21 */ +{"readlinkat", 4, DEC, NOV, ATC, STG, RLK, UNS}, /* 22 */ +{"setuid", 1, DEC, NOV, UNS}, /* 23 */ +{"getuid", 0, UNS, UNS}, /* 24 */ +{"stime", 1, DEC, NOV, DEC}, /* 25 */ +{"pcsample", 2, DEC, NOV, HEX, DEC}, /* 26 */ +{"alarm", 1, DEC, NOV, UNS}, /* 27 */ +{"fstat", 2, DEC, NOV, DEC, HEX}, /* 28 */ +{"pause", 0, DEC, NOV}, /* 29 */ +{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX}, +{"stty", 2, DEC, NOV, DEC, DEC}, /* 31 */ +{"gtty", 2, DEC, NOV, DEC, DEC}, /* 32 */ +{"access", 2, DEC, NOV, STG, ACC}, /* 33 */ +{"nice", 1, DEC, NOV, DEC}, /* 34 */ +{"statfs", 4, DEC, NOV, STG, HEX, DEC, DEC}, /* 35 */ +{"sync", 0, DEC, NOV}, /* 36 */ +{"kill", 2, DEC, NOV, DEC, SIG}, /* 37 */ +{"fstatfs", 4, DEC, NOV, DEC, HEX, DEC, DEC}, /* 38 */ +{"pgrpsys", 3, DEC, NOV, DEC, DEC, DEC}, /* 39 */ +{"uucopystr", 3, DEC, NOV, STG, RST, UNS}, /* 40 */ +{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX}, +{"pipe", 2, DEC, NOV, PFD, PIP}, /* 42 */ +{"times", 1, DEC, NOV, HEX}, /* 43 */ +{"profil", 4, DEC, NOV, HEX, UNS, HEX, OCT}, /* 44 */ +{"faccessat", 4, DEC, NOV, ATC, STG, ACC, FAT}, /* 45 */ +{"setgid", 1, DEC, NOV, UNS}, /* 46 */ +{"getgid", 0, UNS, UNS}, /* 47 */ +{"mknodat", 4, DEC, NOV, ATC, STG, OCT, HEX}, /* 48 */ +{"msgsys", 6, DEC, NOV, DEC, DEC, DEC, DEC, DEC, DEC}, /* 49 */ +{"sysi86", 4, HEX, NOV, S86, HEX, HEX, HEX, DEC, DEC}, /* 50 */ +{"acct", 1, DEC, NOV, STG}, /* 51 */ +{"shmsys", 4, DEC, NOV, DEC, HEX, HEX, HEX}, /* 52 */ +{"semsys", 5, DEC, NOV, DEC, HEX, HEX, HEX, HEX}, /* 53 */ +{"ioctl", 3, DEC, NOV, DEC, IOC, IOA}, /* 54 */ +{"uadmin", 3, DEC, NOV, DEC, DEC, DEC}, /* 55 */ +{"fchownat", 5, DEC, NOV, ATC, STG, DEC, DEC, SNF}, /* 56 */ +{"utssys", 4, DEC, NOV, HEX, DEC, UTS, HEX}, /* 57 */ +{"fdsync", 2, DEC, NOV, DEC, FFG}, /* 58 */ +{"execve", 3, DEC, NOV, STG, HEX, HEX}, /* 59 */ +{"umask", 1, OCT, NOV, OCT}, /* 60 */ +{"chroot", 1, DEC, NOV, STG}, /* 61 */ +{"fcntl", 3, DEC, NOV, DEC, FCN, HEX}, /* 62 */ +{"ulimit", 2, DEX, NOV, ULM, DEC}, /* 63 */ +{"renameat", 4, DEC, NOV, ATC, STG, ATC, STG}, /* 64 */ +{"unlinkat", 3, DEC, NOV, ATC, STG, UAT}, /* 65 */ +{"fstatat", 4, DEC, NOV, ATC, STG, HEX, SNF}, /* 66 */ +{"fstatat64", 4, DEC, NOV, ATC, STG, HEX, SNF}, /* 67 */ +{"openat", 4, DEC, NOV, ATC, STG, OPN, OCT}, /* 68 */ +{"openat64", 4, DEC, NOV, ATC, STG, OPN, OCT}, /* 69 */ +{"tasksys", 5, DEC, NOV, DEC, DEC, DEC, HEX, DEC}, /* 70 */ +{"acctctl", 3, DEC, NOV, HEX, HEX, UNS}, /* 71 */ +{"exacctsys", 6, DEC, NOV, DEC, IDT, DEC, HEX, DEC, HEX}, /* 72 */ +{"getpagesizes", 2, DEC, NOV, HEX, DEC}, /* 73 */ +{"rctlsys", 6, DEC, NOV, RSC, STG, HEX, HEX, DEC, DEC}, /* 74 */ +{"sidsys", 4, UNS, UNS, DEC, DEC, DEC, DEC}, /* 75 */ +{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX}, +{"lwp_park", 3, DEC, NOV, DEC, HEX, DEC}, /* 77 */ +{"sendfilev", 5, DEC, NOV, DEC, DEC, HEX, DEC, HEX}, /* 78 */ +{"rmdir", 1, DEC, NOV, STG}, /* 79 */ +{"mkdir", 2, DEC, NOV, STG, OCT}, /* 80 */ +{"getdents", 3, DEC, NOV, DEC, HEX, UNS}, /* 81 */ +{"privsys", 5, HEX, NOV, DEC, DEC, DEC, HEX, DEC}, /* 82 */ +{"ucredsys", 3, DEC, NOV, DEC, DEC, HEX}, /* 83 */ +{"sysfs", 3, DEC, NOV, SFS, DEX, DEX}, /* 84 */ +{"getmsg", 4, DEC, NOV, DEC, HEX, HEX, HEX}, /* 85 */ +{"putmsg", 4, DEC, NOV, DEC, HEX, HEX, SMF}, /* 86 */ +{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX}, +{"lstat", 2, DEC, NOV, STG, HEX}, /* 88 */ +{"symlink", 2, DEC, NOV, STG, STG}, /* 89 */ +{"readlink", 3, DEC, NOV, STG, RLK, UNS}, /* 90 */ +{"setgroups", 2, DEC, NOV, DEC, HEX}, /* 91 */ +{"getgroups", 2, DEC, NOV, DEC, HEX}, /* 92 */ +{"fchmod", 2, DEC, NOV, DEC, OCT}, /* 93 */ +{"fchown", 3, DEC, NOV, DEC, DEC, DEC}, /* 94 */ +{"sigprocmask", 3, DEC, NOV, SPM, HEX, HEX}, /* 95 */ +{"sigsuspend", 1, DEC, NOV, HEX}, /* 96 */ +{"sigaltstack", 2, DEC, NOV, HEX, HEX}, /* 97 */ +{"sigaction", 3, DEC, NOV, SIG, HEX, HEX}, /* 98 */ +{"sigpendsys", 2, DEC, NOV, DEC, HEX}, /* 99 */ +{"context", 2, DEC, NOV, DEC, HEX}, /* 100 */ +{"fchmodat", 4, DEC, NOV, ATC, STG, OCT, SNF}, /* 101 */ +{"mkdirat", 3, DEC, NOV, ATC, STG, OCT}, /* 102 */ +{"statvfs", 2, DEC, NOV, STG, HEX}, /* 103 */ +{"fstatvfs", 2, DEC, NOV, DEC, HEX}, /* 104 */ +{"getloadavg", 2, DEC, NOV, HEX, DEC}, /* 105 */ +{"nfssys", 2, DEC, NOV, DEC, HEX}, /* 106 */ +{"waitid", 4, DEC, NOV, IDT, DEC, HEX, WOP}, /* 107 */ +{"sigsendsys", 2, DEC, NOV, HEX, SIG}, /* 108 */ +{"hrtsys", 5, DEC, NOV, DEC, HEX, HEX, HEX, HEX}, /* 109 */ +{"utimesys", 5, DEC, NOV, DEC, HEX, HEX, HEX, HEX}, /* 110 */ +{"sigresend", 3, DEC, NOV, SIG, HEX, HEX}, /* 111 */ +{"priocntlsys", 5, DEC, NOV, DEC, HEX, DEC, PC4, PC5}, /* 112 */ +{"pathconf", 2, DEC, NOV, STG, PTC}, /* 113 */ +{"mincore", 3, DEC, NOV, HEX, UNS, HEX}, /* 114 */ +{"mmap", 6, HEX, NOV, HEX, UNS, MPR, MTY, DEC, DEC}, /* 115 */ +{"mprotect", 3, DEC, NOV, HEX, UNS, MPR}, /* 116 */ +{"munmap", 2, DEC, NOV, HEX, UNS}, /* 117 */ +{"fpathconf", 2, DEC, NOV, DEC, PTC}, /* 118 */ +{"vfork", 0, DEC, NOV}, /* 119 */ +{"fchdir", 1, DEC, NOV, DEC}, /* 120 */ +{"readv", 3, DEC, NOV, DEC, HEX, DEC}, /* 121 */ +{"writev", 3, DEC, NOV, DEC, HEX, DEC}, /* 122 */ +{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX}, +{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX}, +{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX}, +{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX}, +{"mmapobj", 5, DEC, NOV, DEC, MOB, HEX, HEX, HEX}, /* 127 */ +{"setrlimit", 2, DEC, NOV, RLM, HEX}, /* 128 */ +{"getrlimit", 2, DEC, NOV, RLM, HEX}, /* 129 */ +{"lchown", 3, DEC, NOV, STG, DEC, DEC}, /* 130 */ +{"memcntl", 6, DEC, NOV, HEX, UNS, MCF, MC4, MC5, DEC}, /* 131 */ +{"getpmsg", 5, DEC, NOV, DEC, HEX, HEX, HEX, HEX}, /* 132 */ +{"putpmsg", 5, DEC, NOV, DEC, HEX, HEX, DEC, HHX}, /* 133 */ +{"rename", 2, DEC, NOV, STG, STG}, /* 134 */ +{"uname", 1, DEC, NOV, HEX}, /* 135 */ +{"setegid", 1, DEC, NOV, UNS}, /* 136 */ +{"sysconfig", 1, DEC, NOV, CNF}, /* 137 */ +{"adjtime", 2, DEC, NOV, HEX, HEX}, /* 138 */ +{"sysinfo", 3, DEC, NOV, INF, RST, DEC}, /* 139 */ +{"sharefs", 3, DEC, NOV, DEC, HEX, DEC}, /* 140 */ +{"seteuid", 1, DEC, NOV, UNS}, /* 141 */ +{"forksys", 2, DEC, NOV, DEC, HHX}, /* 142 */ +{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX}, +{"sigtimedwait", 3, DEC, NOV, HEX, HEX, HEX}, /* 144 */ +{"lwp_info", 1, DEC, NOV, HEX}, /* 145 */ +{"yield", 0, DEC, NOV}, /* 146 */ +{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX}, +{"lwp_sema_post", 1, DEC, NOV, HEX}, /* 148 */ +{"lwp_sema_trywait", 1, DEC, NOV, HEX}, /* 149 */ +{"lwp_detach", 1, DEC, NOV, DEC}, /* 150 */ +{"corectl", 4, DEC, NOV, DEC, HEX, HEX, HEX}, /* 151 */ +{"modctl", 5, DEC, NOV, MOD, HEX, HEX, HEX, HEX}, /* 152 */ +{"fchroot", 1, DEC, NOV, DEC}, /* 153 */ +{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX}, +{"vhangup", 0, DEC, NOV}, /* 155 */ +{"gettimeofday", 1, DEC, NOV, HEX}, /* 156 */ +{"getitimer", 2, DEC, NOV, ITM, HEX}, /* 157 */ +{"setitimer", 3, DEC, NOV, ITM, HEX, HEX}, /* 158 */ +{"lwp_create", 3, DEC, NOV, HEX, LWF, HEX}, /* 159 */ +{"lwp_exit", 0, DEC, NOV}, /* 160 */ +{"lwp_suspend", 1, DEC, NOV, DEC}, /* 161 */ +{"lwp_continue", 1, DEC, NOV, DEC}, /* 162 */ +{"lwp_kill", 2, DEC, NOV, DEC, SIG}, /* 163 */ +{"lwp_self", 0, DEC, NOV}, /* 164 */ +{"lwp_sigmask", 5, HEX, HEX, SPM, HEX, HEX, HEX, HEX}, /* 165 */ +{"lwp_private", 3, HEX, NOV, DEC, DEC, HEX}, /* 166 */ +{"lwp_wait", 2, DEC, NOV, DEC, HEX}, /* 167 */ +{"lwp_mutex_wakeup", 2, DEC, NOV, HEX, DEC}, /* 168 */ +{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX}, +{"lwp_cond_wait", 4, DEC, NOV, HEX, HEX, HEX, DEC}, /* 170 */ +{"lwp_cond_signal", 1, DEC, NOV, HEX}, /* 171 */ +{"lwp_cond_broadcast", 1, DEC, NOV, HEX}, /* 172 */ +{"pread", 4, DEC, NOV, DEC, IOB, UNS, DEX}, /* 173 */ +{"pwrite", 4, DEC, NOV, DEC, IOB, UNS, DEX}, /* 174 */ +{"llseek", 4, LLO, NOV, DEC, LLO, HID, WHN}, /* 175 */ +{"inst_sync", 2, DEC, NOV, STG, DEC}, /* 176 */ +{"brand", 6, DEC, NOV, DEC, HEX, HEX, HEX, HEX, HEX}, /* 177 */ +{"kaio", 7, DEC, NOV, AIO, HEX, HEX, HEX, HEX, HEX, HEX}, /* 178 */ +{"cpc", 5, DEC, NOV, CPC, DEC, HEX, HEX, HEX}, /* 179 */ +{"lgrpsys", 3, DEC, NOV, DEC, DEC, HEX}, /* 180 */ +{"rusagesys", 5, DEC, NOV, DEC, HEX, DEC, HEX, HEX}, /* 181 */ +{"portfs", 6, HEX, HEX, DEC, HEX, HEX, HEX, HEX, HEX}, /* 182 */ +{"pollsys", 4, DEC, NOV, HEX, DEC, HEX, HEX}, /* 183 */ +{"labelsys", 2, DEC, NOV, DEC, HEX}, /* 184 */ +{"acl", 4, DEC, NOV, STG, ACL, DEC, HEX}, /* 185 */ +{"auditsys", 4, DEC, NOV, AUD, HEX, HEX, HEX}, /* 186 */ +{"processor_bind", 4, DEC, NOV, IDT, DEC, DEC, HEX}, /* 187 */ +{"processor_info", 2, DEC, NOV, DEC, HEX}, /* 188 */ +{"p_online", 2, DEC, NOV, DEC, DEC}, /* 189 */ +{"sigqueue", 5, DEC, NOV, DEC, SIG, HEX, SQC, DEC}, /* 190 */ +{"clock_gettime", 2, DEC, NOV, DEC, HEX}, /* 191 */ +{"clock_settime", 2, DEC, NOV, DEC, HEX}, /* 192 */ +{"clock_getres", 2, DEC, NOV, DEC, HEX}, /* 193 */ +{"timer_create", 3, DEC, NOV, DEC, HEX, HEX}, /* 194 */ +{"timer_delete", 1, DEC, NOV, DEC}, /* 195 */ +{"timer_settime", 4, DEC, NOV, DEC, DEC, HEX, HEX}, /* 196 */ +{"timer_gettime", 2, DEC, NOV, DEC, HEX}, /* 197 */ +{"timer_getoverrun", 1, DEC, NOV, DEC}, /* 198 */ +{"nanosleep", 2, DEC, NOV, HEX, HEX}, /* 199 */ +{"facl", 4, DEC, NOV, DEC, ACL, DEC, HEX}, /* 200 */ +{"door", 6, DEC, NOV, DEC, HEX, HEX, HEX, HEX, DEC}, /* 201 */ +{"setreuid", 2, DEC, NOV, UN1, UN1}, /* 202 */ +{"setregid", 2, DEC, NOV, UN1, UN1}, /* 203 */ +{"install_utrap", 3, DEC, NOV, DEC, HEX, HEX}, /* 204 */ +{"signotify", 3, DEC, NOV, DEC, HEX, HEX}, /* 205 */ +{"schedctl", 0, HEX, NOV}, /* 206 */ +{"pset", 5, DEC, NOV, DEC, HEX, HEX, HEX, HEX}, /* 207 */ +{"sparc_utrap_install", 5, DEC, NOV, UTT, UTH, UTH, HEX, HEX}, /* 208 */ +{"resolvepath", 3, DEC, NOV, STG, RLK, DEC}, /* 209 */ +{"lwp_mutex_timedlock", 3, DEC, NOV, HEX, HEX, HEX}, /* 210 */ +{"lwp_sema_timedwait", 3, DEC, NOV, HEX, HEX, DEC}, /* 211 */ +{"lwp_rwlock_sys", 3, DEC, NOV, DEC, HEX, HEX}, /* 212 */ +{"getdents64", 3, DEC, NOV, DEC, HEX, UNS}, /* 213 */ +{"mmap64", 7, HEX, NOV, HEX, UNS, MPR, MTY, DEC, LLO, HID}, /* 214 */ +{"stat64", 2, DEC, NOV, STG, HEX}, /* 215 */ +{"lstat64", 2, DEC, NOV, STG, HEX}, /* 216 */ +{"fstat64", 2, DEC, NOV, DEC, HEX}, /* 217 */ +{"statvfs64", 2, DEC, NOV, STG, HEX}, /* 218 */ +{"fstatvfs64", 2, DEC, NOV, DEC, HEX}, /* 219 */ +{"setrlimit64", 2, DEC, NOV, RLM, HEX}, /* 220 */ +{"getrlimit64", 2, DEC, NOV, RLM, HEX}, /* 221 */ +{"pread64", 5, DEC, NOV, DEC, IOB, UNS, LLO, HID}, /* 222 */ +{"pwrite64", 5, DEC, NOV, DEC, IOB, UNS, LLO, HID}, /* 223 */ +{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX}, +{"open64", 3, DEC, NOV, STG, OPN, OCT}, /* 225 */ +{"rpcmod", 3, DEC, NOV, DEC, HEX}, /* 226 */ +{"zone", 5, DEC, NOV, DEC, HEX, HEX, HEX, HEX}, /* 227 */ +{"autofssys", 2, DEC, NOV, DEC, HEX}, /* 228 */ +{"getcwd", 3, DEC, NOV, RST, DEC}, /* 229 */ +{"so_socket", 5, DEC, NOV, PFM, SKT, SKP, STG, SKV}, /* 230 */ +{"so_socketpair", 1, DEC, NOV, HEX}, /* 231 */ +{"bind", 4, DEC, NOV, DEC, HEX, DEC, SKV}, /* 232 */ +{"listen", 3, DEC, NOV, DEC, DEC, SKV}, /* 233 */ +{"accept", 5, DEC, NOV, DEC, HEX, HEX, SKV, ACF}, /* 234 */ +{"connect", 4, DEC, NOV, DEC, HEX, DEC, SKV}, /* 235 */ +{"shutdown", 3, DEC, NOV, DEC, SHT, SKV}, /* 236 */ +{"recv", 4, DEC, NOV, DEC, IOB, DEC, DEC}, /* 237 */ +{"recvfrom", 6, DEC, NOV, DEC, IOB, DEC, DEC, HEX, HEX}, /* 238 */ +{"recvmsg", 3, DEC, NOV, DEC, HEX, DEC}, /* 239 */ +{"send", 4, DEC, NOV, DEC, IOB, DEC, DEC}, /* 240 */ +{"sendmsg", 3, DEC, NOV, DEC, HEX, DEC}, /* 241 */ +{"sendto", 6, DEC, NOV, DEC, IOB, DEC, DEC, HEX, DEC}, /* 242 */ +{"getpeername", 4, DEC, NOV, DEC, HEX, HEX, SKV}, /* 243 */ +{"getsockname", 4, DEC, NOV, DEC, HEX, HEX, SKV}, /* 244 */ +{"getsockopt", 6, DEC, NOV, DEC, SOL, SON, HEX, HEX, SKV}, /* 245 */ +{"setsockopt", 6, DEC, NOV, DEC, SOL, SON, HEX, DEC, SKV}, /* 246 */ +{"sockconfig", 5, DEC, NOV, DEC, HEX, HEX, HEX, HEX}, /* 247 */ +{"ntp_gettime", 1, DEC, NOV, HEX}, /* 248 */ +{"ntp_adjtime", 1, DEC, NOV, HEX}, /* 249 */ +{"lwp_mutex_unlock", 1, DEC, NOV, HEX}, /* 250 */ +{"lwp_mutex_trylock", 2, DEC, NOV, HEX, HEX}, /* 251 */ +{"lwp_mutex_register", 2, DEC, NOV, HEX, HEX}, /* 252 */ +{"cladm", 3, DEC, NOV, CLC, CLF, HEX}, /* 253 */ +{"uucopy", 3, DEC, NOV, HEX, HEX, UNS}, /* 254 */ +{"umount2", 2, DEC, NOV, STG, MTF}, /* 255 */ +{ NULL, -1, DEC, NOV}, +}; + +/* SYSEND == max syscall number + 1 */ +#define SYSEND ((sizeof (systable) / sizeof (struct systable))-1) + + +/* + * The following are for interpreting syscalls with sub-codes. + */ + +const struct systable faccessattable[] = { +{"faccessat", 4, DEC, NOV, ATC, STG, ACC, FAT}, /* 0 */ +{"access", 3, DEC, NOV, HID, STG, ACC}, /* 1 */ +}; +#define NACCESSCODE (sizeof (faccessattable) / sizeof (struct systable)) + +const struct systable fchmodattable[] = { +{"fchmodat", 4, DEC, NOV, ATC, STG, OCT, SNF}, /* 0 */ +{"chmod", 3, DEC, NOV, HID, STG, OCT}, /* 1 */ +{"fchmodat", 4, DEC, NOV, ATC, STG, OCT, SNF}, /* 2 */ +{"fchmod", 3, DEC, NOV, DEC, HID, OCT}, /* 3 */ +}; +#define NCHMODCODE (sizeof (fchmodattable) / sizeof (struct systable)) + +const struct systable fchownattable[] = { +{"fchownat", 5, DEC, NOV, ATC, STG, DEC, DEC, SNF}, /* 0 */ +{"chown", 4, DEC, NOV, HID, STG, DEC, DEC}, /* 1 */ +{"lchown", 4, DEC, NOV, HID, STG, DEC, DEC}, /* 2 */ +{"fchown", 4, DEC, NOV, DEC, HID, DEC, DEC}, /* 3 */ +}; +#define NCHOWNCODE (sizeof (fchownattable) / sizeof (struct systable)) + +const struct systable mkdiratattable[] = { +{"mkdirat", 3, DEC, NOV, ATC, STG, OCT}, /* 0 */ +{"mkdir", 3, DEC, NOV, HID, STG, OCT}, /* 1 */ +}; +#define NMKDIRCODE (sizeof (mkdiratattable) / sizeof (struct systable)) + +const struct systable mknodatattable[] = { +{"mknodat", 4, DEC, NOV, ATC, STG, OCT, HEX}, /* 0 */ +{"mknod", 4, DEC, NOV, HID, STG, OCT, HEX}, /* 1 */ +}; +#define NMKMODCODE (sizeof (mknodatattable) / sizeof (struct systable)) + +const struct systable renameattable[] = { +{"renameat", 4, DEC, NOV, ATC, STG, ATC, STG}, /* 0 */ +{"rename", 4, DEC, NOV, HID, STG, HID, STG}, /* 1 */ +}; +#define NRENAMECODE (sizeof (renameattable) / sizeof (struct systable)) + +const struct systable linkattable[] = { +{"linkat", 5, DEC, NOV, ATC, STG, ATC, STG, SNF}, /* 0 */ +{"link", 4, DEC, NOV, HID, STG, HID, STG}, /* 1 */ +}; +#define NLINKATCODE (sizeof (linkattable) / sizeof (struct systable)) + +const struct systable unlinkattable[] = { +{"unlinkat", 3, DEC, NOV, ATC, STG, UAT}, /* 0 */ +{"unlink", 2, DEC, NOV, HID, STG}, /* 1 */ +{"rmdir", 2, DEC, NOV, HID, STG}, /* 2 */ +}; +#define NUNLINKCODE (sizeof (unlinkattable) / sizeof (struct systable)) + +const struct systable symlinkattable[] = { +{"symlinkat", 3, DEC, NOV, STG, ATC, STG}, /* 0 */ +{"symlink", 3, DEC, NOV, STG, HID, STG}, /* 1 */ +}; +#define NSYMLINKCODE (sizeof (symlinkattable) / sizeof (struct systable)) + +const struct systable readlinkattable[] = { +{"readlinkat", 4, DEC, NOV, ATC, STG, RLK, UNS}, /* 0 */ +{"readlink", 4, DEC, NOV, HID, STG, RLK, UNS}, /* 1 */ +}; +#define NREADLINKCODE (sizeof (readlinkattable) / sizeof (struct systable)) + +const struct systable fstatattable[] = { +{"fstatat", 4, DEC, NOV, ATC, STG, HEX, SNF}, /* 0 */ +{"stat", 3, DEC, NOV, HID, STG, HEX}, /* 1 */ +{"lstat", 3, DEC, NOV, HID, STG, HEX}, /* 2 */ +{"fstat", 3, DEC, NOV, DEC, HID, HEX}, /* 3 */ +}; +#define NSTATCODE (sizeof (fstatattable) / sizeof (struct systable)) + +const struct systable fstatat64table[] = { +{"fstatat64", 4, DEC, NOV, ATC, STG, HEX, SNF}, /* 0 */ +{"stat64", 3, DEC, NOV, HID, STG, HEX}, /* 1 */ +{"lstat64", 3, DEC, NOV, HID, STG, HEX}, /* 2 */ +{"fstat64", 3, DEC, NOV, DEC, HID, HEX}, /* 3 */ +}; +#define NSTAT64CODE (sizeof (fstatat64table) / sizeof (struct systable)) + +const struct systable openattable[] = { +{"openat", 3, DEC, NOV, ATC, STG, OPN}, /* 0 */ +{"openat", 4, DEC, NOV, ATC, STG, OPN, OCT}, /* 1 */ +{"open", 3, DEC, NOV, HID, STG, OPN}, /* 2 */ +{"open", 4, DEC, NOV, HID, STG, OPN, OCT}, /* 3 */ +}; +#define NOPENATCODE (sizeof (openattable) / sizeof (struct systable)) + +const struct systable openat64table[] = { +{"openat64", 3, DEC, NOV, ATC, STG, OPN}, /* 0 */ +{"openat64", 4, DEC, NOV, ATC, STG, OPN, OCT}, /* 1 */ +{"open64", 3, DEC, NOV, HID, STG, OPN}, /* 2 */ +{"open64", 4, DEC, NOV, HID, STG, OPN, OCT}, /* 3 */ +}; +#define NOPENAT64CODE (sizeof (openat64table) / sizeof (struct systable)) + +const struct systable opentable[] = { +{"open", 2, DEC, NOV, STG, OPN}, /* 0 */ +{"open", 3, DEC, NOV, STG, OPN, OCT}, /* 1 */ +}; +#define NOPENCODE (sizeof (opentable) / sizeof (struct systable)) + +const struct systable open64table[] = { +{"open64", 2, DEC, NOV, STG, OPN}, /* 0 */ +{"open64", 3, DEC, NOV, STG, OPN, OCT}, /* 1 */ +}; +#define NOPEN64CODE (sizeof (open64table) / sizeof (struct systable)) + +const struct systable fcntltable[] = { +{"fcntl", 3, DEC, NOV, DEC, FCN, HEX}, /* 0: default */ +{"fcntl", 2, DEC, NOV, DEC, FCN}, /* 1: no arg */ +{"fcntl", 3, DEC, NOV, DEC, FCN, FFG}, /* 2: F_SETFL */ +}; +#define NFCNTLCODE (sizeof (fcntltable) / sizeof (struct systable)) + +const struct systable msgtable[] = { +{"msgget", 3, DEC, NOV, HID, KEY, MSF}, /* 0 */ +{"msgctl", 4, DEC, NOV, HID, DEC, MSC, HEX}, /* 1 */ +{"msgrcv", 6, DEC, NOV, HID, DEC, HEX, UNS, DEC, MSF}, /* 2 */ +{"msgsnd", 5, DEC, NOV, HID, DEC, HEX, UNS, MSF}, /* 3 */ +{"msgids", 4, DEC, NOV, HID, HEX, UNS, HEX}, /* 4 */ +{"msgsnap", 5, DEC, NOV, HID, DEC, HEX, UNS, DEC}, /* 5 */ +}; +#define NMSGCODE (sizeof (msgtable) / sizeof (struct systable)) + +const struct systable semtable[] = { +{"semctl", 5, DEC, NOV, HID, DEC, DEC, SMC, DEX}, /* 0 */ +{"semget", 4, DEC, NOV, HID, KEY, DEC, SEF}, /* 1 */ +{"semop", 4, DEC, NOV, HID, DEC, HEX, UNS}, /* 2 */ +{"semids", 4, DEC, NOV, HID, HEX, UNS, HEX}, /* 3 */ +{"semtimedop", 5, DEC, NOV, HID, DEC, HEX, UNS, HEX}, /* 4 */ +}; +#define NSEMCODE (sizeof (semtable) / sizeof (struct systable)) + +const struct systable shmtable[] = { +{"shmat", 4, HEX, NOV, HID, DEC, DEX, SHF}, /* 0 */ +{"shmctl", 4, DEC, NOV, HID, DEC, SHC, DEX}, /* 1 */ +{"shmdt", 2, DEC, NOV, HID, HEX}, /* 2 */ +{"shmget", 4, DEC, NOV, HID, KEY, UNS, SHF}, /* 3 */ +{"shmids", 4, DEC, NOV, HID, HEX, UNS, HEX}, /* 4 */ +}; +#define NSHMCODE (sizeof (shmtable) / sizeof (struct systable)) + +const struct systable pidtable[] = { +{"getpgrp", 1, DEC, NOV, HID}, /* 0 */ +{"setpgrp", 1, DEC, NOV, HID}, /* 1 */ +{"getsid", 2, DEC, NOV, HID, DEC}, /* 2 */ +{"setsid", 1, DEC, NOV, HID}, /* 3 */ +{"getpgid", 2, DEC, NOV, HID, DEC}, /* 4 */ +{"setpgid", 3, DEC, NOV, HID, DEC, DEC}, /* 5 */ +}; +#define NPIDCODE (sizeof (pidtable) / sizeof (struct systable)) + +const struct systable sfstable[] = { +{"sysfs", 3, DEC, NOV, SFS, DEX, DEX}, /* 0 */ +{"sysfs", 2, DEC, NOV, SFS, STG}, /* 1 */ +{"sysfs", 3, DEC, NOV, SFS, DEC, RST}, /* 2 */ +{"sysfs", 1, DEC, NOV, SFS}, /* 3 */ +}; +#define NSFSCODE (sizeof (sfstable) / sizeof (struct systable)) + +const struct systable utstable[] = { +{"utssys", 3, DEC, NOV, HEX, DEC, UTS}, /* 0 */ +{"utssys", 4, DEC, NOV, HEX, HEX, HEX, HEX}, /* err */ +{"utssys", 3, DEC, NOV, HEX, HHX, UTS}, /* 2 */ +{"utssys", 4, DEC, NOV, STG, FUI, UTS, HEX} /* 3 */ +}; +#define NUTSCODE (sizeof (utstable) / sizeof (struct systable)) + +const struct systable rctltable[] = { +{"getrctl", 6, DEC, NOV, HID, STG, HEX, HEX, HID, RGF}, /* 0 */ +{"setrctl", 6, DEC, NOV, HID, STG, HEX, HEX, HID, RSF}, /* 1 */ +{"rctlsys_lst", 6, DEC, NOV, HID, HID, HEX, HID, HEX, HID}, /* 2 */ +{"rctlsys_ctl", 6, DEC, NOV, HID, STG, HEX, HID, HID, RCF}, /* 3 */ +{"setprojrctl", 6, DEC, NOV, HID, STG, HID, HEX, HEX, SPF}, /* 4 */ +}; +#define NRCTLCODE (sizeof (rctltable) / sizeof (struct systable)) + +const struct systable sgptable[] = { +{"sigpendsys", 2, DEC, NOV, DEC, HEX}, /* err */ +{"sigpending", 2, DEC, NOV, HID, HEX}, /* 1 */ +{"sigfillset", 2, DEC, NOV, HID, HEX}, /* 2 */ +}; +#define NSGPCODE (sizeof (sgptable) / sizeof (struct systable)) + +const struct systable ctxtable[] = { +{"getcontext", 2, DEC, NOV, HID, HEX}, /* 0 */ +{"setcontext", 2, DEC, NOV, HID, HEX}, /* 1 */ +{"getustack", 2, DEC, NOV, HID, HEX}, /* 2 */ +{"setustack", 2, DEC, NOV, HID, HEX}, /* 3 */ +}; +#define NCTXCODE (sizeof (ctxtable) / sizeof (struct systable)) + +const struct systable hrttable[] = { +{"hrtcntl", 5, DEC, NOV, HID, DEC, DEC, HEX, HEX}, /* 0 */ +{"hrtalarm", 3, DEC, NOV, HID, HEX, DEC}, /* 1 */ +{"hrtsleep", 2, DEC, NOV, HID, HEX}, /* 2 */ +{"hrtcancel", 3, DEC, NOV, HID, HEX, DEC}, /* 3 */ +}; +#define NHRTCODE (sizeof (hrttable) / sizeof (struct systable)) + +const struct systable cortable[] = { +{"corectl", 4, DEC, NOV, COR, HEX, HEX, HEX}, /* 0 */ +{"corectl", 2, DEC, NOV, COR, CCO}, /* 1 */ +{"corectl", 1, HHX, NOV, COR}, /* 2 */ +{"corectl", 3, DEC, NOV, COR, STG, DEC}, /* 3 */ +{"corectl", 3, DEC, NOV, COR, RST, DEC}, /* 4 */ +{"corectl", 4, DEC, NOV, COR, STG, DEC, DEC}, /* 5 */ +{"corectl", 4, DEC, NOV, COR, RST, DEC, DEC}, /* 6 */ +{"corectl", 2, DEC, NOV, COR, CCC}, /* 7 */ +{"corectl", 2, DEC, NOV, COR, RCC}, /* 8 */ +{"corectl", 3, DEC, NOV, COR, CCC, DEC}, /* 9 */ +{"corectl", 3, DEC, NOV, COR, RCC, DEC}, /* 10 */ +{"corectl", 3, DEC, NOV, COR, STG, DEC}, /* 11 */ +{"corectl", 3, DEC, NOV, COR, RST, DEC}, /* 12 */ +{"corectl", 2, DEC, NOV, COR, CCC}, /* 13 */ +{"corectl", 2, DEC, NOV, COR, RCC}, /* 14 */ +}; +#define NCORCODE (sizeof (cortable) / sizeof (struct systable)) + +const struct systable aiotable[] = { +{"kaio", 7, DEC, NOV, AIO, DEC, HEX, DEC, LLO, HID, HEX}, /* 0 */ +{"kaio", 7, DEC, NOV, AIO, DEC, HEX, DEC, LLO, HID, HEX}, /* 1 */ +{"kaio", 3, DEC, NOV, AIO, HEX, DEC}, /* 2 */ +{"kaio", 3, DEC, NOV, AIO, DEC, HEX}, /* 3 */ +{"kaio", 1, DEC, NOV, AIO}, /* 4 */ +{"kaio", 1, DEC, NOV, AIO}, /* 5 */ +{"kaio", 1, DEC, NOV, AIO}, /* 6 */ +{"kaio", 5, DEC, NOV, AIO, LIO, HEX, DEC, HEX}, /* 7 */ +{"kaio", 5, DEC, NOV, AIO, HEX, DEC, HEX, DEC}, /* 8 */ +{"kaio", 2, DEC, NOV, AIO, HEX}, /* 9 */ +{"kaio", 5, DEC, NOV, AIO, LIO, HEX, DEC, HEX}, /* 10 */ +{"kaio", 2, DEC, NOV, AIO, HEX}, /* 11 */ +{"kaio", 2, DEC, NOV, AIO, HEX}, /* 12 */ +{"kaio", 5, DEC, NOV, AIO, LIO, HEX, DEC, HEX}, /* 13 */ +{"kaio", 5, DEC, NOV, AIO, HEX, DEC, HEX, DEC}, /* 14 */ +{"kaio", 2, DEC, NOV, AIO, HEX}, /* 15 */ +{"kaio", 5, DEC, NOV, AIO, LIO, HEX, DEC, HEX}, /* 16 */ +{"kaio", 2, DEC, NOV, AIO, HEX}, /* 17 */ +{"kaio", 2, DEC, NOV, AIO, HEX}, /* 18 */ +{"kaio", 3, DEC, NOV, AIO, DEC, HEX}, /* 19 */ +{"kaio", 1, DEC, NOV, AIO}, /* 20 */ +{"kaio", 5, DEC, NOV, AIO, HEX, DEC, HEX, HEX}, /* 21 */ +}; +#define NAIOCODE (sizeof (aiotable) / sizeof (struct systable)) + +const struct systable doortable[] = { +{"door_create", 3, DEC, NOV, HEX, HEX, DFL}, /* 0 */ +{"door_revoke", 1, DEC, NOV, DEC}, /* 1 */ +{"door_info", 2, DEC, NOV, DEC, HEX}, /* 2 */ +{"door_call", 2, DEC, NOV, DEC, HEX}, /* 3 */ +{"door_return", 4, DEC, NOV, HEX, DEC, HEX, DEC}, /* 4 (old) */ +{"door_cred", 1, DEC, NOV, HEX}, /* 5 (old) */ +{"door_bind", 1, DEC, NOV, DEC}, /* 6 */ +{"door_unbind", 0, DEC, NOV}, /* 7 */ +{"door_unref", 0, DEC, NOV}, /* 8 */ +{"door_ucred", 1, DEC, NOV, HEX}, /* 9 */ +{"door_return", 5, DEC, NOV, HEX, DEC, HEX, HEX, DEC}, /* 10 */ +{"door_getparam", 3, DEC, NOV, DEC, DPM, HEX}, /* 11 */ +{"door_setparam", 3, DEC, NOV, DEC, DPM, DEC}, /* 12 */ +}; +#define NDOORCODE (sizeof (doortable) / sizeof (struct systable)) + +const struct systable psettable[] = { +{"pset_create", 2, DEC, NOV, HID, HEX}, /* 0 */ +{"pset_destroy", 2, DEC, NOV, HID, PST}, /* 1 */ +{"pset_assign", 4, DEC, NOV, HID, PST, DEC, HEX}, /* 2 */ +{"pset_info", 5, DEC, NOV, HID, PST, HEX, HEX, HEX}, /* 3 */ +{"pset_bind", 5, DEC, NOV, HID, PST, IDT, DEC, HEX}, /* 4 */ +{"pset_getloadavg", 4, DEC, NOV, HID, PST, HEX, DEC}, /* 5 */ +{"pset_list", 3, DEC, NOV, HID, HEX, HEX}, /* 6 */ +{"pset_setattr", 3, DEC, NOV, HID, PST, HEX}, /* 7 */ +{"pset_getattr", 3, DEC, NOV, HID, PST, HEX}, /* 8 */ +{"pset_assign_forced", 4, DEC, NOV, HID, PST, DEC, HEX}, /* 9 */ +}; +#define NPSETCODE (sizeof (psettable) / sizeof (struct systable)) + +const struct systable lwpcreatetable[] = { +{"lwp_create", 3, DEC, NOV, HEX, LWF, HEX}, /* 0 */ +{"lwp_create", 0, DEC, NOV}, /* 1 */ +}; +#define NLWPCREATECODE (sizeof (lwpcreatetable) / sizeof (struct systable)) + +static const struct systable tasksystable[] = { +{"settaskid", 3, DEC, NOV, HID, DEC, HEX}, /* 0 */ +{"gettaskid", 1, DEC, NOV, HID}, /* 1 */ +{"getprojid", 1, DEC, NOV, HID}, /* 2 */ +}; +#define NTASKSYSCODE (sizeof (tasksystable) / sizeof (struct systable)) + +static const struct systable privsystable[] = { +{"setppriv", 4, DEC, NOV, HID, PRO, PRN, PRS}, /* 0 */ +{"getppriv", 4, DEC, NOV, HID, HID, PRN, PRS}, /* 1 */ +{"getprivimplinfo", 5, DEC, NOV, HID, HID, HID, HEX, DEC}, /* 2 */ +{"setpflags", 3, DEC, NOV, HID, PFL, DEC}, /* 3 */ +{"getpflags", 2, DEC, NOV, HID, PFL}, /* 4 */ +{"issetugid", 0, DEC, NOV, HID}, /* 5 */ +}; +#define NPRIVSYSCODE (sizeof (privsystable) / sizeof (struct systable)) + +static const struct systable exacctsystable[] = { +{"getacct", 5, DEC, NOV, HID, IDT, DEC, HEX, UNS}, /* 0 */ +{"putacct", 6, DEC, NOV, HID, IDT, DEC, HEX, UNS, HEX}, /* 1 */ +{"wracct", 4, DEC, NOV, HID, IDT, DEC, HEX}, /* 2 */ +}; +#define NEXACCTSYSCODE (sizeof (exacctsystable) / sizeof (struct systable)) + +static const struct systable lwpparktable[] = { +{"lwp_park", 3, DEC, NOV, HID, HEX, DEC}, /* 0 */ +{"lwp_unpark", 2, DEC, NOV, HID, DEC}, /* 1 */ +{"lwp_unpark_all", 3, DEC, NOV, HID, HEX, DEC}, /* 2 */ +{"lwp_unpark_cancel", 2, DEC, NOV, HID, DEC}, /* 3 */ +{"lwp_set_park", 3, DEC, NOV, HID, HEX, DEC}, /* 4 */ +}; +#define NLWPPARKCODE (sizeof (lwpparktable) / sizeof (struct systable)) + +static const struct systable lwprwlocktable[] = { +{"lwp_rwlock_rdlock", 3, DEC, NOV, HID, HEX, HEX}, /* 0 */ +{"lwp_rwlock_wrlock", 3, DEC, NOV, HID, HEX, HEX}, /* 1 */ +{"lwp_rwlock_tryrdlock", 2, DEC, NOV, HID, HEX}, /* 2 */ +{"lwp_rwlock_trywrlock", 2, DEC, NOV, HID, HEX}, /* 3 */ +{"lwp_rwlock_unlock", 2, DEC, NOV, HID, HEX}, /* 4 */ +}; +#define NLWPRWLOCKCODE (sizeof (lwprwlocktable) / sizeof (struct systable)) + +static const struct systable sendfilevsystable[] = { +{"sendfilev", 5, DEC, NOV, DEC, DEC, HEX, DEC, HEX}, /* 0 */ +{"sendfilev64", 5, DEC, NOV, DEC, DEC, HEX, DEC, HEX}, /* 1 */ +}; +#define NSENDFILESYSCODE \ + (sizeof (sendfilevsystable) / sizeof (struct systable)) + +static const struct systable lgrpsystable[] = { +{"meminfo", 3, DEC, NOV, HID, NOV, MIF}, /* 0 */ +{"_lgrpsys", 3, DEC, NOV, DEC, DEC, NOV}, /* 1 */ +{"lgrp_version", 3, DEC, NOV, HID, DEC, NOV}, /* 2 */ +{"_lgrpsys", 3, DEC, NOV, DEC, HEX, HEX}, /* 3 */ +{"lgrp_affinity_get", 3, DEC, NOV, HID, NOV, LAF}, /* 4 */ +{"lgrp_affinity_set", 3, DEC, NOV, HID, NOV, LAF}, /* 5 */ +{"lgrp_latency", 3, DEC, NOV, HID, DEC, DEC}, /* 6 */ +}; +#define NLGRPSYSCODE (sizeof (lgrpsystable) / sizeof (struct systable)) + +static const struct systable rusagesystable[] = { +{"getrusage", 2, DEC, NOV, HID, HEX}, /* 0 */ +{"getrusage_chld", 2, DEC, NOV, HID, HEX}, /* 1 */ +{"getrusage_lwp", 2, DEC, NOV, HID, HEX}, /* 2 */ +{"getvmusage", 5, DEC, NOV, HID, HEX, DEC, HEX, HEX}, /* 3 */ +}; +#define NRUSAGESYSCODE \ + (sizeof (rusagesystable) / sizeof (struct systable)) + +static const struct systable ucredsystable[] = { +{"ucred_get", 3, DEC, NOV, HID, DEC, HEX}, +{"getpeerucred", 3, DEC, NOV, HID, DEC, HEX}, +}; +#define NUCREDSYSCODE \ + (sizeof (ucredsystable) / sizeof (struct systable)) + +const struct systable portfstable[] = { +{"port_create", 2, DEC, NOV, HID, DEC}, /* 0 */ +{"port_associate", 6, DEC, NOV, HID, DEC, DEC, HEX, HEX, HEX}, /* 1 */ +{"port_dissociate", 4, DEC, NOV, HID, DEC, DEC, HEX}, /* 2 */ +{"port_send", 4, DEC, NOV, HID, DEC, HEX, HEX}, /* 3 */ +{"port_sendn", 6, DEC, DEC, HID, HEX, HEX, DEC, HEX, HEX}, /* 4 */ +{"port_get", 4, DEC, NOV, HID, DEC, HEX, HEX}, /* 5 */ +{"port_getn", 6, DEC, DEC, HID, DEC, HEX, DEC, DEC, HEX}, /* 6 */ +{"port_alert", 5, DEC, NOV, HID, DEC, HEX, HEX, HEX}, /* 7 */ +{"port_dispatch", 6, DEC, NOV, HID, DEC, DEC, HEX, HEX, HEX}, /* 8 */ +}; +#define NPORTCODE (sizeof (portfstable) / sizeof (struct systable)) + +static const struct systable zonetable[] = { +{"zone_create", 2, DEC, NOV, HID, HEX}, /* 0 */ +{"zone_destroy", 2, DEC, NOV, HID, DEC}, /* 1 */ +{"zone_getattr", 5, DEC, NOV, HID, DEC, ZGA, HEX, DEC}, /* 2 */ +{"zone_enter", 2, DEC, NOV, HID, DEC}, /* 3 */ +{"zone_list", 3, DEC, NOV, HID, HEX, HEX}, /* 4 */ +{"zone_shutdown", 2, DEC, NOV, HID, DEC}, /* 5 */ +{"zone_lookup", 2, DEC, NOV, HID, STG}, /* 6 */ +{"zone_boot", 2, DEC, NOV, HID, DEC}, /* 7 */ +{"zone_version", 2, HEX, NOV, HID, DEC}, /* 8 */ +{"zone_setattr", 5, DEC, NOV, HID, DEC, ZGA, HEX, DEC}, /* 9 */ +{"zone_add_datalink", 3, DEC, NOV, HID, DEC, STG}, /* 10 */ +{"zone_remove_datalink", 3, DEC, NOV, HID, DEC, STG}, /* 11 */ +{"zone_check_datalink", 3, DEC, NOV, HID, HEX, STG}, /* 12 */ +{"zone_list_datalink", 4, DEC, NOV, HID, DEC, HEX, HEX}, /* 13 */ +}; +#define NZONECODE (sizeof (zonetable) / sizeof (struct systable)) + +static const struct systable labeltable[] = { +{"labelsys", 3, DEC, NOV, HID, HEX, HEX}, /* 0 */ +{"is_system_labeled", 1, DEC, NOV, HID}, /* 1 */ +{"tnrh", 3, DEC, NOV, HID, TND, HEX}, /* 2 */ +{"tnrhtp", 3, DEC, NOV, HID, TND, HEX}, /* 3 */ +{"tnmlp", 3, DEC, NOV, HID, TND, HEX}, /* 4 */ +{"getlabel", 3, DEC, NOV, HID, STG, HEX}, /* 5 */ +{"fgetlabel", 3, DEC, NOV, HID, DEC, HEX}, /* 6 */ +}; +#define NLABELCODE (sizeof (labeltable) / sizeof (struct systable)) + +const struct systable forktable[] = { +/* parent codes */ +{"forkx", 2, DEC, NOV, HID, FXF}, /* 0 */ +{"forkallx", 2, DEC, NOV, HID, FXF}, /* 1 */ +{"vforkx", 2, DEC, NOV, HID, FXF}, /* 2 */ +/* child codes */ +{"forkx", 0, DEC, NOV}, /* 3 */ +{"forkallx", 0, DEC, NOV}, /* 4 */ +{"vforkx", 0, DEC, NOV}, /* 5 */ +}; +#define NFORKCODE (sizeof (forktable) / sizeof (struct systable)) + +const struct systable sidsystable[] = { +{"allocids", 4, UNS, UNS, HID, DEC, DEC, DEC}, /* 0 */ +{"idmap_reg", 2, DEC, NOV, HID, DEC}, /* 1 */ +{"idmap_unreg", 2, DEC, NOV, HID, DEC}, /* 2 */ +}; +#define NSIDSYSCODE (sizeof (sidsystable) / sizeof (struct systable)) + +const struct systable utimesystable[] = { +{"futimens", 3, DEC, NOV, HID, DEC, HEX}, /* 0 */ +{"utimensat", 5, DEC, NOV, HID, ATC, STG, HEX, SNF}, /* 1 */ +}; +#define NUTIMESYSCODE (sizeof (utimesystable) / sizeof (struct systable)) + +const struct systable sockconfigtable[] = { +{"sockconfig", 5, DEC, NOV, SKC, DEC, DEC, DEC, STG}, /* 0 */ +{"sockconfig", 4, DEC, NOV, SKC, DEC, DEC, DEC}, /* 1 */ +{"sockconfig", 3, DEC, NOV, SKC, STG, HEX }, /* 2 */ +{"sockconfig", 2, DEC, NOV, SKC, STG }, /* 3 */ +}; +#define NSOCKCONFIGCODE (sizeof (sockconfigtable) / sizeof (struct systable)) + +const struct sysalias sysalias[] = { + { "exit", SYS_exit }, + { "fork", SYS_forksys }, + { "fork1", SYS_forksys }, + { "forkall", SYS_forksys }, + { "forkx", SYS_forksys }, + { "forkallx", SYS_forksys }, + { "vforkx", SYS_forksys }, + { "sbrk", SYS_brk }, + { "getppid", SYS_getpid }, + { "geteuid", SYS_getuid }, + { "getpgrp", SYS_pgrpsys }, + { "setpgrp", SYS_pgrpsys }, + { "getsid", SYS_pgrpsys }, + { "setsid", SYS_pgrpsys }, + { "getpgid", SYS_pgrpsys }, + { "setpgid", SYS_pgrpsys }, + { "getegid", SYS_getgid }, + { "msgget", SYS_msgsys }, + { "msgctl", SYS_msgsys }, + { "msgctl64", SYS_msgsys }, + { "msgrcv", SYS_msgsys }, + { "msgsnd", SYS_msgsys }, + { "msgids", SYS_msgsys }, + { "msgsnap", SYS_msgsys }, + { "msgop", SYS_msgsys }, + { "shmat", SYS_shmsys }, + { "shmctl", SYS_shmsys }, + { "shmctl64", SYS_shmsys }, + { "shmdt", SYS_shmsys }, + { "shmget", SYS_shmsys }, + { "shmids", SYS_shmsys }, + { "shmop", SYS_shmsys }, + { "semctl", SYS_semsys }, + { "semctl64", SYS_semsys }, + { "semget", SYS_semsys }, + { "semids", SYS_semsys }, + { "semop", SYS_semsys }, + { "semtimedop", SYS_semsys }, + { "uname", SYS_utssys }, + { "ustat", SYS_utssys }, + { "fusers", SYS_utssys }, + { "exec", SYS_execve }, + { "execl", SYS_execve }, + { "execv", SYS_execve }, + { "execle", SYS_execve }, + { "execlp", SYS_execve }, + { "execvp", SYS_execve }, + { "sigfillset", SYS_sigpending }, + { "getcontext", SYS_context }, + { "setcontext", SYS_context }, + { "getustack", SYS_context }, + { "setustack", SYS_context }, + { "hrtcntl", SYS_hrtsys }, + { "hrtalarm", SYS_hrtsys }, + { "hrtsleep", SYS_hrtsys }, + { "hrtcancel", SYS_hrtsys }, + { "aioread", SYS_kaio }, + { "aiowrite", SYS_kaio }, + { "aiowait", SYS_kaio }, + { "aiocancel", SYS_kaio }, + { "aionotify", SYS_kaio }, + { "audit", SYS_auditsys }, + { "door_create", SYS_door }, + { "door_revoke", SYS_door }, + { "door_info", SYS_door }, + { "door_call", SYS_door }, + { "door_return", SYS_door }, + { "door_bind", SYS_door }, + { "door_unbind", SYS_door }, + { "door_unref", SYS_door }, + { "door_ucred", SYS_door }, + { "door_getparam", SYS_door }, + { "door_setparam", SYS_door }, + { "pset_create", SYS_pset }, + { "pset_destroy", SYS_pset }, + { "pset_assign", SYS_pset }, + { "pset_info", SYS_pset }, + { "pset_bind", SYS_pset }, + { "pset_getloadavg", SYS_pset }, + { "pset_list", SYS_pset }, + { "pset_setattr", SYS_pset }, + { "pset_getattr", SYS_pset }, + { "pset_assign_forced", SYS_pset }, + { "settaskid", SYS_tasksys }, + { "gettaskid", SYS_tasksys }, + { "getprojid", SYS_tasksys }, + { "setppriv", SYS_privsys }, + { "getppriv", SYS_privsys }, + { "getprivimplinfo", SYS_privsys }, + { "setpflags", SYS_privsys }, + { "getpflags", SYS_privsys }, + { "getacct", SYS_exacctsys }, + { "putacct", SYS_exacctsys }, + { "wracct", SYS_exacctsys }, + { "lwp_cond_timedwait", SYS_lwp_cond_wait }, + { "lwp_sema_wait", SYS_lwp_sema_timedwait }, + { "lwp_park", SYS_lwp_park }, + { "lwp_unpark", SYS_lwp_park }, + { "lwp_unpark_all", SYS_lwp_park }, + { "lwp_rwlock_rdlock", SYS_lwp_rwlock_sys }, + { "lwp_rwlock_wrlock", SYS_lwp_rwlock_sys }, + { "lwp_rwlock_tryrdlock", SYS_lwp_rwlock_sys }, + { "lwp_rwlock_trywrlock", SYS_lwp_rwlock_sys }, + { "lwp_rwlock_unlock", SYS_lwp_rwlock_sys }, + { "lwp_mutex_lock", SYS_lwp_mutex_timedlock }, + { "sendfilev64", SYS_sendfilev }, + { "creat", SYS_open }, + { "creat64", SYS_open64 }, + { "openattrdirat", SYS_openat }, + { "lgrpsys", SYS_lgrpsys }, + { "getrusage", SYS_rusagesys }, + { "getrusage_chld", SYS_rusagesys }, + { "getrusage_lwp", SYS_rusagesys }, + { "getvmusage", SYS_rusagesys }, + { "getpeerucred", SYS_ucredsys }, + { "ucred_get", SYS_ucredsys }, + { "port_create", SYS_port }, + { "port_associate", SYS_port }, + { "port_dissociate", SYS_port }, + { "port_send", SYS_port }, + { "port_sendn", SYS_port }, + { "port_get", SYS_port }, + { "port_getn", SYS_port }, + { "port_alert", SYS_port }, + { "port_dispatch", SYS_port }, + { "zone_create", SYS_zone }, + { "zone_destroy", SYS_zone }, + { "zone_getattr", SYS_zone }, + { "zone_setattr", SYS_zone }, + { "zone_enter", SYS_zone }, + { "getzoneid", SYS_zone }, + { "zone_list", SYS_zone }, + { "zone_shutdown", SYS_zone }, + { "zone_add_datalink", SYS_zone }, + { "zone_remove_datalink", SYS_zone }, + { "zone_check_datalink", SYS_zone }, + { "zone_list_datalink", SYS_zone }, + { "is_system_labeled", SYS_labelsys }, + { "tnrh", SYS_labelsys }, + { "tnrhtp", SYS_labelsys }, + { "tnmlp", SYS_labelsys }, + { "getlabel", SYS_labelsys }, + { "fgetlabel", SYS_labelsys }, + { "getrctl", SYS_rctlsys }, + { "setrctl", SYS_rctlsys }, + { "rctlsys_lst", SYS_rctlsys }, + { "rctlsys_ctl", SYS_rctlsys }, + { "allocids", SYS_sidsys }, + { "futimens", SYS_utimesys }, + { "utimensat", SYS_utimesys }, + { "poll", SYS_pollsys }, + { "umount", SYS_umount2 }, + { "wait", SYS_waitid }, + { NULL, 0 } /* end-of-list */ +}; + +/* + * Return structure to interpret system call with sub-codes. + */ +const struct systable * +subsys(int syscall, int subcode) +{ + const struct systable *stp = NULL; + + if (subcode != -1) { + switch (syscall) { + case SYS_faccessat: + if ((unsigned)subcode < NACCESSCODE) + stp = &faccessattable[subcode]; + break; + case SYS_fchmodat: + if ((unsigned)subcode < NCHMODCODE) + stp = &fchmodattable[subcode]; + break; + case SYS_fchownat: + if ((unsigned)subcode < NCHOWNCODE) + stp = &fchownattable[subcode]; + break; + case SYS_mkdirat: + if ((unsigned)subcode < NMKDIRCODE) + stp = &mkdiratattable[subcode]; + break; + case SYS_mknodat: + if ((unsigned)subcode < NMKMODCODE) + stp = &mknodatattable[subcode]; + break; + case SYS_renameat: + if ((unsigned)subcode < NRENAMECODE) + stp = &renameattable[subcode]; + break; + case SYS_linkat: + if ((unsigned)subcode < NLINKATCODE) + stp = &linkattable[subcode]; + break; + case SYS_unlinkat: + if ((unsigned)subcode < NUNLINKCODE) + stp = &unlinkattable[subcode]; + break; + case SYS_symlinkat: + if ((unsigned)subcode < NSYMLINKCODE) + stp = &symlinkattable[subcode]; + break; + case SYS_readlinkat: + if ((unsigned)subcode < NREADLINKCODE) + stp = &readlinkattable[subcode]; + break; + case SYS_fstatat: + if ((unsigned)subcode < NSTATCODE) + stp = &fstatattable[subcode]; + break; + case SYS_fstatat64: + if ((unsigned)subcode < NSTAT64CODE) + stp = &fstatat64table[subcode]; + break; + case SYS_openat: + if ((unsigned)subcode < NOPENATCODE) + stp = &openattable[subcode]; + break; + case SYS_openat64: + if ((unsigned)subcode < NOPENAT64CODE) + stp = &openat64table[subcode]; + break; + case SYS_open: + if ((unsigned)subcode < NOPENCODE) + stp = &opentable[subcode]; + break; + case SYS_open64: + if ((unsigned)subcode < NOPEN64CODE) + stp = &open64table[subcode]; + break; + case SYS_msgsys: /* msgsys() */ + if ((unsigned)subcode < NMSGCODE) + stp = &msgtable[subcode]; + break; + case SYS_semsys: /* semsys() */ + if ((unsigned)subcode < NSEMCODE) + stp = &semtable[subcode]; + break; + case SYS_shmsys: /* shmsys() */ + if ((unsigned)subcode < NSHMCODE) + stp = &shmtable[subcode]; + break; + case SYS_pgrpsys: /* pgrpsys() */ + if ((unsigned)subcode < NPIDCODE) + stp = &pidtable[subcode]; + break; + case SYS_utssys: /* utssys() */ + if ((unsigned)subcode < NUTSCODE) + stp = &utstable[subcode]; + break; + case SYS_sysfs: /* sysfs() */ + if ((unsigned)subcode < NSFSCODE) + stp = &sfstable[subcode]; + break; + case SYS_sigpending: /* sigpending()/sigfillset() */ + if ((unsigned)subcode < NSGPCODE) + stp = &sgptable[subcode]; + break; + case SYS_context: /* [get|set]context() */ + if ((unsigned)subcode < NCTXCODE) + stp = &ctxtable[subcode]; + break; + case SYS_hrtsys: /* hrtsys() */ + if ((unsigned)subcode < NHRTCODE) + stp = &hrttable[subcode]; + break; + case SYS_corectl: /* corectl() */ + if ((unsigned)subcode < NCORCODE) + stp = &cortable[subcode]; + break; + case SYS_kaio: /* kaio() */ + if ((unsigned)subcode < NAIOCODE) + stp = &aiotable[subcode]; + break; + case SYS_door: /* doors */ + if ((unsigned)subcode < NDOORCODE) + stp = &doortable[subcode]; + break; + case SYS_pset: /* pset() */ + if ((unsigned)subcode < NPSETCODE) + stp = &psettable[subcode]; + break; + case SYS_lwp_create: /* lwp_create() */ + if ((unsigned)subcode < NLWPCREATECODE) + stp = &lwpcreatetable[subcode]; + break; + case SYS_tasksys: /* tasks */ + if ((unsigned)subcode < NTASKSYSCODE) + stp = &tasksystable[subcode]; + break; + case SYS_exacctsys: /* exacct */ + if ((unsigned)subcode < NEXACCTSYSCODE) + stp = &exacctsystable[subcode]; + break; + case SYS_privsys: /* privileges */ + if ((unsigned)subcode < NPRIVSYSCODE) + stp = &privsystable[subcode]; + break; + case SYS_lwp_park: /* lwp_park */ + if ((unsigned)subcode < NLWPPARKCODE) + stp = &lwpparktable[subcode]; + break; + case SYS_lwp_rwlock_sys: + if ((unsigned)subcode < NLWPRWLOCKCODE) + stp = &lwprwlocktable[subcode]; + break; + case SYS_sendfilev: /* sendfilev */ + if ((unsigned)subcode < NSENDFILESYSCODE) + stp = &sendfilevsystable[subcode]; + break; + case SYS_lgrpsys: /* lgrpsys */ + if ((unsigned)subcode < NLGRPSYSCODE) + stp = &lgrpsystable[subcode]; + break; + case SYS_rusagesys: /* rusagesys */ + if ((unsigned)subcode < NRUSAGESYSCODE) + stp = &rusagesystable[subcode]; + break; + case SYS_fcntl: /* fcntl */ + if ((unsigned)subcode < NFCNTLCODE) + stp = &fcntltable[subcode]; + break; + case SYS_ucredsys: + if ((unsigned)subcode < NUCREDSYSCODE) + stp = &ucredsystable[subcode]; + break; + case SYS_port: /* portfs */ + if ((unsigned)subcode < NPORTCODE) + stp = &portfstable[subcode]; + break; + case SYS_zone: /* zone family */ + if ((unsigned)subcode < NZONECODE) + stp = &zonetable[subcode]; + break; + case SYS_labelsys: /* label family */ + if ((unsigned)subcode < NLABELCODE) + stp = &labeltable[subcode]; + break; + case SYS_rctlsys: /* rctl family */ + if ((unsigned)subcode < NRCTLCODE) + stp = &rctltable[subcode]; + break; + case SYS_forksys: /* fork family */ + if ((unsigned)subcode < NFORKCODE) + stp = &forktable[subcode]; + break; + case SYS_sidsys: /* SID family */ + if ((unsigned)subcode < NSIDSYSCODE) + stp = &sidsystable[subcode]; + break; + case SYS_utimesys: /* utime family */ + if ((unsigned)subcode < NUTIMESYSCODE) + stp = &utimesystable[subcode]; + break; + case SYS_sockconfig: /* sockconfig family */ + if ((unsigned)subcode < NSOCKCONFIGCODE) + stp = &sockconfigtable[subcode]; + break; + } + } + + if (stp == NULL) + stp = &systable[((unsigned)syscall < SYSEND)? syscall : 0]; + + return (stp); +} + +/* + * Return the name of the system call. + */ +const char * +sysname(private_t *pri, int syscall, int subcode) +{ + const struct systable *stp = subsys(syscall, subcode); + const char *name = stp->name; /* may be NULL */ + + if (name == NULL) { /* manufacture a name */ + (void) sprintf(pri->sys_name, "sys#%d", syscall); + name = pri->sys_name; + } + + return (name); +} + +/* + * Return the name of the signal. + * Return NULL if unknown signal. + */ +const char * +rawsigname(private_t *pri, int sig) +{ + /* + * The C library function sig2str() omits the leading "SIG". + */ + (void) strcpy(pri->raw_sig_name, "SIG"); + + if (sig > 0 && sig2str(sig, pri->raw_sig_name+3) == 0) + return (pri->raw_sig_name); + return (NULL); +} + +/* + * Return the name of the signal. + * Manufacture a name for unknown signal. + */ +const char * +signame(private_t *pri, int sig) +{ + const char *name = rawsigname(pri, sig); + + if (name == NULL) { /* manufacture a name */ + (void) sprintf(pri->sig_name, "SIG#%d", sig); + name = pri->sig_name; + } + + return (name); +} + +/* + * Determine the subcode for this syscall, if any. + */ +int +getsubcode(private_t *pri) +{ + const lwpstatus_t *Lsp = pri->lwpstat; + int syscall = Lsp->pr_syscall; + int nsysarg = Lsp->pr_nsysarg; + int subcode = -1; + int arg0; + + if (syscall > 0 && nsysarg > 0 && !prismember(&rawout, syscall)) { + arg0 = Lsp->pr_sysarg[0]; + switch (syscall) { + case SYS_utssys: /* utssys() */ + if (nsysarg > 2) + subcode = Lsp->pr_sysarg[2]; + break; + case SYS_faccessat: + if (nsysarg > 3) + subcode = ((int)Lsp->pr_sysarg[0] == AT_FDCWD && + Lsp->pr_sysarg[3] == 0)? 1 : 0; + break; + case SYS_fchmodat: + if (nsysarg > 1 && Lsp->pr_sysarg[1] == NULL) { + subcode = 3; + break; + } + if (nsysarg > 0 && (int)Lsp->pr_sysarg[0] != AT_FDCWD) { + subcode = 0; + break; + } + if (nsysarg > 3) + subcode = (Lsp->pr_sysarg[3] == 0)? 1 : + (Lsp->pr_sysarg[3] == AT_SYMLINK_NOFOLLOW)? + 2 : 0; + break; + case SYS_fchownat: + if (nsysarg > 1 && Lsp->pr_sysarg[1] == NULL) { + subcode = 3; + break; + } + if (nsysarg > 0 && (int)Lsp->pr_sysarg[0] != AT_FDCWD) { + subcode = 0; + break; + } + if (nsysarg > 4) + subcode = (Lsp->pr_sysarg[4] == 0)? 1 : + (Lsp->pr_sysarg[4] == AT_SYMLINK_NOFOLLOW)? + 2 : 0; + break; + case SYS_mkdirat: + case SYS_mknodat: + case SYS_readlinkat: + if (nsysarg > 0) + subcode = ((int)Lsp->pr_sysarg[0] == AT_FDCWD)? + 1 : 0; + break; + case SYS_renameat: + if (nsysarg > 2) + subcode = ((int)Lsp->pr_sysarg[0] == AT_FDCWD && + (int)Lsp->pr_sysarg[2] == AT_FDCWD)? 1 : 0; + break; + case SYS_linkat: + if (nsysarg > 4) + subcode = ((int)Lsp->pr_sysarg[0] == AT_FDCWD && + (int)Lsp->pr_sysarg[2] == AT_FDCWD && + Lsp->pr_sysarg[4] == 0)? 1 : 0; + break; + case SYS_unlinkat: + if (nsysarg > 2) + subcode = + ((int)Lsp->pr_sysarg[0] != AT_FDCWD)? 0 : + (Lsp->pr_sysarg[2] == AT_REMOVEDIR)? 2 : + (Lsp->pr_sysarg[2] == 0)? 1 : 0; + break; + case SYS_symlinkat: + if (nsysarg > 1) + subcode = ((int)Lsp->pr_sysarg[1] == AT_FDCWD)? + 1 : 0; + break; + case SYS_fstatat: + case SYS_fstatat64: + if (nsysarg > 1 && Lsp->pr_sysarg[1] == NULL) { + subcode = 3; + break; + } + if (nsysarg > 0 && (int)Lsp->pr_sysarg[0] != AT_FDCWD) { + subcode = 0; + break; + } + if (nsysarg > 3) + subcode = (Lsp->pr_sysarg[3] == 0)? 1 : + (Lsp->pr_sysarg[3] == AT_SYMLINK_NOFOLLOW)? + 2 : 0; + break; + case SYS_openat: /* openat() w/ and w/o AT_FDCWD */ + case SYS_openat64: /* and with and w/o O_CREAT */ + if (nsysarg > 2) + subcode = ((int)Lsp->pr_sysarg[0] == AT_FDCWD)? + ((Lsp->pr_sysarg[2] & O_CREAT)? 3 : 2) : + ((Lsp->pr_sysarg[2] & O_CREAT)? 1 : 0); + break; + case SYS_open: /* open() w/ and w/o O_CREAT */ + case SYS_open64: + if (nsysarg > 1) + subcode = (Lsp->pr_sysarg[1] & O_CREAT)? 1 : 0; + break; + case SYS_kaio: /* kaio() */ + subcode = arg0 & ~AIO_POLL_BIT; + break; + case SYS_door: /* doors */ + if (nsysarg > 5) + subcode = Lsp->pr_sysarg[5]; + break; + case SYS_lwp_create: /* lwp_create() */ + subcode = /* 0 for parent, 1 for child */ + (Lsp->pr_why == PR_SYSEXIT && Lsp->pr_errno == 0 && + Lsp->pr_rval1 == 0); + break; + case SYS_forksys: /* forksys */ + subcode = arg0; + if (Lsp->pr_why == PR_SYSEXIT && Lsp->pr_errno == 0 && + pri->Rval2 != 0) /* this is the child */ + subcode += 3; + break; + case SYS_msgsys: /* msgsys() */ + case SYS_semsys: /* semsys() */ + case SYS_shmsys: /* shmsys() */ + case SYS_pgrpsys: /* pgrpsys() */ + case SYS_sysfs: /* sysfs() */ + case SYS_sigpending: /* sigpending()/sigfillset() */ + case SYS_context: /* [get|set]context() */ + case SYS_hrtsys: /* hrtsys() */ + case SYS_corectl: /* corectl() */ + case SYS_pset: /* pset() */ + case SYS_tasksys: /* tasks */ + case SYS_privsys: /* privileges */ + case SYS_exacctsys: /* exacct */ + case SYS_lwp_park: /* lwp_park */ + case SYS_lwp_rwlock_sys: /* lwp_rwlock_*() */ + case SYS_sendfilev: /* sendfilev */ + case SYS_lgrpsys: /* lgrpsys */ + case SYS_rusagesys: /* rusagesys */ + case SYS_ucredsys: /* ucredsys */ + case SYS_zone: /* zone */ + case SYS_labelsys: /* labelsys */ + case SYS_rctlsys: /* rctlsys */ + case SYS_sidsys: /* sidsys */ + case SYS_utimesys: /* utimesys */ + case SYS_sockconfig: /* sockconfig */ + subcode = arg0; + break; + case SYS_fcntl: /* fcntl() */ + if (nsysarg > 2) { + switch (Lsp->pr_sysarg[1]) { + default: subcode = 0; break; + case F_GETFL: + case F_GETOWN: + case F_GETXFL: subcode = 1; break; + case F_SETFL: subcode = 2; break; + } + } + break; + case SYS_port: /* portfs */ + subcode = arg0 & PORT_CODE_MASK; + break; + } + } + + return (subcode); +} + +/* + * Return the maximum number of system calls, counting + * all system calls with subcodes as separate calls. + */ +int +maxsyscalls() +{ + return (PRMAXSYS + 1 + + NACCESSCODE - 1 + + NCHMODCODE - 1 + + NCHOWNCODE - 1 + + NMKDIRCODE - 1 + + NMKMODCODE - 1 + + NRENAMECODE - 1 + + NLINKATCODE - 1 + + NUNLINKCODE - 1 + + NSYMLINKCODE - 1 + + NREADLINKCODE - 1 + + NSTATCODE - 1 + + NSTAT64CODE - 1 + + NOPENATCODE - 1 + + NOPENAT64CODE - 1 + + NOPENCODE - 1 + + NOPEN64CODE - 1 + + NMSGCODE - 1 + + NSEMCODE - 1 + + NSHMCODE - 1 + + NPIDCODE - 1 + + NSFSCODE - 1 + + NUTSCODE - 1 + + NSGPCODE - 1 + + NCTXCODE - 1 + + NHRTCODE - 1 + + NCORCODE - 1 + + NAIOCODE - 1 + + NDOORCODE - 1 + + NPSETCODE - 1 + + NLWPCREATECODE - 1 + + NTASKSYSCODE - 1 + + NEXACCTSYSCODE - 1 + + NLWPPARKCODE - 1 + + NLWPRWLOCKCODE - 1 + + NSENDFILESYSCODE - 1 + + NLGRPSYSCODE - 1 + + NRUSAGESYSCODE - 1 + + NFCNTLCODE - 1 + + NPRIVSYSCODE - 1 + + NUCREDSYSCODE - 1 + + NPORTCODE - 1 + + NZONECODE - 1 + + NLABELCODE - 1 + + NRCTLCODE - 1 + + NFORKCODE - 1 + + NSIDSYSCODE - 1 + + NUTIMESYSCODE - 1 + + NSOCKCONFIGCODE - 1); +} + +/* + * Return the number of subcodes for the specified system call number. + */ +int +nsubcodes(int syscall) +{ + switch (syscall) { + case SYS_faccessat: + return (NACCESSCODE); + case SYS_fchmodat: + return (NCHMODCODE); + case SYS_fchownat: + return (NCHOWNCODE); + case SYS_mkdirat: + return (NMKDIRCODE); + case SYS_mknodat: + return (NMKMODCODE); + case SYS_renameat: + return (NRENAMECODE); + case SYS_linkat: + return (NLINKATCODE); + case SYS_unlinkat: + return (NUNLINKCODE); + case SYS_symlinkat: + return (NSYMLINKCODE); + case SYS_readlinkat: + return (NREADLINKCODE); + case SYS_fstatat: + return (NSTATCODE); + case SYS_fstatat64: + return (NSTAT64CODE); + case SYS_openat: + return (NOPENATCODE); + case SYS_openat64: + return (NOPENAT64CODE); + case SYS_open: + return (NOPENCODE); + case SYS_open64: + return (NOPEN64CODE); + case SYS_msgsys: + return (NMSGCODE); + case SYS_semsys: + return (NSEMCODE); + case SYS_shmsys: + return (NSHMCODE); + case SYS_pgrpsys: + return (NPIDCODE); + case SYS_utssys: + return (NUTSCODE); + case SYS_sysfs: + return (NSFSCODE); + case SYS_sigpending: + return (NSGPCODE); + case SYS_context: + return (NCTXCODE); + case SYS_hrtsys: + return (NHRTCODE); + case SYS_corectl: + return (NCORCODE); + case SYS_kaio: + return (NAIOCODE); + case SYS_door: + return (NDOORCODE); + case SYS_pset: + return (NPSETCODE); + case SYS_lwp_create: + return (NLWPCREATECODE); + case SYS_tasksys: + return (NTASKSYSCODE); + case SYS_exacctsys: + return (NEXACCTSYSCODE); + case SYS_privsys: + return (NPRIVSYSCODE); + case SYS_lwp_park: + return (NLWPPARKCODE); + case SYS_lwp_rwlock_sys: + return (NLWPRWLOCKCODE); + case SYS_sendfilev: + return (NSENDFILESYSCODE); + case SYS_lgrpsys: + return (NLGRPSYSCODE); + case SYS_rusagesys: + return (NRUSAGESYSCODE); + case SYS_fcntl: + return (NFCNTLCODE); + case SYS_ucredsys: + return (NUCREDSYSCODE); + case SYS_port: + return (NPORTCODE); + case SYS_zone: + return (NZONECODE); + case SYS_labelsys: + return (NLABELCODE); + case SYS_rctlsys: + return (NRCTLCODE); + case SYS_forksys: + return (NFORKCODE); + case SYS_sidsys: + return (NSIDSYSCODE); + case SYS_utimesys: + return (NUTIMESYSCODE); + case SYS_sockconfig: + return (NSOCKCONFIGCODE); + default: + return (1); + } +} + + + +/* Socket address families (and protocol families) */ +const char * const afcodes[] = { + "UNSPEC", /* 0 */ + "UNIX", /* 1 */ + "INET", /* 2 */ + "IMPLINK", /* 3 */ + "PUP", /* 4 */ + "CHAOS", /* 5 */ + "NS", /* 6 */ + "NBS", /* 7 */ + "ECMA", /* 8 */ + "DATAKIT", /* 9 */ + "CCITT", /* 10 */ + "SNA", /* 11 */ + "DECnet", /* 12 */ + "DLI", /* 13 */ + "LAT", /* 14 */ + "HYLINK", /* 15 */ + "APPLETALK", /* 16 */ + "NIT", /* 17 */ + "802", /* 18 */ + "OSI", /* 19 */ + "X25", /* 20 */ + "OSINET", /* 21 */ + "GOSIP", /* 22 */ + "IPX", /* 23 */ + "ROUTE", /* 24 */ + "LINK", /* 25 */ + "INET6", /* 26 */ + "KEY", /* 27 */ + "NCA", /* 28 */ + "POLICY", /* 29 */ + "RDS", /* 30 */ + "TRILL", /* 31 */ + "PACKET" /* 32 */ +}; +#if MAX_AFCODES != 33 +#error Need to update address-family table +#endif + + +const char * const socktype_codes[] = { /* cf socket.h */ + NULL, + "SOCK_DGRAM", /* 1 */ + "SOCK_STREAM", /* 2 */ + NULL, + "SOCK_RAW", /* 4 */ + "SOCK_RDM", /* 5 */ + "SOCK_SEQPACKET" /* 6 */ +}; +#if MAX_SOCKTYPES != 7 +#error Need to update socket-type table +#endif |