blob: d6779c63d7b3b4392a6c463d8795d4e96922bce0 [file] [log] [blame]
/*
* 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 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
/* All Rights Reserved */
#pragma ident "%Z%%M% %I% %E% SMI"
#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 */
{"forkall", 0, DEC, NOV}, /* 2 */
{"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 */
{"wait", 0, DEC, HHX}, /* 7 */
{"creat", 2, DEC, NOV, STG, OCT}, /* 8 */
{"link", 2, DEC, NOV, STG, STG}, /* 9 */
{"unlink", 1, DEC, NOV, STG}, /* 10 */
{"exec", 2, DEC, NOV, STG, DEC}, /* 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 */
{"umount", 1, DEC, NOV, STG}, /* 22 */
{"setuid", 1, DEC, NOV, DEC}, /* 23 */
{"getuid", 0, DEC, DEC}, /* 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 */
{"utime", 2, DEC, NOV, STG, HEX}, /* 30 */
{"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 */
/* The following entry was xenix */
{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
{"dup", 1, DEC, NOV, DEC}, /* 41 */
{"pipe", 0, DEC, DEC}, /* 42 */
{"times", 1, DEC, NOV, HEX}, /* 43 */
{"profil", 4, DEC, NOV, HEX, UNS, HEX, OCT}, /* 44 */
{"plock", 1, DEC, NOV, PLK}, /* 45 */
{"setgid", 1, DEC, NOV, DEC}, /* 46 */
{"getgid", 0, DEC, DEC}, /* 47 */
{"signal", 2, HEX, NOV, SIG, ACT}, /* 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 */
{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
{"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 */
/* The following 6 entries were reserved for the UNIX PC */
{ 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},
{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
{"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, DEC, STG, HEX, HEX, DEC, DEC}, /* 74 */
{"issetugid", 0, DEC, NOV}, /* 75 */
{"fsat", 6, DEC, NOV, HEX, HEX, HEX, HEX, HEX, HEX}, /* 76 */
{"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 */
{"poll", 3, DEC, NOV, HEX, DEC, DEC}, /* 87 */
{"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 */
{"evsys", 3, DEC, NOV, DEC, DEC, HEX}, /* 101 */
{"evtrapret", 0, DEC, NOV}, /* 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 */
{"acancel", 3, DEC, NOV, DEC, HEX, DEC}, /* 110 */
{"async", 3, DEC, NOV, DEC, HEX, DEC}, /* 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 */
{"xstat", 3, DEC, NOV, DEC, STG, HEX}, /* 123 */
{"lxstat", 3, DEC, NOV, DEC, STG, HEX}, /* 124 */
{"fxstat", 3, DEC, NOV, DEC, DEC, HEX}, /* 125 */
{"xmknod", 4, DEC, NOV, DEC, STG, OCT, HEX}, /* 126 */
{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
{"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, DEC}, /* 136 */
{"sysconfig", 1, DEC, NOV, CNF}, /* 137 */
{"adjtime", 2, DEC, NOV, HEX, HEX}, /* 138 */
{"sysinfo", 3, DEC, NOV, INF, RST, DEC}, /* 139 */
{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
{"seteuid", 1, DEC, NOV, DEC}, /* 141 */
{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
{"fork1", 0, DEC, NOV}, /* 143 */
{"sigtimedwait", 3, DEC, NOV, HEX, HEX, HEX}, /* 144 */
{"lwp_info", 1, DEC, NOV, HEX}, /* 145 */
{"yield", 0, DEC, NOV}, /* 146 */
{"lwp_sema_wait", 1, DEC, NOV, HEX}, /* 147 */
{"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 */
{"utimes", 2, DEC, NOV, STG, HEX}, /* 154 */
{"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", 3, HEX, HEX, SPM, HEX, HEX}, /* 165 */
{"lwp_private", 3, HEX, NOV, DEC, DEC, HEX}, /* 166 */
{"lwp_wait", 2, DEC, NOV, DEC, HEX}, /* 167 */
{"lwp_mutex_wakeup", 1, DEC, NOV, HEX}, /* 168 */
{"lwp_mutex_lock", 1, DEC, NOV, HEX}, /* 169 */
{"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 */
{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
{"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", 2, DEC, NOV, DEC, 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", 4, DEC, NOV, DEC, SIG, HEX, SQC}, /* 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, DEC, DEC}, /* 202 */
{"setregid", 2, DEC, NOV, DEC, DEC}, /* 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", 2, DEC, NOV, 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 */
{"creat64", 2, DEC, NOV, STG, OCT}, /* 224 */
{"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", 4, DEC, NOV, DEC, HEX, HEX, SKV}, /* 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", 4, DEC, NOV, DEC, DEC, DEC, STG}, /* 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", 1, DEC, NOV, HEX}, /* 251 */
{"lwp_mutex_init", 2, DEC, NOV, HEX, HEX}, /* 252 */
{"cladm", 3, DEC, NOV, CLC, CLF, HEX}, /* 253 */
{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
{"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 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 sigtable[] = {
{"signal", 2, HEX, NOV, SIG, ACT}, /* 0 */
{"sigset", 2, HEX, NOV, SIX, ACT}, /* 1 */
{"sighold", 1, HEX, NOV, SIX}, /* 2 */
{"sigrelse", 1, HEX, NOV, SIX}, /* 3 */
{"sigignore", 1, HEX, NOV, SIX}, /* 4 */
{"sigpause", 1, HEX, NOV, SIX}, /* 5 */
};
#define NSIGCODE (sizeof (sigtable) / 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 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 */
};
#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 fsatsystable[] = {
{"openat", 5, DEC, NOV, HID, ATC, STG, OPN, OCT}, /* 0 */
{"openat64", 5, DEC, NOV, HID, ATC, STG, OPN, OCT}, /* 1 */
{"fstatat64", 5, DEC, NOV, HID, ATC, STG, HEX, HEX}, /* 2 */
{"fstatat", 5, DEC, NOV, HID, ATC, STG, HEX, HEX}, /* 3 */
{"fchownat", 6, DEC, NOV, HID, ATC, STG, HEX, HEX, HEX}, /* 4 */
{"unlinkat", 4, DEC, NOV, HID, ATC, STG, HEX}, /* 5 */
{"futimesat", 4, DEC, NOV, HID, ATC, STG, HEX}, /* 6 */
{"renameat", 5, DEC, NOV, HID, ATC, STG, DEC, STG}, /* 7 */
{"openat", 4, DEC, NOV, HID, ATC, STG, OPN}, /* 8 */
{"openat64", 4, DEC, NOV, HID, ATC, STG, OPN}, /* 9 */
};
#define NFSATSYSCODE (sizeof (fsatsystable) / 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 */
};
#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 */
};
#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", 3, DEC, NOV, HID, DEC, STG}, /* 7 */
{"zone_version", 2, HEX, NOV, HID, DEC}, /* 8 */
};
#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 sysalias sysalias[] = {
{ "exit", SYS_exit },
{ "fork", SYS_fork1 },
{ "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 },
{ "sigset", SYS_signal },
{ "sighold", SYS_signal },
{ "sigrelse", SYS_signal },
{ "sigignore", SYS_signal },
{ "sigpause", SYS_signal },
{ "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_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 },
{ "sendfilev64", SYS_sendfilev },
{ "openat", SYS_fsat },
{ "openat64", SYS_fsat },
{ "fstatat64", SYS_fsat },
{ "fstatat", SYS_fsat },
{ "fchownat", SYS_fsat },
{ "unlinkat", SYS_fsat },
{ "futimesat", SYS_fsat },
{ "renameat", SYS_fsat },
{ "lgrpsys", SYS_lgrpsys },
{ "getrusage", SYS_rusagesys },
{ "getrusage_chld", SYS_rusagesys },
{ "getrusage_lwp", 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_enter", SYS_zone },
{ "getzoneid", SYS_zone },
{ "zone_list", SYS_zone },
{ "zone_shutdown", SYS_zone },
{ "is_system_labeled", SYS_labelsys },
{ "tnrh", SYS_labelsys },
{ "tnrhtp", SYS_labelsys },
{ "tnmlp", SYS_labelsys },
{ "getlabel", SYS_labelsys },
{ "fgetlabel", SYS_labelsys },
{ 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_open:
if ((unsigned)subcode < NOPENCODE)
stp = &opentable[subcode];
break;
case SYS_open64:
if ((unsigned)subcode < NOPEN64CODE)
stp = &open64table[subcode];
break;
case SYS_signal: /* signal() + sigset() family */
if ((unsigned)subcode < NSIGCODE)
stp = &sigtable[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_fsat:
if ((unsigned)subcode < NFSATSYSCODE)
stp = &fsatsystable[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;
}
}
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) {
arg0 = Lsp->pr_sysarg[0];
switch (syscall) {
case SYS_utssys: /* utssys() */
if (nsysarg > 2)
subcode = Lsp->pr_sysarg[2];
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_fsat:
switch (arg0) {
case 0: /* openat */
if (nsysarg > 3)
subcode =
(Lsp->pr_sysarg[3] & O_CREAT) ?
0 : 8;
break;
case 1: /* openat64 */
if (nsysarg > 3)
subcode =
(Lsp->pr_sysarg[3] & O_CREAT) ?
1 : 9;
break;
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
subcode = arg0;
}
break;
case SYS_signal: /* signal() + sigset() family */
switch (arg0 & ~SIGNO_MASK) {
default: subcode = 0; break;
case SIGDEFER: subcode = 1; break;
case SIGHOLD: subcode = 2; break;
case SIGRELSE: subcode = 3; break;
case SIGIGNORE: subcode = 4; break;
case SIGPAUSE: subcode = 5; break;
}
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_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 */
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
+ NOPENCODE - 1
+ NOPEN64CODE - 1
+ NSIGCODE - 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
+ NFSATSYSCODE - 1
+ NLWPPARKCODE - 1
+ NLWPRWLOCKCODE - 1
+ NSENDFILESYSCODE - 1
+ NLGRPSYSCODE - 1
+ NRUSAGESYSCODE - 1
+ NFCNTLCODE - 1
+ NPRIVSYSCODE - 1
+ NUCREDSYSCODE - 1
+ NPORTCODE - 1
+ NZONECODE - 1
+ NLABELCODE - 1);
}
/*
* Return the number of subcodes for the specified system call number.
*/
int
nsubcodes(int syscall)
{
switch (syscall) {
case SYS_open:
return (NOPENCODE);
case SYS_open64:
return (NOPEN64CODE);
case SYS_signal: /* signal() + sigset() family */
return (NSIGCODE);
case SYS_msgsys: /* msgsys() */
return (NMSGCODE);
case SYS_semsys: /* semsys() */
return (NSEMCODE);
case SYS_shmsys: /* shmsys() */
return (NSHMCODE);
case SYS_pgrpsys: /* pgrpsys() */
return (NPIDCODE);
case SYS_utssys: /* utssys() */
return (NUTSCODE);
case SYS_sysfs: /* sysfs() */
return (NSFSCODE);
case SYS_sigpending: /* sigpending()/sigfillset() */
return (NSGPCODE);
case SYS_context: /* [get|set]context() */
return (NCTXCODE);
case SYS_hrtsys: /* hrtsys() */
return (NHRTCODE);
case SYS_corectl: /* corectl() */
return (NCORCODE);
case SYS_kaio: /* kaio() */
return (NAIOCODE);
case SYS_door: /* doors */
return (NDOORCODE);
case SYS_pset: /* pset() */
return (NPSETCODE);
case SYS_lwp_create: /* lwp_create() */
return (NLWPCREATECODE);
case SYS_tasksys: /* tasks */
return (NTASKSYSCODE);
case SYS_exacctsys: /* exacct */
return (NEXACCTSYSCODE);
case SYS_fsat:
return (NFSATSYSCODE);
case SYS_privsys: /* privileges */
return (NPRIVSYSCODE);
case SYS_lwp_park: /* lwp_park */
return (NLWPPARKCODE);
case SYS_lwp_rwlock_sys:
return (NLWPRWLOCKCODE);
case SYS_sendfilev: /* sendfilev */
return (NSENDFILESYSCODE);
case SYS_lgrpsys: /* 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: /* zone */
return (NZONECODE);
case SYS_labelsys:
return (NLABELCODE);
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 */
};
#if MAX_AFCODES != 30
#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