#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"
const char *const errcode[] = {
NULL,
"EPERM",
"ENOENT",
"ESRCH",
"EINTR",
"EIO",
"ENXIO",
"E2BIG",
"ENOEXEC",
"EBADF",
"ECHILD",
"EAGAIN",
"ENOMEM",
"EACCES",
"EFAULT",
"ENOTBLK",
"EBUSY",
"EEXIST",
"EXDEV",
"ENODEV",
"ENOTDIR",
"EISDIR",
"EINVAL",
"ENFILE",
"EMFILE",
"ENOTTY",
"ETXTBSY",
"EFBIG",
"ENOSPC",
"ESPIPE",
"EROFS",
"EMLINK",
"EPIPE",
"EDOM",
"ERANGE",
"ENOMSG",
"EIDRM",
"ECHRNG",
"EL2NSYNC",
"EL3HLT",
"EL3RST",
"ELNRNG",
"EUNATCH",
"ENOCSI",
"EL2HLT",
"EDEADLK",
"ENOLCK",
"ECANCELED",
"ENOTSUP",
"EDQUOT",
"EBADE",
"EBADR",
"EXFULL",
"ENOANO",
"EBADRQC",
"EBADSLT",
"EDEADLOCK",
"EBFONT",
"EOWNERDEAD",
"ENOTRECOVERABLE",
"ENOSTR",
"ENODATA",
"ETIME",
"ENOSR",
"ENONET",
"ENOPKG",
"EREMOTE",
"ENOLINK",
"EADV",
"ESRMNT",
"ECOMM",
"EPROTO",
"ELOCKUNMAPPED",
"ENOTACTIVE",
"EMULTIHOP",
NULL,
NULL,
"EBADMSG",
"ENAMETOOLONG",
"EOVERFLOW",
"ENOTUNIQ",
"EBADFD",
"EREMCHG",
"ELIBACC",
"ELIBBAD",
"ELIBSCN",
"ELIBMAX",
"ELIBEXEC",
"EILSEQ",
"ENOSYS",
"ELOOP",
"ERESTART",
"ESTRPIPE",
"ENOTEMPTY",
"EUSERS",
"ENOTSOCK",
"EDESTADDRREQ",
"EMSGSIZE",
"EPROTOTYPE",
"ENOPROTOOPT",
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
"EPROTONOSUPPORT",
"ESOCKTNOSUPPORT",
"EOPNOTSUPP",
"EPFNOSUPPORT",
"EAFNOSUPPORT",
"EADDRINUSE",
"EADDRNOTAVAIL",
"ENETDOWN",
"ENETUNREACH",
"ENETRESET",
"ECONNABORTED",
"ECONNRESET",
"ENOBUFS",
"EISCONN",
"ENOTCONN",
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
"ESHUTDOWN",
"ETOOMANYREFS",
"ETIMEDOUT",
"ECONNREFUSED",
"EHOSTDOWN",
"EHOSTUNREACH",
"EALREADY",
"EINPROGRESS",
"ESTALE"
};
#define NERRCODE (sizeof (errcode) / sizeof (char *))
const char *
errname(int err)
{
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},
{"psecflags", 3, DEC, NOV, HEX, PSFW, PSDLT},
{"read", 3, DEC, NOV, DEC, IOB, UNS},
{"write", 3, DEC, NOV, DEC, IOB, UNS},
{"open", 3, DEC, NOV, STG, OPN, OCT},
{"close", 1, DEC, NOV, DEC},
{"linkat", 5, DEC, NOV, ATC, STG, ATC, STG, SNF},
{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
{"link", 2, DEC, NOV, STG, STG},
{"unlink", 1, DEC, NOV, STG},
{"symlinkat", 3, DEC, NOV, STG, ATC, STG},
{"chdir", 1, DEC, NOV, STG},
{"time", 0, DEC, NOV},
{"mknod", 3, DEC, NOV, STG, OCT, HEX},
{"chmod", 2, DEC, NOV, STG, OCT},
{"chown", 3, DEC, NOV, STG, DEC, DEC},
{"brk", 1, DEC, NOV, HEX},
{"stat", 2, DEC, NOV, STG, HEX},
{"lseek", 3, DEC, NOV, DEC, DEX, WHN},
{"getpid", 0, DEC, DEC},
{"mount", 8, DEC, NOV, STG, STG, MTF, MFT, HEX, DEC, HEX, DEC},
{"readlinkat", 4, DEC, NOV, ATC, STG, RLK, UNS},
{"setuid", 1, DEC, NOV, UNS},
{"getuid", 0, UNS, UNS},
{"stime", 1, DEC, NOV, DEC},
{"pcsample", 2, DEC, NOV, HEX, DEC},
{"alarm", 1, DEC, NOV, UNS},
{"fstat", 2, DEC, NOV, DEC, HEX},
{"pause", 0, DEC, NOV},
{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
{"stty", 2, DEC, NOV, DEC, DEC},
{"gtty", 2, DEC, NOV, DEC, DEC},
{"access", 2, DEC, NOV, STG, ACC},
{"nice", 1, DEC, NOV, DEC},
{"statfs", 4, DEC, NOV, STG, HEX, DEC, DEC},
{"sync", 0, DEC, NOV},
{"kill", 2, DEC, NOV, DEC, SIG},
{"fstatfs", 4, DEC, NOV, DEC, HEX, DEC, DEC},
{"pgrpsys", 3, DEC, NOV, DEC, DEC, DEC},
{"uucopystr", 3, DEC, NOV, STG, RST, UNS},
{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
{"pipe", 2, DEC, NOV, PFD, PIP},
{"times", 1, DEC, NOV, HEX},
{"profil", 4, DEC, NOV, HEX, UNS, HEX, OCT},
{"faccessat", 4, DEC, NOV, ATC, STG, ACC, FAT},
{"setgid", 1, DEC, NOV, UNS},
{"getgid", 0, UNS, UNS},
{"mknodat", 4, DEC, NOV, ATC, STG, OCT, HEX},
{"msgsys", 6, DEC, NOV, DEC, DEC, DEC, DEC, DEC, DEC},
{"sysi86", 4, HEX, NOV, S86, HEX, HEX, HEX, DEC, DEC},
{"acct", 1, DEC, NOV, STG},
{"shmsys", 4, DEC, NOV, DEC, HEX, HEX, HEX},
{"semsys", 5, DEC, NOV, DEC, HEX, HEX, HEX, HEX},
{"ioctl", 3, DEC, NOV, DEC, IOC, IOA},
{"uadmin", 3, DEC, NOV, DEC, DEC, DEC},
{"fchownat", 5, DEC, NOV, ATC, STG, DEC, DEC, SNF},
{"utssys", 4, DEC, NOV, HEX, DEC, UTS, HEX},
{"fdsync", 2, DEC, NOV, DEC, FDS},
{"execvex", 4, DEC, NOV, STG, HEX, HEX, EXC},
{"umask", 1, OCT, NOV, OCT},
{"chroot", 1, DEC, NOV, STG},
{"fcntl", 4, DEC, NOV, DEC, FCN, HEX, HEX},
{"ulimit", 2, DEX, NOV, ULM, DEC},
{"renameat", 4, DEC, NOV, ATC, STG, ATC, STG},
{"unlinkat", 3, DEC, NOV, ATC, STG, UAT},
{"fstatat", 4, DEC, NOV, ATC, STG, HEX, SNF},
{"fstatat64", 4, DEC, NOV, ATC, STG, HEX, SNF},
{"openat", 4, DEC, NOV, ATC, STG, OPN, OCT},
{"openat64", 4, DEC, NOV, ATC, STG, OPN, OCT},
{"tasksys", 5, DEC, NOV, DEC, DEC, DEC, HEX, DEC},
{"acctctl", 3, DEC, NOV, HEX, HEX, UNS},
{"exacctsys", 6, DEC, NOV, DEC, IDT, DEC, HEX, DEC, HEX},
{"getpagesizes", 2, DEC, NOV, HEX, DEC},
{"rctlsys", 6, DEC, NOV, RSC, STG, HEX, HEX, DEC, DEC},
{"sidsys", 4, UNS, UNS, DEC, DEC, DEC, DEC},
{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
{"lwp_park", 3, DEC, NOV, DEC, HEX, DEC},
{"sendfilev", 5, DEC, NOV, DEC, DEC, HEX, DEC, HEX},
{"rmdir", 1, DEC, NOV, STG},
{"mkdir", 2, DEC, NOV, STG, OCT},
{"getdents", 3, DEC, NOV, DEC, HEX, UNS},
{"privsys", 5, HEX, NOV, DEC, DEC, DEC, HEX, DEC},
{"ucredsys", 3, DEC, NOV, DEC, DEC, HEX},
{"sysfs", 3, DEC, NOV, SFS, DEX, DEX},
{"getmsg", 4, DEC, NOV, DEC, HEX, HEX, HEX},
{"putmsg", 4, DEC, NOV, DEC, HEX, HEX, SMF},
{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
{"lstat", 2, DEC, NOV, STG, HEX},
{"symlink", 2, DEC, NOV, STG, STG},
{"readlink", 3, DEC, NOV, STG, RLK, UNS},
{"setgroups", 2, DEC, NOV, DEC, HEX},
{"getgroups", 2, DEC, NOV, DEC, HEX},
{"fchmod", 2, DEC, NOV, DEC, OCT},
{"fchown", 3, DEC, NOV, DEC, DEC, DEC},
{"sigprocmask", 3, DEC, NOV, SPM, HEX, HEX},
{"sigsuspend", 1, DEC, NOV, HEX},
{"sigaltstack", 2, DEC, NOV, HEX, HEX},
{"sigaction", 3, DEC, NOV, SIG, HEX, HEX},
{"sigpendsys", 2, DEC, NOV, DEC, HEX},
{"context", 2, DEC, NOV, DEC, HEX},
{"fchmodat", 4, DEC, NOV, ATC, STG, OCT, SNF},
{"mkdirat", 3, DEC, NOV, ATC, STG, OCT},
{"statvfs", 2, DEC, NOV, STG, HEX},
{"fstatvfs", 2, DEC, NOV, DEC, HEX},
{"getloadavg", 2, DEC, NOV, HEX, DEC},
{"nfssys", 2, DEC, NOV, DEC, HEX},
{"waitid", 4, DEC, NOV, IDT, DEC, HEX, WOP},
{"sigsendsys", 2, DEC, NOV, HEX, SIG},
{"hrtsys", 5, DEC, NOV, DEC, HEX, HEX, HEX, HEX},
{"utimesys", 5, DEC, NOV, DEC, HEX, HEX, HEX, HEX},
{"sigresend", 3, DEC, NOV, SIG, HEX, HEX},
{"priocntlsys", 5, DEC, NOV, DEC, HEX, DEC, PC4, PC5},
{"pathconf", 2, DEC, NOV, STG, PTC},
{"mincore", 3, DEC, NOV, HEX, UNS, HEX},
{"mmap", 6, HEX, NOV, HEX, UNS, MPR, MTY, DEC, DEC},
{"mprotect", 3, DEC, NOV, HEX, UNS, MPR},
{"munmap", 2, DEC, NOV, HEX, UNS},
{"fpathconf", 2, DEC, NOV, DEC, PTC},
{"vfork", 0, DEC, NOV},
{"fchdir", 1, DEC, NOV, DEC},
{"readv", 3, DEC, NOV, DEC, HEX, DEC},
{"writev", 3, DEC, NOV, DEC, HEX, DEC},
{"preadv", 4, DEC, NOV, DEC, HEX, DEC, DEC},
{"pwritev", 4, DEC, NOV, DEC, HEX, DEC, DEC},
{"upanic", 2, DEC, NOV, HEX, DEC},
{"getrandom", 3, DEC, NOV, IOB, UNS, GRF},
{"mmapobj", 5, DEC, NOV, DEC, MOB, HEX, HEX, HEX},
{"setrlimit", 2, DEC, NOV, RLM, HEX},
{"getrlimit", 2, DEC, NOV, RLM, HEX},
{"lchown", 3, DEC, NOV, STG, DEC, DEC},
{"memcntl", 6, DEC, NOV, HEX, UNS, MCF, MC4, MC5, DEC},
{"getpmsg", 5, DEC, NOV, DEC, HEX, HEX, HEX, HEX},
{"putpmsg", 5, DEC, NOV, DEC, HEX, HEX, DEC, HHX},
{"rename", 2, DEC, NOV, STG, STG},
{"uname", 1, DEC, NOV, HEX},
{"setegid", 1, DEC, NOV, UNS},
{"sysconfig", 1, DEC, NOV, CNF},
{"adjtime", 2, DEC, NOV, HEX, HEX},
{"sysinfo", 3, DEC, NOV, INF, RST, DEC},
{"sharefs", 3, DEC, NOV, DEC, HEX, DEC},
{"seteuid", 1, DEC, NOV, UNS},
{"forksys", 2, DEC, NOV, DEC, HHX},
{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
{"sigtimedwait", 3, DEC, NOV, HEX, HEX, HEX},
{"lwp_info", 1, DEC, NOV, HEX},
{"yield", 0, DEC, NOV},
{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
{"lwp_sema_post", 1, DEC, NOV, HEX},
{"lwp_sema_trywait", 1, DEC, NOV, HEX},
{"lwp_detach", 1, DEC, NOV, DEC},
{"corectl", 4, DEC, NOV, DEC, HEX, HEX, HEX},
{"modctl", 5, DEC, NOV, MOD, HEX, HEX, HEX, HEX},
{"fchroot", 1, DEC, NOV, DEC},
{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
{"vhangup", 0, DEC, NOV},
{"gettimeofday", 1, DEC, NOV, HEX},
{"getitimer", 2, DEC, NOV, ITM, HEX},
{"setitimer", 3, DEC, NOV, ITM, HEX, HEX},
{"lwp_create", 3, DEC, NOV, HEX, LWF, HEX},
{"lwp_exit", 0, DEC, NOV},
{"lwp_suspend", 1, DEC, NOV, DEC},
{"lwp_continue", 1, DEC, NOV, DEC},
{"lwp_kill", 2, DEC, NOV, DEC, SIG},
{"lwp_self", 0, DEC, NOV},
{"lwp_sigmask", 5, HEX, HEX, SPM, HEX, HEX, HEX, HEX},
{"lwp_private", 3, HEX, NOV, DEC, DEC, HEX},
{"lwp_wait", 2, DEC, NOV, DEC, HEX},
{"lwp_mutex_wakeup", 2, DEC, NOV, HEX, DEC},
{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
{"lwp_cond_wait", 4, DEC, NOV, HEX, HEX, HEX, DEC},
{"lwp_cond_signal", 1, DEC, NOV, HEX},
{"lwp_cond_broadcast", 1, DEC, NOV, HEX},
{"pread", 4, DEC, NOV, DEC, IOB, UNS, DEX},
{"pwrite", 4, DEC, NOV, DEC, IOB, UNS, DEX},
{"llseek", 4, LLO, NOV, DEC, LLO, HID, WHN},
{"inst_sync", 2, DEC, NOV, STG, DEC},
{"brand", 6, DEC, NOV, DEC, HEX, HEX, HEX, HEX, HEX},
{"kaio", 7, DEC, NOV, AIO, HEX, HEX, HEX, HEX, HEX, HEX},
{"cpc", 5, DEC, NOV, CPC, DEC, HEX, HEX, HEX},
{"lgrpsys", 3, DEC, NOV, DEC, DEC, HEX},
{"rusagesys", 5, DEC, NOV, DEC, HEX, DEC, HEX, HEX},
{"portfs", 6, HEX, HEX, DEC, HEX, HEX, HEX, HEX, HEX},
{"pollsys", 4, DEC, NOV, HEX, DEC, HEX, HEX},
{"labelsys", 2, DEC, NOV, DEC, HEX},
{"acl", 4, DEC, NOV, STG, ACL, DEC, HEX},
{"auditsys", 4, DEC, NOV, AUD, HEX, HEX, HEX},
{"processor_bind", 4, DEC, NOV, IDT, DEC, DEC, HEX},
{"processor_info", 2, DEC, NOV, DEC, HEX},
{"p_online", 2, DEC, NOV, DEC, DEC},
{"sigqueue", 5, DEC, NOV, DEC, SIG, HEX, SQC, DEC},
{"clock_gettime", 2, DEC, NOV, DEC, HEX},
{"clock_settime", 2, DEC, NOV, DEC, HEX},
{"clock_getres", 2, DEC, NOV, DEC, HEX},
{"timer_create", 3, DEC, NOV, DEC, HEX, HEX},
{"timer_delete", 1, DEC, NOV, DEC},
{"timer_settime", 4, DEC, NOV, DEC, DEC, HEX, HEX},
{"timer_gettime", 2, DEC, NOV, DEC, HEX},
{"timer_getoverrun", 1, DEC, NOV, DEC},
{"nanosleep", 2, DEC, NOV, HEX, HEX},
{"facl", 4, DEC, NOV, DEC, ACL, DEC, HEX},
{"door", 6, DEC, NOV, DEC, HEX, HEX, HEX, HEX, DEC},
{"setreuid", 2, DEC, NOV, UN1, UN1},
{"setregid", 2, DEC, NOV, UN1, UN1},
{"install_utrap", 3, DEC, NOV, DEC, HEX, HEX},
{"signotify", 3, DEC, NOV, DEC, HEX, HEX},
{"schedctl", 0, HEX, NOV},
{"pset", 5, DEC, NOV, DEC, HEX, HEX, HEX, HEX},
{"sparc_utrap_install", 5, DEC, NOV, UTT, UTH, UTH, HEX, HEX},
{"resolvepath", 3, DEC, NOV, STG, RLK, DEC},
{"lwp_mutex_timedlock", 3, DEC, NOV, HEX, HEX, HEX},
{"lwp_sema_timedwait", 3, DEC, NOV, HEX, HEX, DEC},
{"lwp_rwlock_sys", 3, DEC, NOV, DEC, HEX, HEX},
{"getdents64", 3, DEC, NOV, DEC, HEX, UNS},
{"mmap64", 7, HEX, NOV, HEX, UNS, MPR, MTY, DEC, LLO, HID},
{"stat64", 2, DEC, NOV, STG, HEX},
{"lstat64", 2, DEC, NOV, STG, HEX},
{"fstat64", 2, DEC, NOV, DEC, HEX},
{"statvfs64", 2, DEC, NOV, STG, HEX},
{"fstatvfs64", 2, DEC, NOV, DEC, HEX},
{"setrlimit64", 2, DEC, NOV, RLM, HEX},
{"getrlimit64", 2, DEC, NOV, RLM, HEX},
{"pread64", 5, DEC, NOV, DEC, IOB, UNS, LLO, HID},
{"pwrite64", 5, DEC, NOV, DEC, IOB, UNS, LLO, HID},
{ NULL, 8, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX, HEX},
{"open64", 3, DEC, NOV, STG, OPN, OCT},
{"rpcmod", 3, DEC, NOV, DEC, HEX},
{"zone", 5, DEC, NOV, DEC, HEX, HEX, HEX, HEX},
{"autofssys", 2, DEC, NOV, DEC, HEX},
{"getcwd", 3, DEC, NOV, RST, DEC},
{"so_socket", 5, DEC, NOV, PFM, SKT, SKP, STG, SKV},
{"so_socketpair", 1, DEC, NOV, HEX},
{"bind", 4, DEC, NOV, DEC, HEX, DEC, SKV},
{"listen", 3, DEC, NOV, DEC, DEC, SKV},
{"accept", 5, DEC, NOV, DEC, HEX, HEX, SKV, ACF},
{"connect", 4, DEC, NOV, DEC, HEX, DEC, SKV},
{"shutdown", 3, DEC, NOV, DEC, SHT, SKV},
{"recv", 4, DEC, NOV, DEC, IOB, DEC, SRF},
{"recvfrom", 6, DEC, NOV, DEC, IOB, DEC, SRF, HEX, HEX},
{"recvmsg", 3, DEC, NOV, DEC, HEX, SRF},
{"send", 4, DEC, NOV, DEC, IOB, DEC, SRF},
{"sendmsg", 3, DEC, NOV, DEC, HEX, SRF},
{"sendto", 6, DEC, NOV, DEC, IOB, DEC, SRF, HEX, DEC},
{"getpeername", 4, DEC, NOV, DEC, HEX, HEX, SKV},
{"getsockname", 4, DEC, NOV, DEC, HEX, HEX, SKV},
{"getsockopt", 6, DEC, NOV, DEC, SOL, SON, HEX, HEX, SKV},
{"setsockopt", 6, DEC, NOV, DEC, SOL, SON, HEX, DEC, SKV},
{"sockconfig", 5, DEC, NOV, DEC, HEX, HEX, HEX, HEX},
{"ntp_gettime", 1, DEC, NOV, HEX},
{"ntp_adjtime", 1, DEC, NOV, HEX},
{"lwp_mutex_unlock", 1, DEC, NOV, HEX},
{"lwp_mutex_trylock", 2, DEC, NOV, HEX, HEX},
{"lwp_mutex_register", 2, DEC, NOV, HEX, HEX},
{"cladm", 3, DEC, NOV, CLC, CLF, HEX},
{"uucopy", 3, DEC, NOV, HEX, HEX, UNS},
{"umount2", 2, DEC, NOV, STG, MTF},
{ NULL, -1, DEC, NOV},
};
#define SYSEND ((sizeof (systable) / sizeof (struct systable))-1)
const struct systable faccessattable[] = {
{"faccessat", 4, DEC, NOV, ATC, STG, ACC, FAT},
{"access", 3, DEC, NOV, HID, STG, ACC},
};
#define NACCESSCODE (sizeof (faccessattable) / sizeof (struct systable))
const struct systable fchmodattable[] = {
{"fchmodat", 4, DEC, NOV, ATC, STG, OCT, SNF},
{"chmod", 3, DEC, NOV, HID, STG, OCT},
{"fchmodat", 4, DEC, NOV, ATC, STG, OCT, SNF},
{"fchmod", 3, DEC, NOV, DEC, HID, OCT},
};
#define NCHMODCODE (sizeof (fchmodattable) / sizeof (struct systable))
const struct systable fchownattable[] = {
{"fchownat", 5, DEC, NOV, ATC, STG, DEC, DEC, SNF},
{"chown", 4, DEC, NOV, HID, STG, DEC, DEC},
{"lchown", 4, DEC, NOV, HID, STG, DEC, DEC},
{"fchown", 4, DEC, NOV, DEC, HID, DEC, DEC},
};
#define NCHOWNCODE (sizeof (fchownattable) / sizeof (struct systable))
const struct systable mkdiratattable[] = {
{"mkdirat", 3, DEC, NOV, ATC, STG, OCT},
{"mkdir", 3, DEC, NOV, HID, STG, OCT},
};
#define NMKDIRCODE (sizeof (mkdiratattable) / sizeof (struct systable))
const struct systable mknodatattable[] = {
{"mknodat", 4, DEC, NOV, ATC, STG, OCT, HEX},
{"mknod", 4, DEC, NOV, HID, STG, OCT, HEX},
};
#define NMKMODCODE (sizeof (mknodatattable) / sizeof (struct systable))
const struct systable renameattable[] = {
{"renameat", 4, DEC, NOV, ATC, STG, ATC, STG},
{"rename", 4, DEC, NOV, HID, STG, HID, STG},
};
#define NRENAMECODE (sizeof (renameattable) / sizeof (struct systable))
const struct systable linkattable[] = {
{"linkat", 5, DEC, NOV, ATC, STG, ATC, STG, SNF},
{"link", 4, DEC, NOV, HID, STG, HID, STG},
};
#define NLINKATCODE (sizeof (linkattable) / sizeof (struct systable))
const struct systable unlinkattable[] = {
{"unlinkat", 3, DEC, NOV, ATC, STG, UAT},
{"unlink", 2, DEC, NOV, HID, STG},
{"rmdir", 2, DEC, NOV, HID, STG},
};
#define NUNLINKCODE (sizeof (unlinkattable) / sizeof (struct systable))
const struct systable symlinkattable[] = {
{"symlinkat", 3, DEC, NOV, STG, ATC, STG},
{"symlink", 3, DEC, NOV, STG, HID, STG},
};
#define NSYMLINKCODE (sizeof (symlinkattable) / sizeof (struct systable))
const struct systable readlinkattable[] = {
{"readlinkat", 4, DEC, NOV, ATC, STG, RLK, UNS},
{"readlink", 4, DEC, NOV, HID, STG, RLK, UNS},
};
#define NREADLINKCODE (sizeof (readlinkattable) / sizeof (struct systable))
const struct systable fstatattable[] = {
{"fstatat", 4, DEC, NOV, ATC, STG, HEX, SNF},
{"stat", 3, DEC, NOV, HID, STG, HEX},
{"lstat", 3, DEC, NOV, HID, STG, HEX},
{"fstat", 3, DEC, NOV, DEC, HID, HEX},
};
#define NSTATCODE (sizeof (fstatattable) / sizeof (struct systable))
const struct systable fstatat64table[] = {
{"fstatat64", 4, DEC, NOV, ATC, STG, HEX, SNF},
{"stat64", 3, DEC, NOV, HID, STG, HEX},
{"lstat64", 3, DEC, NOV, HID, STG, HEX},
{"fstat64", 3, DEC, NOV, DEC, HID, HEX},
};
#define NSTAT64CODE (sizeof (fstatat64table) / sizeof (struct systable))
const struct systable openattable[] = {
{"openat", 3, DEC, NOV, ATC, STG, OPN},
{"openat", 4, DEC, NOV, ATC, STG, OPN, OCT},
{"open", 3, DEC, NOV, HID, STG, OPN},
{"open", 4, DEC, NOV, HID, STG, OPN, OCT},
};
#define NOPENATCODE (sizeof (openattable) / sizeof (struct systable))
const struct systable openat64table[] = {
{"openat64", 3, DEC, NOV, ATC, STG, OPN},
{"openat64", 4, DEC, NOV, ATC, STG, OPN, OCT},
{"open64", 3, DEC, NOV, HID, STG, OPN},
{"open64", 4, DEC, NOV, HID, STG, OPN, OCT},
};
#define NOPENAT64CODE (sizeof (openat64table) / sizeof (struct systable))
const struct systable opentable[] = {
{"open", 2, DEC, NOV, STG, OPN},
{"open", 3, DEC, NOV, STG, OPN, OCT},
};
#define NOPENCODE (sizeof (opentable) / sizeof (struct systable))
const struct systable open64table[] = {
{"open64", 2, DEC, NOV, STG, OPN},
{"open64", 3, DEC, NOV, STG, OPN, OCT},
};
#define NOPEN64CODE (sizeof (open64table) / sizeof (struct systable))
const struct systable fcntltable[] = {
{"fcntl", 3, DEC, NOV, DEC, FCN, HEX},
{"fcntl", 2, DEC, NOV, DEC, FCN},
{"fcntl", 3, DEC, NOV, DEC, FCN, FFG},
{"fcntl", 3, DEC, NOV, DEC, FCN, FFD},
{"fcntl", 4, DEC, NOV, DEC, FCN, DEC, FFD},
};
#define NFCNTLCODE (sizeof (fcntltable) / sizeof (struct systable))
const struct systable msgtable[] = {
{"msgget", 3, DEC, NOV, HID, KEY, MSF},
{"msgctl", 4, DEC, NOV, HID, DEC, MSC, HEX},
{"msgrcv", 6, DEC, NOV, HID, DEC, HEX, UNS, DEC, MSF},
{"msgsnd", 5, DEC, NOV, HID, DEC, HEX, UNS, MSF},
{"msgids", 4, DEC, NOV, HID, HEX, UNS, HEX},
{"msgsnap", 5, DEC, NOV, HID, DEC, HEX, UNS, DEC},
};
#define NMSGCODE (sizeof (msgtable) / sizeof (struct systable))
const struct systable semtable[] = {
{"semctl", 5, DEC, NOV, HID, DEC, DEC, SMC, DEX},
{"semget", 4, DEC, NOV, HID, KEY, DEC, SEF},
{"semop", 4, DEC, NOV, HID, DEC, HEX, UNS},
{"semids", 4, DEC, NOV, HID, HEX, UNS, HEX},
{"semtimedop", 5, DEC, NOV, HID, DEC, HEX, UNS, HEX},
};
#define NSEMCODE (sizeof (semtable) / sizeof (struct systable))
const struct systable shmtable[] = {
{"shmat", 4, HEX, NOV, HID, DEC, DEX, SHF},
{"shmctl", 4, DEC, NOV, HID, DEC, SHC, DEX},
{"shmdt", 2, DEC, NOV, HID, HEX},
{"shmget", 4, DEC, NOV, HID, KEY, UNS, SHF},
{"shmids", 4, DEC, NOV, HID, HEX, UNS, HEX},
};
#define NSHMCODE (sizeof (shmtable) / sizeof (struct systable))
const struct systable pidtable[] = {
{"getpgrp", 1, DEC, NOV, HID},
{"setpgrp", 1, DEC, NOV, HID},
{"getsid", 2, DEC, NOV, HID, DEC},
{"setsid", 1, DEC, NOV, HID},
{"getpgid", 2, DEC, NOV, HID, DEC},
{"setpgid", 3, DEC, NOV, HID, DEC, DEC},
};
#define NPIDCODE (sizeof (pidtable) / sizeof (struct systable))
const struct systable sfstable[] = {
{"sysfs", 3, DEC, NOV, SFS, DEX, DEX},
{"sysfs", 2, DEC, NOV, SFS, STG},
{"sysfs", 3, DEC, NOV, SFS, DEC, RST},
{"sysfs", 1, DEC, NOV, SFS},
};
#define NSFSCODE (sizeof (sfstable) / sizeof (struct systable))
const struct systable utstable[] = {
{"utssys", 3, DEC, NOV, HEX, DEC, UTS},
{"utssys", 4, DEC, NOV, HEX, HEX, HEX, HEX},
{"utssys", 3, DEC, NOV, HEX, HHX, UTS},
{"utssys", 4, DEC, NOV, STG, FUI, UTS, HEX}
};
#define NUTSCODE (sizeof (utstable) / sizeof (struct systable))
const struct systable rctltable[] = {
{"getrctl", 6, DEC, NOV, HID, STG, HEX, HEX, HID, RGF},
{"setrctl", 6, DEC, NOV, HID, STG, HEX, HEX, HID, RSF},
{"rctlsys_lst", 6, DEC, NOV, HID, HID, HEX, HID, HEX, HID},
{"rctlsys_ctl", 6, DEC, NOV, HID, STG, HEX, HID, HID, RCF},
{"setprojrctl", 6, DEC, NOV, HID, STG, HID, HEX, HEX, SPF},
};
#define NRCTLCODE (sizeof (rctltable) / sizeof (struct systable))
const struct systable sgptable[] = {
{"sigpendsys", 2, DEC, NOV, DEC, HEX},
{"sigpending", 2, DEC, NOV, HID, HEX},
{"sigfillset", 2, DEC, NOV, HID, HEX},
};
#define NSGPCODE (sizeof (sgptable) / sizeof (struct systable))
const struct systable ctxtable[] = {
{"getcontext", 2, DEC, NOV, HID, HEX},
{"setcontext", 2, DEC, NOV, HID, HEX},
{"getustack", 2, DEC, NOV, HID, HEX},
{"setustack", 2, DEC, NOV, HID, HEX},
{"getcontext_extd", 2, DEC, NOV, HID, HEX},
};
#define NCTXCODE (sizeof (ctxtable) / sizeof (struct systable))
const struct systable hrttable[] = {
{"hrtcntl", 5, DEC, NOV, HID, DEC, DEC, HEX, HEX},
{"hrtalarm", 3, DEC, NOV, HID, HEX, DEC},
{"hrtsleep", 2, DEC, NOV, HID, HEX},
{"hrtcancel", 3, DEC, NOV, HID, HEX, DEC},
};
#define NHRTCODE (sizeof (hrttable) / sizeof (struct systable))
const struct systable cortable[] = {
{"corectl", 4, DEC, NOV, COR, HEX, HEX, HEX},
{"corectl", 2, DEC, NOV, COR, CCO},
{"corectl", 1, HHX, NOV, COR},
{"corectl", 3, DEC, NOV, COR, STG, DEC},
{"corectl", 3, DEC, NOV, COR, RST, DEC},
{"corectl", 4, DEC, NOV, COR, STG, DEC, DEC},
{"corectl", 4, DEC, NOV, COR, RST, DEC, DEC},
{"corectl", 2, DEC, NOV, COR, CCC},
{"corectl", 2, DEC, NOV, COR, RCC},
{"corectl", 3, DEC, NOV, COR, CCC, DEC},
{"corectl", 3, DEC, NOV, COR, RCC, DEC},
{"corectl", 3, DEC, NOV, COR, STG, DEC},
{"corectl", 3, DEC, NOV, COR, RST, DEC},
{"corectl", 2, DEC, NOV, COR, CCC},
{"corectl", 2, DEC, NOV, COR, RCC},
};
#define NCORCODE (sizeof (cortable) / sizeof (struct systable))
const struct systable aiotable[] = {
{"kaio", 7, DEC, NOV, AIO, DEC, HEX, DEC, LLO, HID, HEX},
{"kaio", 7, DEC, NOV, AIO, DEC, HEX, DEC, LLO, HID, HEX},
{"kaio", 3, DEC, NOV, AIO, HEX, DEC},
{"kaio", 3, DEC, NOV, AIO, DEC, HEX},
{"kaio", 1, DEC, NOV, AIO},
{"kaio", 1, DEC, NOV, AIO},
{"kaio", 1, DEC, NOV, AIO},
{"kaio", 5, DEC, NOV, AIO, LIO, HEX, DEC, HEX},
{"kaio", 5, DEC, NOV, AIO, HEX, DEC, HEX, DEC},
{"kaio", 2, DEC, NOV, AIO, HEX},
{"kaio", 5, DEC, NOV, AIO, LIO, HEX, DEC, HEX},
{"kaio", 2, DEC, NOV, AIO, HEX},
{"kaio", 2, DEC, NOV, AIO, HEX},
{"kaio", 5, DEC, NOV, AIO, LIO, HEX, DEC, HEX},
{"kaio", 5, DEC, NOV, AIO, HEX, DEC, HEX, DEC},
{"kaio", 2, DEC, NOV, AIO, HEX},
{"kaio", 5, DEC, NOV, AIO, LIO, HEX, DEC, HEX},
{"kaio", 2, DEC, NOV, AIO, HEX},
{"kaio", 2, DEC, NOV, AIO, HEX},
{"kaio", 3, DEC, NOV, AIO, DEC, HEX},
{"kaio", 1, DEC, NOV, AIO},
{"kaio", 5, DEC, NOV, AIO, HEX, DEC, HEX, HEX},
};
#define NAIOCODE (sizeof (aiotable) / sizeof (struct systable))
const struct systable doortable[] = {
{"door_create", 3, DEC, NOV, HEX, HEX, DFL},
{"door_revoke", 1, DEC, NOV, DEC},
{"door_info", 2, DEC, NOV, DEC, HEX},
{"door_call", 2, DEC, NOV, DEC, HEX},
{"door_return", 4, DEC, NOV, HEX, DEC, HEX, DEC},
{"door_cred", 1, DEC, NOV, HEX},
{"door_bind", 1, DEC, NOV, DEC},
{"door_unbind", 0, DEC, NOV},
{"door_unref", 0, DEC, NOV},
{"door_ucred", 1, DEC, NOV, HEX},
{"door_return", 5, DEC, NOV, HEX, DEC, HEX, HEX, DEC},
{"door_getparam", 3, DEC, NOV, DEC, DPM, HEX},
{"door_setparam", 3, DEC, NOV, DEC, DPM, DEC},
};
#define NDOORCODE (sizeof (doortable) / sizeof (struct systable))
const struct systable psettable[] = {
{"pset_create", 2, DEC, NOV, HID, HEX},
{"pset_destroy", 2, DEC, NOV, HID, PST},
{"pset_assign", 4, DEC, NOV, HID, PST, DEC, HEX},
{"pset_info", 5, DEC, NOV, HID, PST, HEX, HEX, HEX},
{"pset_bind", 5, DEC, NOV, HID, PST, IDT, DEC, HEX},
{"pset_getloadavg", 4, DEC, NOV, HID, PST, HEX, DEC},
{"pset_list", 3, DEC, NOV, HID, HEX, HEX},
{"pset_setattr", 3, DEC, NOV, HID, PST, HEX},
{"pset_getattr", 3, DEC, NOV, HID, PST, HEX},
{"pset_assign_forced", 4, DEC, NOV, HID, PST, DEC, HEX},
};
#define NPSETCODE (sizeof (psettable) / sizeof (struct systable))
const struct systable lwpcreatetable[] = {
{"lwp_create", 3, DEC, NOV, HEX, LWF, HEX},
{"lwp_create", 0, DEC, NOV},
};
#define NLWPCREATECODE (sizeof (lwpcreatetable) / sizeof (struct systable))
static const struct systable tasksystable[] = {
{"settaskid", 3, DEC, NOV, HID, DEC, HEX},
{"gettaskid", 1, DEC, NOV, HID},
{"getprojid", 1, DEC, NOV, HID},
};
#define NTASKSYSCODE (sizeof (tasksystable) / sizeof (struct systable))
static const struct systable privsystable[] = {
{"setppriv", 4, DEC, NOV, HID, PRO, PRN, PRS},
{"getppriv", 4, DEC, NOV, HID, HID, PRN, PRS},
{"getprivimplinfo", 5, DEC, NOV, HID, HID, HID, HEX, DEC},
{"setpflags", 3, DEC, NOV, HID, PFL, DEC},
{"getpflags", 2, DEC, NOV, HID, PFL},
{"issetugid", 0, DEC, NOV, HID},
};
#define NPRIVSYSCODE (sizeof (privsystable) / sizeof (struct systable))
static const struct systable exacctsystable[] = {
{"getacct", 5, DEC, NOV, HID, IDT, DEC, HEX, UNS},
{"putacct", 6, DEC, NOV, HID, IDT, DEC, HEX, UNS, HEX},
{"wracct", 4, DEC, NOV, HID, IDT, DEC, HEX},
};
#define NEXACCTSYSCODE (sizeof (exacctsystable) / sizeof (struct systable))
static const struct systable lwpparktable[] = {
{"lwp_park", 3, DEC, NOV, HID, HEX, DEC},
{"lwp_unpark", 2, DEC, NOV, HID, DEC},
{"lwp_unpark_all", 3, DEC, NOV, HID, HEX, DEC},
{"lwp_unpark_cancel", 2, DEC, NOV, HID, DEC},
{"lwp_set_park", 3, DEC, NOV, HID, HEX, DEC},
};
#define NLWPPARKCODE (sizeof (lwpparktable) / sizeof (struct systable))
static const struct systable lwprwlocktable[] = {
{"lwp_rwlock_rdlock", 3, DEC, NOV, HID, HEX, HEX},
{"lwp_rwlock_wrlock", 3, DEC, NOV, HID, HEX, HEX},
{"lwp_rwlock_tryrdlock", 2, DEC, NOV, HID, HEX},
{"lwp_rwlock_trywrlock", 2, DEC, NOV, HID, HEX},
{"lwp_rwlock_unlock", 2, DEC, NOV, HID, HEX},
};
#define NLWPRWLOCKCODE (sizeof (lwprwlocktable) / sizeof (struct systable))
static const struct systable sendfilevsystable[] = {
{"sendfilev", 5, DEC, NOV, DEC, DEC, HEX, DEC, HEX},
{"sendfilev64", 5, DEC, NOV, DEC, DEC, HEX, DEC, HEX},
};
#define NSENDFILESYSCODE \
(sizeof (sendfilevsystable) / sizeof (struct systable))
static const struct systable lgrpsystable[] = {
{"meminfo", 3, DEC, NOV, HID, NOV, MIF},
{"_lgrpsys", 3, DEC, NOV, DEC, DEC, NOV},
{"lgrp_version", 3, DEC, NOV, HID, DEC, NOV},
{"_lgrpsys", 3, DEC, NOV, DEC, HEX, HEX},
{"lgrp_affinity_get", 3, DEC, NOV, HID, NOV, LAF},
{"lgrp_affinity_set", 3, DEC, NOV, HID, NOV, LAF},
{"lgrp_latency", 3, DEC, NOV, HID, DEC, DEC},
};
#define NLGRPSYSCODE (sizeof (lgrpsystable) / sizeof (struct systable))
static const struct systable rusagesystable[] = {
{"getrusage", 2, DEC, NOV, HID, HEX},
{"getrusage_chld", 2, DEC, NOV, HID, HEX},
{"getrusage_lwp", 2, DEC, NOV, HID, HEX},
{"getvmusage", 5, DEC, NOV, HID, HEX, DEC, HEX, HEX},
};
#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},
{"port_associate", 6, DEC, NOV, HID, DEC, DEC, HEX, HEX, HEX},
{"port_dissociate", 4, DEC, NOV, HID, DEC, DEC, HEX},
{"port_send", 4, DEC, NOV, HID, DEC, HEX, HEX},
{"port_sendn", 6, DEC, DEC, HID, HEX, HEX, DEC, HEX, HEX},
{"port_get", 4, DEC, NOV, HID, DEC, HEX, HEX},
{"port_getn", 6, DEC, DEC, HID, DEC, HEX, DEC, DEC, HEX},
{"port_alert", 5, DEC, NOV, HID, DEC, HEX, HEX, HEX},
{"port_dispatch", 6, DEC, NOV, HID, DEC, DEC, HEX, HEX, HEX},
};
#define NPORTCODE (sizeof (portfstable) / sizeof (struct systable))
static const struct systable zonetable[] = {
{"zone_create", 2, DEC, NOV, HID, HEX},
{"zone_destroy", 2, DEC, NOV, HID, DEC},
{"zone_getattr", 5, DEC, NOV, HID, DEC, ZGA, HEX, DEC},
{"zone_enter", 2, DEC, NOV, HID, DEC},
{"zone_list", 3, DEC, NOV, HID, HEX, HEX},
{"zone_shutdown", 2, DEC, NOV, HID, DEC},
{"zone_lookup", 2, DEC, NOV, HID, STG},
{"zone_boot", 2, DEC, NOV, HID, DEC},
{"zone_version", 2, HEX, NOV, HID, DEC},
{"zone_setattr", 5, DEC, NOV, HID, DEC, ZGA, HEX, DEC},
{"zone_add_datalink", 3, DEC, NOV, HID, DEC, STG},
{"zone_remove_datalink", 3, DEC, NOV, HID, DEC, STG},
{"zone_check_datalink", 3, DEC, NOV, HID, HEX, STG},
{"zone_list_datalink", 4, DEC, NOV, HID, DEC, HEX, HEX},
};
#define NZONECODE (sizeof (zonetable) / sizeof (struct systable))
static const struct systable labeltable[] = {
{"labelsys", 3, DEC, NOV, HID, HEX, HEX},
{"is_system_labeled", 1, DEC, NOV, HID},
{"tnrh", 3, DEC, NOV, HID, TND, HEX},
{"tnrhtp", 3, DEC, NOV, HID, TND, HEX},
{"tnmlp", 3, DEC, NOV, HID, TND, HEX},
{"getlabel", 3, DEC, NOV, HID, STG, HEX},
{"fgetlabel", 3, DEC, NOV, HID, DEC, HEX},
};
#define NLABELCODE (sizeof (labeltable) / sizeof (struct systable))
const struct systable forktable[] = {
{"forkx", 2, DEC, NOV, HID, FXF},
{"forkallx", 2, DEC, NOV, HID, FXF},
{"vforkx", 2, DEC, NOV, HID, FXF},
{"forkx", 0, DEC, NOV},
{"forkallx", 0, DEC, NOV},
{"vforkx", 0, DEC, NOV},
};
#define NFORKCODE (sizeof (forktable) / sizeof (struct systable))
const struct systable sidsystable[] = {
{"allocids", 4, UNS, UNS, HID, DEC, DEC, DEC},
{"idmap_reg", 2, DEC, NOV, HID, DEC},
{"idmap_unreg", 2, DEC, NOV, HID, DEC},
};
#define NSIDSYSCODE (sizeof (sidsystable) / sizeof (struct systable))
const struct systable utimesystable[] = {
{"futimens", 3, DEC, NOV, HID, DEC, HEX},
{"utimensat", 5, DEC, NOV, HID, ATC, STG, HEX, SNF},
};
#define NUTIMESYSCODE (sizeof (utimesystable) / sizeof (struct systable))
const struct systable sockconfigtable[] = {
{"sockconfig", 5, DEC, NOV, SKC, DEC, DEC, DEC, STG},
{"sockconfig", 4, DEC, NOV, SKC, DEC, DEC, DEC},
{"sockconfig", 3, DEC, NOV, SKC, STG, HEX },
{"sockconfig", 2, DEC, NOV, SKC, STG },
};
#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 },
{ "execve", SYS_execve },
{ "execvp", SYS_execve },
{ "fexecve", 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 }
};
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:
if ((unsigned)subcode < NMSGCODE)
stp = &msgtable[subcode];
break;
case SYS_semsys:
if ((unsigned)subcode < NSEMCODE)
stp = &semtable[subcode];
break;
case SYS_shmsys:
if ((unsigned)subcode < NSHMCODE)
stp = &shmtable[subcode];
break;
case SYS_pgrpsys:
if ((unsigned)subcode < NPIDCODE)
stp = &pidtable[subcode];
break;
case SYS_utssys:
if ((unsigned)subcode < NUTSCODE)
stp = &utstable[subcode];
break;
case SYS_sysfs:
if ((unsigned)subcode < NSFSCODE)
stp = &sfstable[subcode];
break;
case SYS_sigpending:
if ((unsigned)subcode < NSGPCODE)
stp = &sgptable[subcode];
break;
case SYS_context:
if ((unsigned)subcode < NCTXCODE)
stp = &ctxtable[subcode];
break;
case SYS_hrtsys:
if ((unsigned)subcode < NHRTCODE)
stp = &hrttable[subcode];
break;
case SYS_corectl:
if ((unsigned)subcode < NCORCODE)
stp = &cortable[subcode];
break;
case SYS_kaio:
if ((unsigned)subcode < NAIOCODE)
stp = &aiotable[subcode];
break;
case SYS_door:
if ((unsigned)subcode < NDOORCODE)
stp = &doortable[subcode];
break;
case SYS_pset:
if ((unsigned)subcode < NPSETCODE)
stp = &psettable[subcode];
break;
case SYS_lwp_create:
if ((unsigned)subcode < NLWPCREATECODE)
stp = &lwpcreatetable[subcode];
break;
case SYS_tasksys:
if ((unsigned)subcode < NTASKSYSCODE)
stp = &tasksystable[subcode];
break;
case SYS_exacctsys:
if ((unsigned)subcode < NEXACCTSYSCODE)
stp = &exacctsystable[subcode];
break;
case SYS_privsys:
if ((unsigned)subcode < NPRIVSYSCODE)
stp = &privsystable[subcode];
break;
case SYS_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:
if ((unsigned)subcode < NSENDFILESYSCODE)
stp = &sendfilevsystable[subcode];
break;
case SYS_lgrpsys:
if ((unsigned)subcode < NLGRPSYSCODE)
stp = &lgrpsystable[subcode];
break;
case SYS_rusagesys:
if ((unsigned)subcode < NRUSAGESYSCODE)
stp = &rusagesystable[subcode];
break;
case SYS_fcntl:
if ((unsigned)subcode < NFCNTLCODE)
stp = &fcntltable[subcode];
break;
case SYS_ucredsys:
if ((unsigned)subcode < NUCREDSYSCODE)
stp = &ucredsystable[subcode];
break;
case SYS_port:
if ((unsigned)subcode < NPORTCODE)
stp = &portfstable[subcode];
break;
case SYS_zone:
if ((unsigned)subcode < NZONECODE)
stp = &zonetable[subcode];
break;
case SYS_labelsys:
if ((unsigned)subcode < NLABELCODE)
stp = &labeltable[subcode];
break;
case SYS_rctlsys:
if ((unsigned)subcode < NRCTLCODE)
stp = &rctltable[subcode];
break;
case SYS_forksys:
if ((unsigned)subcode < NFORKCODE)
stp = &forktable[subcode];
break;
case SYS_sidsys:
if ((unsigned)subcode < NSIDSYSCODE)
stp = &sidsystable[subcode];
break;
case SYS_utimesys:
if ((unsigned)subcode < NUTIMESYSCODE)
stp = &utimesystable[subcode];
break;
case SYS_sockconfig:
if ((unsigned)subcode < NSOCKCONFIGCODE)
stp = &sockconfigtable[subcode];
break;
}
}
if (stp == NULL)
stp = &systable[((unsigned)syscall < SYSEND)? syscall : 0];
return (stp);
}
const char *
sysname(private_t *pri, int syscall, int subcode)
{
const struct systable *stp = subsys(syscall, subcode);
const char *name = stp->name;
if (name == NULL) {
(void) sprintf(pri->sys_name, "sys#%d", syscall);
name = pri->sys_name;
}
return (name);
}
const char *
rawsigname(private_t *pri, int 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);
}
const char *
signame(private_t *pri, int sig)
{
const char *name = rawsigname(pri, sig);
if (name == NULL) {
(void) sprintf(pri->sig_name, "SIG#%d", sig);
name = pri->sig_name;
}
return (name);
}
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:
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] == 0) {
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] == 0) {
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] == 0) {
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:
case SYS_openat64:
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:
case SYS_open64:
if (nsysarg > 1)
subcode = (Lsp->pr_sysarg[1] & O_CREAT)? 1 : 0;
break;
case SYS_kaio:
subcode = arg0 & ~AIO_POLL_BIT;
break;
case SYS_door:
if (nsysarg > 5)
subcode = Lsp->pr_sysarg[5];
break;
case SYS_lwp_create:
subcode =
(Lsp->pr_why == PR_SYSEXIT && Lsp->pr_errno == 0 &&
Lsp->pr_rval1 == 0);
break;
case SYS_forksys:
subcode = arg0;
if (Lsp->pr_why == PR_SYSEXIT && Lsp->pr_errno == 0 &&
pri->Rval2 != 0)
subcode += 3;
break;
case SYS_msgsys:
case SYS_semsys:
case SYS_shmsys:
case SYS_pgrpsys:
case SYS_sysfs:
case SYS_sigpending:
case SYS_context:
case SYS_hrtsys:
case SYS_corectl:
case SYS_pset:
case SYS_tasksys:
case SYS_privsys:
case SYS_exacctsys:
case SYS_lwp_park:
case SYS_lwp_rwlock_sys:
case SYS_sendfilev:
case SYS_lgrpsys:
case SYS_rusagesys:
case SYS_ucredsys:
case SYS_zone:
case SYS_labelsys:
case SYS_rctlsys:
case SYS_sidsys:
case SYS_utimesys:
case SYS_sockconfig:
subcode = arg0;
break;
case SYS_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;
case F_SETFD: subcode = 3; break;
case F_DUP3FD: subcode = 4; break;
}
}
break;
case SYS_port:
subcode = arg0 & PORT_CODE_MASK;
break;
}
}
return (subcode);
}
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);
}
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);
}
}
const char * const afcodes[] = {
"UNSPEC",
"UNIX",
"INET",
"IMPLINK",
"PUP",
"CHAOS",
"NS",
"NBS",
"ECMA",
"DATAKIT",
"CCITT",
"SNA",
"DECnet",
"DLI",
"LAT",
"HYLINK",
"APPLETALK",
"NIT",
"802",
"OSI",
"X25",
"OSINET",
"GOSIP",
"IPX",
"ROUTE",
"LINK",
"INET6",
"KEY",
"NCA",
"POLICY",
"RDS",
"TRILL",
"PACKET"
};
#if MAX_AFCODES != 33
#error Need to update address-family table
#endif
const char * const socktype_codes[] = {
NULL,
"SOCK_DGRAM",
"SOCK_STREAM",
NULL,
"SOCK_RAW",
"SOCK_RDM",
"SOCK_SEQPACKET"
};
#if MAX_SOCKTYPES != 7
#error Need to update socket-type table
#endif