4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
23 * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
24 * Copyright (c) 2015, Joyent, Inc. All rights reserved.
27 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
28 /* All Rights Reserved */
30 /* Copyright (c) 2013, OmniTI Computer Consulting, Inc. All rights reserved. */
32 #define _SYSCALL32 /* make 32-bit compat headers visible */
44 #include <sys/types.h>
46 #include <sys/resource.h>
47 #include <sys/ulimit.h>
48 #include <sys/utsname.h>
49 #include <sys/kstat.h>
50 #include <sys/modctl.h>
53 #include <sys/isa_defs.h>
54 #include <sys/systeminfo.h>
59 #include <sys/aiocb.h>
60 #include <sys/corectl.h>
61 #include <sys/cpc_impl.h>
62 #include <sys/priocntl.h>
63 #include <sys/tspriocntl.h>
64 #include <sys/iapriocntl.h>
65 #include <sys/rtpriocntl.h>
66 #include <sys/fsspriocntl.h>
67 #include <sys/fxpriocntl.h>
70 #include <nss_dbdefs.h>
71 #include <sys/socketvar.h>
72 #include <netinet/in.h>
73 #include <netinet/tcp.h>
74 #include <netinet/udp.h>
75 #include <netinet/sctp.h>
76 #include <net/route.h>
77 #include <sys/utrap.h>
78 #include <sys/lgrp_user.h>
81 #include <sys/rctl_impl.h>
84 #include <sys/random.h>
90 void grow(private_t
*, int nbyte
);
92 #define GROW(nb) if (pri->sys_leng + (nb) >= pri->sys_ssize) grow(pri, (nb))
97 prt_nov(private_t
*pri
, int raw
, long val
) /* print nothing */
103 prt_dec(private_t
*pri
, int raw
, long val
) /* print as decimal */
106 if (data_model
== PR_MODEL_ILP32
)
107 pri
->sys_leng
+= sprintf(pri
->sys_string
+ pri
->sys_leng
,
110 pri
->sys_leng
+= sprintf(pri
->sys_string
+ pri
->sys_leng
,
116 prt_uns(private_t
*pri
, int raw
, long val
) /* print as unsigned decimal */
119 if (data_model
== PR_MODEL_ILP32
)
120 pri
->sys_leng
+= sprintf(pri
->sys_string
+ pri
->sys_leng
,
123 pri
->sys_leng
+= sprintf(pri
->sys_string
+ pri
->sys_leng
,
127 /* print as unsigned decimal, except for -1 */
129 prt_un1(private_t
*pri
, int raw
, long val
)
132 prt_dec(pri
, raw
, val
);
134 prt_uns(pri
, raw
, val
);
139 prt_oct(private_t
*pri
, int raw
, long val
) /* print as octal */
142 if (data_model
== PR_MODEL_ILP32
)
143 pri
->sys_leng
+= sprintf(pri
->sys_string
+ pri
->sys_leng
,
146 pri
->sys_leng
+= sprintf(pri
->sys_string
+ pri
->sys_leng
,
152 prt_hex(private_t
*pri
, int raw
, long val
) /* print as hexadecimal */
155 if (data_model
== PR_MODEL_ILP32
)
156 pri
->sys_leng
+= sprintf(pri
->sys_string
+ pri
->sys_leng
,
159 pri
->sys_leng
+= sprintf(pri
->sys_string
+ pri
->sys_leng
,
163 /* print as hexadecimal (half size) */
166 prt_hhx(private_t
*pri
, int raw
, long val
)
169 if (data_model
== PR_MODEL_ILP32
)
170 pri
->sys_leng
+= sprintf(pri
->sys_string
+ pri
->sys_leng
,
173 pri
->sys_leng
+= sprintf(pri
->sys_string
+ pri
->sys_leng
,
177 /* print as decimal if small, else hexadecimal */
180 prt_dex(private_t
*pri
, int raw
, long val
)
182 if (val
& 0xff000000)
183 prt_hex(pri
, 0, val
);
185 prt_dec(pri
, 0, val
);
188 /* print long long offset */
191 prt_llo(private_t
*pri
, int raw
, long val1
, long val2
)
196 #ifdef _LONG_LONG_LTOH
205 prt_dex(pri
, 0, loval
);
209 sprintf(pri
->sys_string
+ pri
->sys_leng
, "0x%.8X%.8X",
215 escape_string(private_t
*pri
, const char *s
)
218 * We want to avoid outputting unprintable characters that may
219 * destroy the user's terminal. So we do one pass to find any
220 * unprintable characters, size the array appropriately, and
221 * then walk each character by hand. Those that are unprintable
222 * are replaced by a hex escape (\xNN). We also escape quotes for
225 int i
, unprintable
, quotes
;
226 size_t len
= strlen(s
);
227 for (i
= 0, unprintable
= 0, quotes
= 0; i
< len
; i
++) {
234 GROW(len
+ 3 * unprintable
+ quotes
+ 2);
236 pri
->sys_string
[pri
->sys_leng
++] = '"';
237 for (i
= 0; i
< len
; i
++) {
239 pri
->sys_string
[pri
->sys_leng
++] = '\\';
242 pri
->sys_string
[pri
->sys_leng
++] = s
[i
];
244 pri
->sys_leng
+= sprintf(pri
->sys_string
+
245 pri
->sys_leng
, "\\x%02x", (uint8_t)s
[i
]);
248 pri
->sys_string
[pri
->sys_leng
++] = '"';
252 prt_stg(private_t
*pri
, int raw
, long val
) /* print as string */
254 char *s
= raw
? NULL
: fetchstring(pri
, (long)val
, PATH_MAX
);
257 prt_hex(pri
, 0, val
);
259 escape_string(pri
, s
);
262 /* print as string returned from syscall */
264 prt_rst(private_t
*pri
, int raw
, long val
)
266 char *s
= (raw
|| pri
->Errno
)? NULL
:
267 fetchstring(pri
, (long)val
, PATH_MAX
);
270 prt_hex(pri
, 0, val
);
272 GROW((int)strlen(s
) + 2);
273 pri
->sys_leng
+= snprintf(pri
->sys_string
+ pri
->sys_leng
,
274 pri
->sys_ssize
- pri
->sys_leng
, "\"%s\"", s
);
278 /* print contents of readlink() buffer */
280 prt_rlk(private_t
*pri
, int raw
, long val
)
282 char *s
= (raw
|| pri
->Errno
|| pri
->Rval1
<= 0)? NULL
:
283 fetchstring(pri
, (long)val
,
284 (pri
->Rval1
> PATH_MAX
)? PATH_MAX
: (int)pri
->Rval1
);
287 prt_hex(pri
, 0, val
);
289 GROW((int)strlen(s
) + 2);
290 pri
->sys_leng
+= snprintf(pri
->sys_string
+ pri
->sys_leng
,
291 pri
->sys_ssize
- pri
->sys_leng
, "\"%s\"", s
);
296 prt_ioc(private_t
*pri
, int raw
, long val
) /* print ioctl code */
298 const char *s
= raw
? NULL
: ioctlname(pri
, (int)val
);
301 prt_hex(pri
, 0, val
);
307 prt_ioa(private_t
*pri
, int raw
, long val
) /* print ioctl argument */
311 /* cheating -- look at the ioctl() code */
312 switch (pri
->sys_args
[1]) {
316 case KSTAT_IOC_WRITE
:
318 if (data_model
== PR_MODEL_ILP32
)
320 val
+ offsetof(kstat32_t
, ks_name
[0]));
324 val
+ offsetof(kstat_t
, ks_name
[0]));
327 /* streams ioctl()s */
329 prt_rst(pri
, raw
, val
);
333 prt_stg(pri
, raw
, val
);
338 prt_dec(pri
, 0, val
);
341 if (raw
|| (s
= strrdopt(val
)) == NULL
)
342 prt_dec(pri
, 0, val
);
347 if (raw
|| (s
= strevents(pri
, val
)) == NULL
)
348 prt_hex(pri
, 0, val
);
353 if (raw
|| (s
= strflush(val
)) == NULL
)
354 prt_dec(pri
, 0, val
);
364 prt_dec(pri
, 0, val
);
368 prt_hex(pri
, 0, val
);
374 prt_pip(private_t
*pri
, int raw
, long val
) /* print pipe code */
376 const char *s
= NULL
;
386 case O_CLOEXEC
|O_NONBLOCK
:
387 s
= "O_CLOEXEC|O_NONBLOCK";
393 prt_dex(pri
, 0, val
);
399 prt_pfd(private_t
*pri
, int raw
, long val
) /* print pipe code */
404 /* the fds only have meaning if the return value is 0 */
407 Pread(Proc
, fds
, sizeof (fds
), (long)val
) == sizeof (fds
)) {
408 (void) snprintf(str
, sizeof (str
), "[%d,%d]", fds
[0], fds
[1]);
411 prt_hex(pri
, 0, val
);
416 prt_fcn(private_t
*pri
, int raw
, long val
) /* print fcntl code */
418 const char *s
= raw
? NULL
: fcntlname(val
);
421 prt_dec(pri
, 0, val
);
427 prt_s86(private_t
*pri
, int raw
, long val
) /* print sysi86 code */
430 const char *s
= raw
? NULL
: si86name(val
);
433 prt_dec(pri
, 0, val
);
439 prt_uts(private_t
*pri
, int raw
, long val
) /* print utssys code */
441 const char *s
= raw
? NULL
: utscode(val
);
444 prt_dec(pri
, 0, val
);
450 prt_msc(private_t
*pri
, int raw
, long val
) /* print msgsys command */
452 const char *s
= raw
? NULL
: msgcmd(val
);
455 prt_dec(pri
, 0, val
);
461 prt_msf(private_t
*pri
, int raw
, long val
) /* print msgsys flags */
463 const char *s
= raw
? NULL
: msgflags(pri
, (int)val
);
466 prt_oct(pri
, 0, val
);
472 prt_smc(private_t
*pri
, int raw
, long val
) /* print semsys command */
474 const char *s
= raw
? NULL
: semcmd(val
);
477 prt_dec(pri
, 0, val
);
483 prt_sef(private_t
*pri
, int raw
, long val
) /* print semsys flags */
485 const char *s
= raw
? NULL
: semflags(pri
, (int)val
);
488 prt_oct(pri
, 0, val
);
494 prt_shc(private_t
*pri
, int raw
, long val
) /* print shmsys command */
496 const char *s
= raw
? NULL
: shmcmd(val
);
499 prt_dec(pri
, 0, val
);
505 prt_shf(private_t
*pri
, int raw
, long val
) /* print shmsys flags */
507 const char *s
= raw
? NULL
: shmflags(pri
, (int)val
);
510 prt_oct(pri
, 0, val
);
516 prt_sfs(private_t
*pri
, int raw
, long val
) /* print sysfs code */
518 const char *s
= raw
? NULL
: sfsname(val
);
521 prt_dec(pri
, 0, val
);
527 prt_opn(private_t
*pri
, int raw
, long val
) /* print open code */
529 const char *s
= raw
? NULL
: openarg(pri
, val
);
532 prt_oct(pri
, 0, val
);
538 prt_sig(private_t
*pri
, int raw
, long val
) /* print signal name */
540 const char *s
= raw
? NULL
: signame(pri
, (int)val
);
543 prt_hex(pri
, 0, val
);
549 prt_smf(private_t
*pri
, int raw
, long val
) /* print streams message flags */
553 prt_dec(pri
, 0, val
);
557 prt_hhx(pri
, 0, val
);
559 outstring(pri
, "RS_HIPRI");
562 prt_hhx(pri
, 0, val
);
568 prt_mtf(private_t
*pri
, int raw
, long val
) /* print mount flags */
570 const char *s
= raw
? NULL
: mountflags(pri
, val
);
573 prt_hex(pri
, 0, val
);
579 prt_mft(private_t
*pri
, int raw
, long val
) /* print mount file system type */
581 if (val
>= 0 && val
< 256)
582 prt_dec(pri
, 0, val
);
584 prt_hex(pri
, 0, val
);
586 prt_stg(pri
, raw
, val
);
589 #define ISREAD(code) \
590 ((code) == SYS_read || (code) == SYS_pread || (code) == SYS_pread64 || \
591 (code) == SYS_recv || (code) == SYS_recvfrom)
592 #define ISWRITE(code) \
593 ((code) == SYS_write || (code) == SYS_pwrite || \
594 (code) == SYS_pwrite64 || (code) == SYS_send || (code) == SYS_sendto)
596 /* print contents of read() or write() I/O buffer */
598 prt_iob(private_t
*pri
, int raw
, long val
)
600 const lwpstatus_t
*Lsp
= pri
->lwpstat
;
601 int syscall
= Lsp
->pr_what
;
602 int fdp1
= pri
->sys_args
[0] + 1;
603 ssize_t nbyte
= ISWRITE(syscall
)? pri
->sys_args
[2] :
604 (pri
->Errno
? 0 : pri
->Rval1
);
605 int elsewhere
= FALSE
; /* TRUE iff dumped elsewhere */
606 char buffer
[IOBSIZE
];
608 pri
->iob_buf
[0] = '\0';
610 if (Lsp
->pr_why
== PR_SYSEXIT
&& nbyte
> IOBSIZE
) {
612 elsewhere
= prismember(&readfd
, fdp1
);
614 elsewhere
= prismember(&writefd
, fdp1
);
617 if (nbyte
<= 0 || elsewhere
)
618 prt_hex(pri
, 0, val
);
620 int nb
= nbyte
> IOBSIZE
? IOBSIZE
: (int)nbyte
;
622 if (Pread(Proc
, buffer
, (size_t)nb
, (long)val
) != nb
)
623 prt_hex(pri
, 0, val
);
625 pri
->iob_buf
[0] = '"';
626 showbytes(buffer
, nb
, pri
->iob_buf
+ 1);
627 (void) strlcat(pri
->iob_buf
,
629 (const char *)"\"" : (const char *)"\"..",
630 sizeof (pri
->iob_buf
));
632 prt_hex(pri
, 0, val
);
634 outstring(pri
, pri
->iob_buf
);
642 prt_idt(private_t
*pri
, int raw
, long val
) /* print idtype_t, waitid() arg */
644 const char *s
= raw
? NULL
: idtype_enum(pri
, val
);
647 prt_dec(pri
, 0, val
);
653 prt_wop(private_t
*pri
, int raw
, long val
) /* print waitid() options */
655 const char *s
= raw
? NULL
: woptions(pri
, (int)val
);
658 prt_oct(pri
, 0, val
);
664 prt_whn(private_t
*pri
, int raw
, long val
) /* print lseek() whence argument */
666 const char *s
= raw
? NULL
: whencearg(val
);
669 prt_dec(pri
, 0, val
);
676 prt_spm(private_t
*pri
, int raw
, long val
) /* print sigprocmask argument */
678 const char *s
= NULL
;
682 case SIG_BLOCK
: s
= "SIG_BLOCK"; break;
683 case SIG_UNBLOCK
: s
= "SIG_UNBLOCK"; break;
684 case SIG_SETMASK
: s
= "SIG_SETMASK"; break;
689 prt_dec(pri
, 0, val
);
695 mmap_protect(private_t
*pri
, long arg
)
697 char *str
= pri
->code_buf
;
699 if (arg
& ~(PROT_READ
|PROT_WRITE
|PROT_EXEC
))
702 if (arg
== PROT_NONE
)
703 return ("PROT_NONE");
707 (void) strlcat(str
, "|PROT_READ", sizeof (pri
->code_buf
));
708 if (arg
& PROT_WRITE
)
709 (void) strlcat(str
, "|PROT_WRITE", sizeof (pri
->code_buf
));
711 (void) strlcat(str
, "|PROT_EXEC", sizeof (pri
->code_buf
));
712 return ((const char *)(str
+ 1));
716 mmap_type(private_t
*pri
, long arg
)
718 char *str
= pri
->code_buf
;
721 #define CBSIZE sizeof (pri->code_buf)
722 switch (arg
& MAP_TYPE
) {
724 used
= strlcpy(str
, "MAP_SHARED", CBSIZE
);
727 used
= strlcpy(str
, "MAP_PRIVATE", CBSIZE
);
730 used
= snprintf(str
, CBSIZE
, "%ld", arg
&MAP_TYPE
);
736 if (arg
& ~(MAP_FIXED
|MAP_RENAME
|MAP_NORESERVE
|MAP_ANON
|MAP_ALIGN
|
737 MAP_TEXT
|MAP_INITDATA
|MAP_32BIT
))
738 (void) snprintf(str
+ used
, sizeof (pri
->code_buf
) - used
,
742 (void) strlcat(str
, "|MAP_FIXED", CBSIZE
);
743 if (arg
& MAP_RENAME
)
744 (void) strlcat(str
, "|MAP_RENAME", CBSIZE
);
745 if (arg
& MAP_NORESERVE
)
746 (void) strlcat(str
, "|MAP_NORESERVE", CBSIZE
);
748 (void) strlcat(str
, "|MAP_ANON", CBSIZE
);
750 (void) strlcat(str
, "|MAP_ALIGN", CBSIZE
);
752 (void) strlcat(str
, "|MAP_TEXT", CBSIZE
);
753 if (arg
& MAP_INITDATA
)
754 (void) strlcat(str
, "|MAP_INITDATA", CBSIZE
);
756 (void) strlcat(str
, "|MAP_32BIT", CBSIZE
);
759 return ((const char *)str
);
764 prt_mpr(private_t
*pri
, int raw
, long val
) /* print mmap()/mprotect() flags */
766 const char *s
= raw
? NULL
: mmap_protect(pri
, val
);
769 prt_hhx(pri
, 0, val
);
775 prt_mty(private_t
*pri
, int raw
, long val
) /* print mmap() mapping type flags */
777 const char *s
= raw
? NULL
: mmap_type(pri
, val
);
780 prt_hhx(pri
, 0, val
);
786 prt_mob(private_t
*pri
, int raw
, long val
) /* print mmapobj() flags */
789 prt_dec(pri
, 0, val
);
790 } else if (raw
|| (val
& ~(MMOBJ_ALL_FLAGS
)) != 0) {
791 prt_hhx(pri
, 0, val
);
793 #define CBSIZE sizeof (pri->code_buf)
794 char *s
= pri
->code_buf
;
797 if (val
& MMOBJ_PADDING
)
798 (void) strlcat(s
, "|MMOBJ_PADDING", CBSIZE
);
799 if (val
& MMOBJ_INTERPRET
)
800 (void) strlcat(s
, "|MMOBJ_INTERPRET", CBSIZE
);
801 if (val
& MMOBJ_PRIMARY
)
802 (void) strlcat(s
, "|MMOBJ_PRIMARY", CBSIZE
);
803 outstring(pri
, s
+ 1);
810 prt_mcf(private_t
*pri
, int raw
, long val
) /* print memcntl() function */
812 const char *s
= NULL
;
816 case MC_SYNC
: s
= "MC_SYNC"; break;
817 case MC_LOCK
: s
= "MC_LOCK"; break;
818 case MC_UNLOCK
: s
= "MC_UNLOCK"; break;
819 case MC_ADVISE
: s
= "MC_ADVISE"; break;
820 case MC_LOCKAS
: s
= "MC_LOCKAS"; break;
821 case MC_UNLOCKAS
: s
= "MC_UNLOCKAS"; break;
822 case MC_HAT_ADVISE
: s
= "MC_HAT_ADVISE"; break;
827 prt_dec(pri
, 0, val
);
833 prt_mad(private_t
*pri
, int raw
, long val
) /* print madvise() argument */
835 const char *s
= NULL
;
839 case MADV_NORMAL
: s
= "MADV_NORMAL"; break;
840 case MADV_RANDOM
: s
= "MADV_RANDOM"; break;
841 case MADV_SEQUENTIAL
: s
= "MADV_SEQUENTIAL"; break;
842 case MADV_WILLNEED
: s
= "MADV_WILLNEED"; break;
843 case MADV_DONTNEED
: s
= "MADV_DONTNEED"; break;
844 case MADV_FREE
: s
= "MADV_FREE"; break;
845 case MADV_ACCESS_DEFAULT
: s
= "MADV_ACCESS_DEFAULT"; break;
846 case MADV_ACCESS_LWP
: s
= "MADV_ACCESS_LWP"; break;
847 case MADV_ACCESS_MANY
: s
= "MADV_ACCESS_MANY"; break;
848 case MADV_PURGE
: s
= "MADV_PURGE"; break;
853 prt_dec(pri
, 0, val
);
859 prt_mc4(private_t
*pri
, int raw
, long val
) /* print memcntl() (4th) argument */
862 prt_dec(pri
, 0, val
);
864 prt_hhx(pri
, 0, val
);
868 #define CBSIZE sizeof (pri->code_buf)
869 /* cheating -- look at memcntl func */
870 switch (pri
->sys_args
[2]) {
872 prt_mad(pri
, 0, val
);
876 if ((val
& ~(MS_SYNC
|MS_ASYNC
|MS_INVALIDATE
)) == 0) {
877 *(s
= pri
->code_buf
) = '\0';
879 (void) strlcat(s
, "|MS_SYNC", CBSIZE
);
881 (void) strlcat(s
, "|MS_ASYNC", CBSIZE
);
882 if (val
& MS_INVALIDATE
)
883 (void) strlcat(s
, "|MS_INVALIDATE",
890 if ((val
& ~(MCL_CURRENT
|MCL_FUTURE
)) == 0) {
891 *(s
= pri
->code_buf
) = '\0';
892 if (val
& MCL_CURRENT
)
893 (void) strlcat(s
, "|MCL_CURRENT",
895 if (val
& MCL_FUTURE
)
896 (void) strlcat(s
, "|MCL_FUTURE",
903 if (s
== NULL
|| *s
== '\0')
904 prt_hhx(pri
, 0, val
);
911 prt_mc5(private_t
*pri
, int raw
, long val
) /* print memcntl() (5th) argument */
915 #define CBSIZE sizeof (pri->code_buf)
917 prt_dec(pri
, 0, val
);
918 else if (raw
|| (val
& ~VALID_ATTR
))
919 prt_hhx(pri
, 0, val
);
924 (void) strlcat(s
, "|SHARED", CBSIZE
);
926 (void) strlcat(s
, "|PRIVATE", CBSIZE
);
928 (void) strlcat(s
, "|PROT_READ", CBSIZE
);
929 if (val
& PROT_WRITE
)
930 (void) strlcat(s
, "|PROT_WRITE", CBSIZE
);
932 (void) strlcat(s
, "|PROT_EXEC", CBSIZE
);
934 prt_hhx(pri
, 0, val
);
942 prt_ulm(private_t
*pri
, int raw
, long val
) /* print ulimit() argument */
944 const char *s
= NULL
;
948 case UL_GFILLIM
: s
= "UL_GFILLIM"; break;
949 case UL_SFILLIM
: s
= "UL_SFILLIM"; break;
950 case UL_GMEMLIM
: s
= "UL_GMEMLIM"; break;
951 case UL_GDESLIM
: s
= "UL_GDESLIM"; break;
956 prt_dec(pri
, 0, val
);
962 prt_rlm(private_t
*pri
, int raw
, long val
) /* print get/setrlimit() argument */
964 const char *s
= NULL
;
968 case RLIMIT_CPU
: s
= "RLIMIT_CPU"; break;
969 case RLIMIT_FSIZE
: s
= "RLIMIT_FSIZE"; break;
970 case RLIMIT_DATA
: s
= "RLIMIT_DATA"; break;
971 case RLIMIT_STACK
: s
= "RLIMIT_STACK"; break;
972 case RLIMIT_CORE
: s
= "RLIMIT_CORE"; break;
973 case RLIMIT_NOFILE
: s
= "RLIMIT_NOFILE"; break;
974 case RLIMIT_VMEM
: s
= "RLIMIT_VMEM"; break;
979 prt_dec(pri
, 0, val
);
985 prt_cnf(private_t
*pri
, int raw
, long val
) /* print sysconfig code */
987 const char *s
= raw
? NULL
: sconfname(val
);
990 prt_dec(pri
, 0, val
);
996 prt_inf(private_t
*pri
, int raw
, long val
) /* print sysinfo code */
998 const char *s
= NULL
;
1002 case SI_SYSNAME
: s
= "SI_SYSNAME"; break;
1003 case SI_HOSTNAME
: s
= "SI_HOSTNAME"; break;
1004 case SI_RELEASE
: s
= "SI_RELEASE"; break;
1005 case SI_VERSION
: s
= "SI_VERSION"; break;
1006 case SI_MACHINE
: s
= "SI_MACHINE"; break;
1007 case SI_ARCHITECTURE
: s
= "SI_ARCHITECTURE"; break;
1008 case SI_ARCHITECTURE_32
:s
= "SI_ARCHITECTURE_32"; break;
1009 case SI_ARCHITECTURE_64
:s
= "SI_ARCHITECTURE_64"; break;
1010 case SI_ARCHITECTURE_K
: s
= "SI_ARCHITECTURE_K"; break;
1011 case SI_HW_SERIAL
: s
= "SI_HW_SERIAL"; break;
1012 case SI_HW_PROVIDER
: s
= "SI_HW_PROVIDER"; break;
1013 case SI_SRPC_DOMAIN
: s
= "SI_SRPC_DOMAIN"; break;
1014 case SI_SET_HOSTNAME
: s
= "SI_SET_HOSTNAME"; break;
1015 case SI_SET_SRPC_DOMAIN
: s
= "SI_SET_SRPC_DOMAIN"; break;
1016 case SI_PLATFORM
: s
= "SI_PLATFORM"; break;
1017 case SI_ISALIST
: s
= "SI_ISALIST"; break;
1018 case SI_DHCP_CACHE
: s
= "SI_DHCP_CACHE"; break;
1023 prt_dec(pri
, 0, val
);
1029 prt_ptc(private_t
*pri
, int raw
, long val
) /* print pathconf code */
1031 const char *s
= raw
? NULL
: pathconfname(val
);
1034 prt_dec(pri
, 0, val
);
1040 prt_fui(private_t
*pri
, int raw
, long val
) /* print fusers() input argument */
1042 const char *s
= raw
? NULL
: fuiname(val
);
1045 prt_hhx(pri
, 0, val
);
1051 prt_lwf(private_t
*pri
, int raw
, long val
) /* print lwp_create() flags */
1056 prt_dec(pri
, 0, val
);
1058 (val
& ~(LWP_DAEMON
|LWP_DETACHED
|LWP_SUSPENDED
)))
1059 prt_hhx(pri
, 0, val
);
1061 #define CBSIZE sizeof (pri->code_buf)
1064 if (val
& LWP_DAEMON
)
1065 (void) strlcat(s
, "|LWP_DAEMON", CBSIZE
);
1066 if (val
& LWP_DETACHED
)
1067 (void) strlcat(s
, "|LWP_DETACHED", CBSIZE
);
1068 if (val
& LWP_SUSPENDED
)
1069 (void) strlcat(s
, "|LWP_SUSPENDED", CBSIZE
);
1070 outstring(pri
, ++s
);
1076 prt_itm(private_t
*pri
, int raw
, long val
) /* print [get|set]itimer() arg */
1078 const char *s
= NULL
;
1082 case ITIMER_REAL
: s
= "ITIMER_REAL"; break;
1083 case ITIMER_VIRTUAL
: s
= "ITIMER_VIRTUAL"; break;
1084 case ITIMER_PROF
: s
= "ITIMER_PROF"; break;
1085 #ifdef ITIMER_REALPROF
1086 case ITIMER_REALPROF
: s
= "ITIMER_REALPROF"; break;
1092 prt_dec(pri
, 0, val
);
1098 prt_mod(private_t
*pri
, int raw
, long val
) /* print modctl() code */
1100 const char *s
= NULL
;
1104 case MODLOAD
: s
= "MODLOAD"; break;
1105 case MODUNLOAD
: s
= "MODUNLOAD"; break;
1106 case MODINFO
: s
= "MODINFO"; break;
1107 case MODRESERVED
: s
= "MODRESERVED"; break;
1108 case MODSETMINIROOT
: s
= "MODSETMINIROOT"; break;
1109 case MODADDMAJBIND
: s
= "MODADDMAJBIND"; break;
1110 case MODGETPATH
: s
= "MODGETPATH"; break;
1111 case MODGETPATHLEN
: s
= "MODGETPATHLEN"; break;
1112 case MODREADSYSBIND
: s
= "MODREADSYSBIND"; break;
1113 case MODGETMAJBIND
: s
= "MODGETMAJBIND"; break;
1114 case MODGETNAME
: s
= "MODGETNAME"; break;
1115 case MODSIZEOF_DEVID
: s
= "MODSIZEOF_DEVID"; break;
1116 case MODGETDEVID
: s
= "MODGETDEVID"; break;
1117 case MODSIZEOF_MINORNAME
: s
= "MODSIZEOF_MINORNAME"; break;
1118 case MODGETMINORNAME
: s
= "MODGETMINORNAME"; break;
1119 case MODGETFBNAME
: s
= "MODGETFBNAME"; break;
1120 case MODEVENTS
: s
= "MODEVENTS"; break;
1121 case MODREREADDACF
: s
= "MODREREADDACF"; break;
1122 case MODLOADDRVCONF
: s
= "MODLOADDRVCONF"; break;
1123 case MODUNLOADDRVCONF
: s
= "MODUNLOADDRVCONF"; break;
1124 case MODREMMAJBIND
: s
= "MODREMMAJBIND"; break;
1125 case MODDEVT2INSTANCE
: s
= "MODDEVT2INSTANCE"; break;
1126 case MODGETDEVFSPATH_LEN
: s
= "MODGETDEVFSPATH_LEN"; break;
1127 case MODGETDEVFSPATH
: s
= "MODGETDEVFSPATH"; break;
1128 case MODDEVID2PATHS
: s
= "MODDEVID2PATHS"; break;
1129 case MODSETDEVPOLICY
: s
= "MODSETDEVPOLICY"; break;
1130 case MODGETDEVPOLICY
: s
= "MODGETDEVPOLICY"; break;
1131 case MODALLOCPRIV
: s
= "MODALLOCPRIV"; break;
1132 case MODGETDEVPOLICYBYNAME
:
1133 s
= "MODGETDEVPOLICYBYNAME"; break;
1134 case MODLOADMINORPERM
: s
= "MODLOADMINORPERM"; break;
1135 case MODADDMINORPERM
: s
= "MODADDMINORPERM"; break;
1136 case MODREMMINORPERM
: s
= "MODREMMINORPERM"; break;
1137 case MODREMDRVCLEANUP
: s
= "MODREMDRVCLEANUP"; break;
1138 case MODDEVEXISTS
: s
= "MODDEVEXISTS"; break;
1139 case MODDEVREADDIR
: s
= "MODDEVREADDIR"; break;
1140 case MODDEVEMPTYDIR
: s
= "MODDEVEMPTYDIR"; break;
1141 case MODDEVNAME
: s
= "MODDEVNAME"; break;
1142 case MODGETDEVFSPATH_MI_LEN
:
1143 s
= "MODGETDEVFSPATH_MI_LEN"; break;
1144 case MODGETDEVFSPATH_MI
:
1145 s
= "MODGETDEVFSPATH_MI"; break;
1146 case MODREMDRVALIAS
: s
= "MODREMDRVALIAS"; break;
1147 case MODHPOPS
: s
= "MODHPOPS"; break;
1152 prt_dec(pri
, 0, val
);
1158 prt_acl(private_t
*pri
, int raw
, long val
) /* print acl() code */
1160 const char *s
= NULL
;
1164 case GETACL
: s
= "GETACL"; break;
1165 case SETACL
: s
= "SETACL"; break;
1166 case GETACLCNT
: s
= "GETACLCNT"; break;
1167 case ACE_GETACL
: s
= "ACE_GETACL"; break;
1168 case ACE_SETACL
: s
= "ACE_SETACL"; break;
1169 case ACE_GETACLCNT
: s
= "ACE_GETACLCNT"; break;
1174 prt_dec(pri
, 0, val
);
1180 prt_aio(private_t
*pri
, int raw
, long val
) /* print kaio() code */
1182 const char *s
= NULL
;
1186 switch (val
& ~AIO_POLL_BIT
) {
1187 case AIOREAD
: s
= "AIOREAD"; break;
1188 case AIOWRITE
: s
= "AIOWRITE"; break;
1189 case AIOWAIT
: s
= "AIOWAIT"; break;
1190 case AIOCANCEL
: s
= "AIOCANCEL"; break;
1191 case AIONOTIFY
: s
= "AIONOTIFY"; break;
1192 case AIOINIT
: s
= "AIOINIT"; break;
1193 case AIOSTART
: s
= "AIOSTART"; break;
1194 case AIOLIO
: s
= "AIOLIO"; break;
1195 case AIOSUSPEND
: s
= "AIOSUSPEND"; break;
1196 case AIOERROR
: s
= "AIOERROR"; break;
1197 case AIOLIOWAIT
: s
= "AIOLIOWAIT"; break;
1198 case AIOAREAD
: s
= "AIOAREAD"; break;
1199 case AIOAWRITE
: s
= "AIOAWRITE"; break;
1201 * We have to hardcode the values for the 64-bit versions of
1202 * these calls, because <sys/aio.h> defines them to be identical
1203 * when compiled 64-bit. If our target is 32-bit, we still need
1204 * to decode them correctly.
1206 case 13: s
= "AIOLIO64"; break;
1207 case 14: s
= "AIOSUSPEND64"; break;
1208 case 15: s
= "AUIOERROR64"; break;
1209 case 16: s
= "AIOLIOWAIT64"; break;
1210 case 17: s
= "AIOAREAD64"; break;
1211 case 18: s
= "AIOAWRITE64"; break;
1212 case 19: s
= "AIOCANCEL64"; break;
1215 * AIOFSYNC doesn't correspond to a syscall.
1217 case AIOWAITN
: s
= "AIOWAITN"; break;
1219 if (s
!= NULL
&& (val
& AIO_POLL_BIT
)) {
1220 (void) strlcpy(buf
, s
, sizeof (buf
));
1221 (void) strlcat(buf
, "|AIO_POLL_BIT", sizeof (buf
));
1222 s
= (const char *)buf
;
1227 prt_dec(pri
, 0, val
);
1233 prt_cor(private_t
*pri
, int raw
, long val
) /* print corectl() subcode */
1235 const char *s
= NULL
;
1239 case CC_SET_OPTIONS
:
1240 s
= "CC_SET_OPTIONS"; break;
1241 case CC_GET_OPTIONS
:
1242 s
= "CC_GET_OPTIONS"; break;
1243 case CC_SET_GLOBAL_PATH
:
1244 s
= "CC_SET_GLOBAL_PATH"; break;
1245 case CC_GET_GLOBAL_PATH
:
1246 s
= "CC_GET_GLOBAL_PATH"; break;
1247 case CC_SET_PROCESS_PATH
:
1248 s
= "CC_SET_PROCESS_PATH"; break;
1249 case CC_GET_PROCESS_PATH
:
1250 s
= "CC_GET_PROCESS_PATH"; break;
1251 case CC_SET_GLOBAL_CONTENT
:
1252 s
= "CC_SET_GLOBAL_CONTENT"; break;
1253 case CC_GET_GLOBAL_CONTENT
:
1254 s
= "CC_GET_GLOBAL_CONTENT"; break;
1255 case CC_SET_PROCESS_CONTENT
:
1256 s
= "CC_SET_PROCESS_CONTENT"; break;
1257 case CC_GET_PROCESS_CONTENT
:
1258 s
= "CC_GET_PROCESS_CONTENT"; break;
1259 case CC_SET_DEFAULT_PATH
:
1260 s
= "CC_SET_DEFAULT_PATH"; break;
1261 case CC_GET_DEFAULT_PATH
:
1262 s
= "CC_GET_DEFAULT_PATH"; break;
1263 case CC_SET_DEFAULT_CONTENT
:
1264 s
= "CC_SET_DEFAULT_CONTENT"; break;
1265 case CC_GET_DEFAULT_CONTENT
:
1266 s
= "CC_GET_DEFAULT_CONTENT"; break;
1271 prt_dec(pri
, 0, val
);
1277 prt_cco(private_t
*pri
, int raw
, long val
) /* print corectl() options */
1282 prt_dec(pri
, 0, val
);
1283 else if (raw
|| (val
& ~CC_OPTIONS
))
1284 prt_hhx(pri
, 0, val
);
1286 #define CBSIZE sizeof (pri->code_buf)
1289 if (val
& CC_GLOBAL_PATH
)
1290 (void) strlcat(s
, "|CC_GLOBAL_PATH", CBSIZE
);
1291 if (val
& CC_PROCESS_PATH
)
1292 (void) strlcat(s
, "|CC_PROCESS_PATH", CBSIZE
);
1293 if (val
& CC_GLOBAL_SETID
)
1294 (void) strlcat(s
, "|CC_GLOBAL_SETID", CBSIZE
);
1295 if (val
& CC_PROCESS_SETID
)
1296 (void) strlcat(s
, "|CC_PROCESS_SETID", CBSIZE
);
1297 if (val
& CC_GLOBAL_LOG
)
1298 (void) strlcat(s
, "|CC_GLOBAL_LOG", CBSIZE
);
1300 prt_hhx(pri
, 0, val
);
1302 outstring(pri
, ++s
);
1308 prt_ccc(private_t
*pri
, int raw
, long val
) /* print corectl() content */
1312 if (Pread(Proc
, &ccc
, sizeof (ccc
), val
) != sizeof (ccc
))
1313 prt_hex(pri
, 0, val
);
1314 else if (!raw
&& proc_content2str(ccc
, pri
->code_buf
,
1315 sizeof (pri
->code_buf
)) >= 0)
1316 outstring(pri
, pri
->code_buf
);
1318 prt_hhx(pri
, 0, (long)ccc
);
1322 prt_rcc(private_t
*pri
, int raw
, long val
) /* print corectl() ret. cont. */
1326 if (pri
->Errno
|| Pread(Proc
, &ccc
, sizeof (ccc
), val
) != sizeof (ccc
))
1327 prt_hex(pri
, 0, val
);
1328 else if (!raw
&& proc_content2str(ccc
, pri
->code_buf
,
1329 sizeof (pri
->code_buf
)) >= 0)
1330 outstring(pri
, pri
->code_buf
);
1332 prt_hhx(pri
, 0, (long)ccc
);
1336 prt_cpc(private_t
*pri
, int raw
, long val
) /* print cpc() subcode */
1338 const char *s
= NULL
;
1342 case CPC_BIND
: s
= "CPC_BIND"; break;
1343 case CPC_SAMPLE
: s
= "CPC_SAMPLE"; break;
1344 case CPC_INVALIDATE
: s
= "CPC_INVALIDATE"; break;
1345 case CPC_RELE
: s
= "CPC_RELE"; break;
1346 case CPC_EVLIST_SIZE
: s
= "CPC_EVLIST_SIZE"; break;
1347 case CPC_LIST_EVENTS
: s
= "CPC_LIST_EVENTS"; break;
1348 case CPC_ATTRLIST_SIZE
: s
= "CPC_ATTRLIST_SIZE"; break;
1349 case CPC_LIST_ATTRS
: s
= "CPC_LIST_ATTRS"; break;
1350 case CPC_IMPL_NAME
: s
= "CPC_IMPL_NAME"; break;
1351 case CPC_CPUREF
: s
= "CPC_CPUREF"; break;
1352 case CPC_USR_EVENTS
: s
= "CPC_USR_EVENTS"; break;
1353 case CPC_SYS_EVENTS
: s
= "CPC_SYS_EVENTS"; break;
1354 case CPC_NPIC
: s
= "CPC_NPIC"; break;
1355 case CPC_CAPS
: s
= "CPC_CAPS"; break;
1356 case CPC_ENABLE
: s
= "CPC_ENABLE"; break;
1357 case CPC_DISABLE
: s
= "CPC_DISABLE"; break;
1362 prt_dec(pri
, 0, val
);
1368 outstring(private_t
*pri
, const char *s
)
1370 int len
= strlen(s
);
1373 (void) strcpy(pri
->sys_string
+ pri
->sys_leng
, s
);
1374 pri
->sys_leng
+= len
;
1378 grow(private_t
*pri
, int nbyte
) /* reallocate format buffer if necessary */
1380 while (pri
->sys_leng
+ nbyte
>= pri
->sys_ssize
)
1381 pri
->sys_string
= my_realloc(pri
->sys_string
,
1382 pri
->sys_ssize
*= 2, "format buffer");
1386 prt_sqc(private_t
*pri
, int raw
, long val
) /* print sigqueue() si_code */
1388 const char *s
= NULL
;
1392 case SI_QUEUE
: s
= "SI_QUEUE"; break;
1393 case SI_TIMER
: s
= "SI_TIMER"; break;
1394 case SI_ASYNCIO
: s
= "SI_ASYNCIO"; break;
1395 case SI_MESGQ
: s
= "SI_MESGQ"; break;
1400 prt_dec(pri
, 0, val
);
1406 * print priocntlsys() (key, value) pair key.
1409 print_pck(private_t
*pri
, int raw
, long val
)
1411 const char *s
= NULL
;
1412 char clname
[PC_CLNMSZ
];
1414 if ((pri
->sys_args
[2] != PC_GETXPARMS
&&
1415 pri
->sys_args
[2] != PC_SETXPARMS
) || val
== 0 || raw
) {
1416 prt_dec(pri
, 0, val
);
1420 if (pri
->sys_args
[3] == 0) {
1421 if (val
== PC_KY_CLNAME
) {
1425 prt_dec(pri
, 0, val
);
1429 if (Pread(Proc
, &clname
, PC_CLNMSZ
, pri
->sys_args
[3]) != PC_CLNMSZ
) {
1430 prt_dec(pri
, 0, val
);
1434 if (strcmp(clname
, "TS") == 0) {
1436 case TS_KY_UPRILIM
: s
= "TS_KY_UPRILIM"; break;
1437 case TS_KY_UPRI
: s
= "TS_KY_UPRI"; break;
1440 } else if (strcmp(clname
, "IA") == 0) {
1442 case IA_KY_UPRILIM
: s
= "IA_KY_UPRILIM"; break;
1443 case IA_KY_UPRI
: s
= "IA_KY_UPRI"; break;
1444 case IA_KY_MODE
: s
= "IA_KY_MODE"; break;
1447 } else if (strcmp(clname
, "RT") == 0) {
1449 case RT_KY_PRI
: s
= "RT_KY_PRI"; break;
1450 case RT_KY_TQSECS
: s
= "RT_KY_TQSECS"; break;
1451 case RT_KY_TQNSECS
: s
= "RT_KY_TQNSECS"; break;
1452 case RT_KY_TQSIG
: s
= "RT_KY_TQSIG"; break;
1455 } else if (strcmp(clname
, "FSS") == 0) {
1457 case FSS_KY_UPRILIM
: s
= "FSS_KY_UPRILIM"; break;
1458 case FSS_KY_UPRI
: s
= "FSS_KY_UPRI"; break;
1461 } else if (strcmp(clname
, "FX") == 0) {
1463 case FX_KY_UPRILIM
: s
= "FX_KY_UPRILIM"; break;
1464 case FX_KY_UPRI
: s
= "FX_KY_UPRI"; break;
1465 case FX_KY_TQSECS
: s
= "FX_KY_TQSECS"; break;
1466 case FX_KY_TQNSECS
: s
= "FX_KY_TQNSECS"; break;
1472 prt_dec(pri
, 0, val
);
1478 * print priocntlsys() fourth argument.
1482 prt_pc4(private_t
*pri
, int raw
, long val
)
1484 /* look at pricntlsys function */
1485 if ((pri
->sys_args
[2] != PC_GETXPARMS
&&
1486 pri
->sys_args
[2] != PC_SETXPARMS
))
1487 prt_hex(pri
, 0, val
);
1489 prt_stg(pri
, 0, val
);
1491 prt_dec(pri
, 0, val
);
1495 * print priocntlsys() (key, value) pairs (5th argument).
1499 prt_pc5(private_t
*pri
, int raw
, long val
)
1502 pc_vaparm_t
*vpp
= &prms
.pc_parms
[0];
1506 /* look at pricntlsys function */
1507 if ((pri
->sys_args
[2] != PC_GETXPARMS
&&
1508 pri
->sys_args
[2] != PC_SETXPARMS
) || val
== 0) {
1513 if (Pread(Proc
, &prms
, sizeof (prms
), val
) != sizeof (prms
)) {
1514 prt_hex(pri
, 0, val
);
1518 if ((cnt
= prms
.pc_vaparmscnt
) > PC_VAPARMCNT
)
1521 for (; cnt
--; vpp
++) {
1522 print_pck(pri
, 0, vpp
->pc_key
);
1523 outstring(pri
, ", ");
1524 prt_hex(pri
, 0, (long)vpp
->pc_parm
);
1525 outstring(pri
, ", ");
1528 prt_dec(pri
, 0, PC_KY_NULL
);
1533 prt_psflags(private_t
*pri
, secflagset_t val
)
1538 outstring(pri
, "0x0");
1543 if (secflag_isset(val
, PROC_SEC_ASLR
)) {
1544 (void) strlcat(str
, "|PROC_SEC_ASLR", sizeof (str
));
1545 secflag_clear(&val
, PROC_SEC_ASLR
);
1547 if (secflag_isset(val
, PROC_SEC_FORBIDNULLMAP
)) {
1548 (void) strlcat(str
, "|PROC_SEC_FORBIDNULLMAP",
1550 secflag_clear(&val
, PROC_SEC_FORBIDNULLMAP
);
1552 if (secflag_isset(val
, PROC_SEC_NOEXECSTACK
)) {
1553 (void) strlcat(str
, "|PROC_SEC_NOEXECSTACK",
1555 secflag_clear(&val
, PROC_SEC_NOEXECSTACK
);
1559 (void) snprintf(str
, sizeof (str
), "%s|%#x", str
, val
);
1561 outstring(pri
, str
+ 1);
1565 * Print a psecflags(2) delta
1568 prt_psdelta(private_t
*pri
, int raw
, long value
)
1573 (Pread(Proc
, &psd
, sizeof (psd
), value
) != sizeof (psd
))) {
1574 prt_hex(pri
, 0, value
);
1577 outstring(pri
, "{ ");
1578 prt_psflags(pri
, psd
.psd_add
);
1579 outstring(pri
, ", ");
1580 prt_psflags(pri
, psd
.psd_rem
);
1581 outstring(pri
, ", ");
1582 prt_psflags(pri
, psd
.psd_assign
);
1583 outstring(pri
, ", ");
1584 outstring(pri
, psd
.psd_ass_active
? "B_TRUE" : "B_FALSE");
1585 outstring(pri
, " }");
1589 * Print a psecflagswhich_t
1592 prt_psfw(private_t
*pri
, int raw
, long value
)
1594 psecflagwhich_t which
= (psecflagwhich_t
)value
;
1598 prt_dec(pri
, 0, value
);
1604 s
= "PSF_EFFECTIVE";
1618 prt_dec(pri
, 0, value
);
1624 * Print processor set id, including logical expansion of "special" ids.
1627 prt_pst(private_t
*pri
, int raw
, long val
)
1629 const char *s
= NULL
;
1632 switch ((psetid_t
)val
) {
1633 case PS_NONE
: s
= "PS_NONE"; break;
1634 case PS_QUERY
: s
= "PS_QUERY"; break;
1635 case PS_MYID
: s
= "PS_MYID"; break;
1640 prt_dec(pri
, 0, val
);
1646 * Print meminfo() argument.
1650 prt_mif(private_t
*pri
, int raw
, long val
)
1652 struct meminfo minfo
;
1655 if (data_model
== PR_MODEL_ILP32
) {
1656 struct meminfo32 minfo32
;
1658 if (Pread(Proc
, &minfo32
, sizeof (struct meminfo32
), val
) !=
1659 sizeof (struct meminfo32
)) {
1660 prt_dec(pri
, 0, pri
->sys_args
[1]); /* addr_count */
1661 outstring(pri
, ", ");
1662 prt_hex(pri
, 0, val
);
1666 * arrange the arguments in the order that user calls with
1668 prt_hex(pri
, 0, minfo32
.mi_inaddr
);
1669 outstring(pri
, ", ");
1670 prt_dec(pri
, 0, pri
->sys_args
[1]); /* addr_count */
1671 outstring(pri
, ", ");
1672 prt_hex(pri
, 0, minfo32
.mi_info_req
);
1673 outstring(pri
, ", ");
1674 prt_dec(pri
, 0, minfo32
.mi_info_count
);
1675 outstring(pri
, ", ");
1676 prt_hex(pri
, 0, minfo32
.mi_outdata
);
1677 outstring(pri
, ", ");
1678 prt_hex(pri
, 0, minfo32
.mi_validity
);
1682 if (Pread(Proc
, &minfo
, sizeof (struct meminfo
), val
) !=
1683 sizeof (struct meminfo
)) {
1684 prt_dec(pri
, 0, pri
->sys_args
[1]); /* addr_count */
1685 outstring(pri
, ", ");
1686 prt_hex(pri
, 0, val
);
1690 * arrange the arguments in the order that user calls with
1692 prt_hex(pri
, 0, (long)minfo
.mi_inaddr
);
1693 outstring(pri
, ", ");
1694 prt_dec(pri
, 0, pri
->sys_args
[1]); /* addr_count */
1695 outstring(pri
, ", ");
1696 prt_hex(pri
, 0, (long)minfo
.mi_info_req
);
1697 outstring(pri
, ", ");
1698 prt_dec(pri
, 0, minfo
.mi_info_count
);
1699 outstring(pri
, ", ");
1700 prt_hex(pri
, 0, (long)minfo
.mi_outdata
);
1701 outstring(pri
, ", ");
1702 prt_hex(pri
, 0, (long)minfo
.mi_validity
);
1707 * Print so_socket() 1st argument.
1711 prt_pfm(private_t
*pri
, int raw
, long val
)
1713 /* Protocol Families have same names as Address Families */
1714 if ((ulong_t
)val
< MAX_AFCODES
) {
1715 outstring(pri
, "PF_");
1716 outstring(pri
, afcodes
[val
]);
1718 prt_dec(pri
, 0, val
);
1723 * Print sockconfig() subcode.
1727 prt_skc(private_t
*pri
, int raw
, long val
)
1729 const char *s
= NULL
;
1733 case SOCKCONFIG_ADD_SOCK
:
1734 s
= "SOCKCONFIG_ADD_SOCK"; break;
1735 case SOCKCONFIG_REMOVE_SOCK
:
1736 s
= "SOCKCONFIG_REMOVE_SOCK"; break;
1737 case SOCKCONFIG_ADD_FILTER
:
1738 s
= "SOCKCONFIG_ADD_FILTER"; break;
1739 case SOCKCONFIG_REMOVE_FILTER
:
1740 s
= "SOCKCONFIG_REMOVE_FILTER"; break;
1744 prt_dec(pri
, 0, val
);
1749 * Print so_socket() 2nd argument.
1753 prt_skt(private_t
*pri
, int raw
, long val
)
1756 long type
= val
& SOCK_TYPE_MASK
;
1758 if ((ulong_t
)type
<= MAX_SOCKTYPES
&&
1759 (s
= socktype_codes
[type
]) != NULL
) {
1761 if ((val
& SOCK_CLOEXEC
) != 0) {
1762 outstring(pri
, "|SOCK_CLOEXEC");
1765 prt_dec(pri
, 0, val
);
1771 * Print so_socket() 3rd argument.
1775 prt_skp(private_t
*pri
, int raw
, long val
)
1779 /* cheating -- look at the protocol-family */
1780 switch (pri
->sys_args
[0]) {
1782 case PF_INET
: if ((s
= ipprotos((int)val
)) != NULL
) {
1787 default: prt_dec(pri
, 0, val
);
1794 * Print accept4() flags argument.
1797 prt_acf(private_t
*pri
, int raw
, long val
)
1801 (val
& ~(SOCK_CLOEXEC
|SOCK_NDELAY
|SOCK_NONBLOCK
))) {
1802 prt_dex(pri
, 0, val
);
1806 if (val
& SOCK_CLOEXEC
) {
1807 outstring(pri
, "|SOCK_CLOEXEC" + first
);
1810 if (val
& SOCK_NDELAY
) {
1811 outstring(pri
, "|SOCK_NDELAY" + first
);
1814 if (val
& SOCK_NONBLOCK
) {
1815 outstring(pri
, "|SOCK_NONBLOCK" + first
);
1821 * Print setsockopt()/getsockopt() 2nd argument.
1825 prt_sol(private_t
*pri
, int raw
, long val
)
1827 if (val
== SOL_SOCKET
) {
1828 outstring(pri
, "SOL_SOCKET");
1829 } else if (val
== SOL_ROUTE
) {
1830 outstring(pri
, "SOL_ROUTE");
1832 const struct protoent
*p
;
1833 struct protoent res
;
1834 char buf
[NSS_BUFLEN_PROTOCOLS
];
1836 if ((p
= getprotobynumber_r(val
, &res
,
1837 (char *)buf
, sizeof (buf
))) != NULL
)
1838 outstring(pri
, p
->p_name
);
1840 prt_dec(pri
, 0, val
);
1846 sol_optname(private_t
*pri
, long val
)
1848 #define CBSIZE sizeof (pri->code_buf)
1849 if (val
>= SO_SNDBUF
) {
1851 case SO_SNDBUF
: return ("SO_SNDBUF");
1852 case SO_RCVBUF
: return ("SO_RCVBUF");
1853 case SO_SNDLOWAT
: return ("SO_SNDLOWAT");
1854 case SO_RCVLOWAT
: return ("SO_RCVLOWAT");
1855 case SO_SNDTIMEO
: return ("SO_SNDTIMEO");
1856 case SO_RCVTIMEO
: return ("SO_RCVTIMEO");
1857 case SO_ERROR
: return ("SO_ERROR");
1858 case SO_TYPE
: return ("SO_TYPE");
1859 case SO_PROTOTYPE
: return ("SO_PROTOTYPE");
1860 case SO_ALLZONES
: return ("SO_ALLZONES");
1861 case SO_VRRP
: return ("SO_VRRP");
1862 case SO_EXCLBIND
: return ("SO_EXCLBIND");
1863 case SO_DOMAIN
: return ("SO_DOMAIN");
1865 default: (void) snprintf(pri
->code_buf
, CBSIZE
,
1867 return (pri
->code_buf
);
1870 char *s
= pri
->code_buf
;
1875 val2
= val
& ~(SO_DEBUG
|SO_ACCEPTCONN
|SO_REUSEADDR
|SO_KEEPALIVE
|
1876 SO_DONTROUTE
|SO_BROADCAST
|SO_USELOOPBACK
|SO_LINGER
|
1877 SO_OOBINLINE
|SO_DGRAM_ERRIND
|SO_RECVUCRED
);
1879 used
= snprintf(s
, CBSIZE
, "|0x%lx", val2
);
1881 used
= strlcat(s
, "|SO_DEBUG", CBSIZE
);
1882 if (val
& SO_ACCEPTCONN
)
1883 used
= strlcat(s
, "|SO_ACCEPTCONN", CBSIZE
);
1884 if (val
& SO_REUSEADDR
)
1885 used
= strlcat(s
, "|SO_REUSEADDR", CBSIZE
);
1886 if (val
& SO_KEEPALIVE
)
1887 used
= strlcat(s
, "|SO_KEEPALIVE", CBSIZE
);
1888 if (val
& SO_DONTROUTE
)
1889 used
= strlcat(s
, "|SO_DONTROUTE", CBSIZE
);
1890 if (val
& SO_BROADCAST
)
1891 used
= strlcat(s
, "|SO_BROADCAST", CBSIZE
);
1892 if (val
& SO_USELOOPBACK
)
1893 used
= strlcat(s
, "|SO_USELOOPBACK", CBSIZE
);
1894 if (val
& SO_LINGER
)
1895 used
= strlcat(s
, "|SO_LINGER", CBSIZE
);
1896 if (val
& SO_OOBINLINE
)
1897 used
= strlcat(s
, "|SO_OOBINLINE", CBSIZE
);
1898 if (val
& SO_DGRAM_ERRIND
)
1899 used
= strlcat(s
, "|SO_DGRAM_ERRIND", CBSIZE
);
1900 if (val
& SO_RECVUCRED
)
1901 used
= strlcat(s
, "|SO_RECVUCRED", CBSIZE
);
1902 if (used
>= CBSIZE
|| val
== 0)
1903 (void) snprintf(s
+ 1, CBSIZE
-1, "0x%lx", val
);
1904 return ((const char *)(s
+ 1));
1910 route_optname(private_t
*pri
, long val
)
1914 return ("RT_AWARE");
1916 (void) snprintf(pri
->code_buf
, sizeof (pri
->code_buf
),
1918 return (pri
->code_buf
);
1923 tcp_optname(private_t
*pri
, long val
)
1926 case TCP_NODELAY
: return ("TCP_NODELAY");
1927 case TCP_MAXSEG
: return ("TCP_MAXSEG");
1928 case TCP_KEEPALIVE
: return ("TCP_KEEPALIVE");
1929 case TCP_NOTIFY_THRESHOLD
: return ("TCP_NOTIFY_THRESHOLD");
1930 case TCP_ABORT_THRESHOLD
: return ("TCP_ABORT_THRESHOLD");
1931 case TCP_CONN_NOTIFY_THRESHOLD
: return ("TCP_CONN_NOTIFY_THRESHOLD");
1932 case TCP_CONN_ABORT_THRESHOLD
: return ("TCP_CONN_ABORT_THRESHOLD");
1933 case TCP_RECVDSTADDR
: return ("TCP_RECVDSTADDR");
1934 case TCP_ANONPRIVBIND
: return ("TCP_ANONPRIVBIND");
1935 case TCP_EXCLBIND
: return ("TCP_EXCLBIND");
1936 case TCP_INIT_CWND
: return ("TCP_INIT_CWND");
1937 case TCP_KEEPALIVE_THRESHOLD
: return ("TCP_KEEPALIVE_THRESHOLD");
1938 case TCP_KEEPALIVE_ABORT_THRESHOLD
:
1939 return ("TCP_KEEPALIVE_ABORT_THRESHOLD");
1940 case TCP_CORK
: return ("TCP_CORK");
1941 case TCP_RTO_INITIAL
: return ("TCP_RTO_INITIAL");
1942 case TCP_RTO_MIN
: return ("TCP_RTO_MIN");
1943 case TCP_RTO_MAX
: return ("TCP_RTO_MAX");
1944 case TCP_LINGER2
: return ("TCP_LINGER2");
1945 case TCP_KEEPIDLE
: return ("TCP_KEEPIDLE");
1946 case TCP_KEEPCNT
: return ("TCP_KEEPCNT");
1947 case TCP_KEEPINTVL
: return ("TCP_KEEPINTVL");
1949 default: (void) snprintf(pri
->code_buf
,
1950 sizeof (pri
->code_buf
),
1952 return (pri
->code_buf
);
1958 sctp_optname(private_t
*pri
, long val
)
1961 case SCTP_RTOINFO
: return ("SCTP_RTOINFO");
1962 case SCTP_ASSOCINFO
: return ("SCTP_ASSOCINFO");
1963 case SCTP_INITMSG
: return ("SCTP_INITMSG");
1964 case SCTP_NODELAY
: return ("SCTP_NODELAY");
1965 case SCTP_AUTOCLOSE
: return ("SCTP_AUTOCLOSE");
1966 case SCTP_SET_PEER_PRIMARY_ADDR
:
1967 return ("SCTP_SET_PEER_PRIMARY_ADDR");
1968 case SCTP_PRIMARY_ADDR
: return ("SCTP_PRIMARY_ADDR");
1969 case SCTP_ADAPTATION_LAYER
: return ("SCTP_ADAPTATION_LAYER");
1970 case SCTP_DISABLE_FRAGMENTS
: return ("SCTP_DISABLE_FRAGMENTS");
1971 case SCTP_PEER_ADDR_PARAMS
: return ("SCTP_PEER_ADDR_PARAMS");
1972 case SCTP_DEFAULT_SEND_PARAM
: return ("SCTP_DEFAULT_SEND_PARAM");
1973 case SCTP_EVENTS
: return ("SCTP_EVENTS");
1974 case SCTP_I_WANT_MAPPED_V4_ADDR
:
1975 return ("SCTP_I_WANT_MAPPED_V4_ADDR");
1976 case SCTP_MAXSEG
: return ("SCTP_MAXSEG");
1977 case SCTP_STATUS
: return ("SCTP_STATUS");
1978 case SCTP_GET_PEER_ADDR_INFO
: return ("SCTP_GET_PEER_ADDR_INFO");
1980 case SCTP_ADD_ADDR
: return ("SCTP_ADD_ADDR");
1981 case SCTP_REM_ADDR
: return ("SCTP_REM_ADDR");
1983 default: (void) snprintf(pri
->code_buf
,
1984 sizeof (pri
->code_buf
),
1986 return (pri
->code_buf
);
1992 udp_optname(private_t
*pri
, long val
)
1995 case UDP_CHECKSUM
: return ("UDP_CHECKSUM");
1996 case UDP_ANONPRIVBIND
: return ("UDP_ANONPRIVBIND");
1997 case UDP_EXCLBIND
: return ("UDP_EXCLBIND");
1998 case UDP_RCVHDR
: return ("UDP_RCVHDR");
1999 case UDP_NAT_T_ENDPOINT
: return ("UDP_NAT_T_ENDPOINT");
2001 default: (void) snprintf(pri
->code_buf
,
2002 sizeof (pri
->code_buf
), "0x%lx",
2004 return (pri
->code_buf
);
2010 * Print setsockopt()/getsockopt() 3rd argument.
2014 prt_son(private_t
*pri
, int raw
, long val
)
2016 /* cheating -- look at the level */
2017 switch (pri
->sys_args
[1]) {
2018 case SOL_SOCKET
: outstring(pri
, sol_optname(pri
, val
));
2020 case SOL_ROUTE
: outstring(pri
, route_optname(pri
, val
));
2022 case IPPROTO_TCP
: outstring(pri
, tcp_optname(pri
, val
));
2024 case IPPROTO_UDP
: outstring(pri
, udp_optname(pri
, val
));
2026 case IPPROTO_SCTP
: outstring(pri
, sctp_optname(pri
, val
));
2028 default: prt_dec(pri
, 0, val
);
2039 prt_utt(private_t
*pri
, int raw
, long val
)
2041 const char *s
= NULL
;
2045 prt_dec(pri
, 0, val
);
2052 * Print utrap handler
2055 prt_uth(private_t
*pri
, int raw
, long val
)
2057 const char *s
= NULL
;
2061 case (long)UTH_NOCHANGE
: s
= "UTH_NOCHANGE"; break;
2066 prt_hex(pri
, 0, val
);
2072 access_flags(private_t
*pri
, long arg
)
2075 char *str
= pri
->code_buf
;
2077 if (arg
& ~(R_OK
|W_OK
|X_OK
|E_OK
))
2084 return ("F_OK|E_OK");
2088 (void) strlcat(str
, "|R_OK", sizeof (pri
->code_buf
));
2090 (void) strlcat(str
, "|W_OK", sizeof (pri
->code_buf
));
2092 (void) strlcat(str
, "|X_OK", sizeof (pri
->code_buf
));
2094 (void) strlcat(str
, "|E_OK", sizeof (pri
->code_buf
));
2095 return ((const char *)(str
+ 1));
2100 * Print access() flags.
2103 prt_acc(private_t
*pri
, int raw
, long val
)
2105 const char *s
= raw
? NULL
: access_flags(pri
, val
);
2108 prt_dex(pri
, 0, val
);
2114 * Print shutdown() "how" (2nd) argument
2117 prt_sht(private_t
*pri
, int raw
, long val
)
2120 prt_dex(pri
, 0, val
);
2124 case SHUT_RD
: outstring(pri
, "SHUT_RD"); break;
2125 case SHUT_WR
: outstring(pri
, "SHUT_WR"); break;
2126 case SHUT_RDWR
: outstring(pri
, "SHUT_RDWR"); break;
2127 default: prt_dec(pri
, 0, val
); break;
2132 * Print fcntl() F_SETFL flags (3rd) argument or fdsync flag (2nd arg)
2134 static struct fcntl_flags
{
2138 #define FC_FL(flag) { (long)flag, "|" # flag }
2160 prt_ffg(private_t
*pri
, int raw
, long val
)
2162 #define CBSIZE sizeof (pri->code_buf)
2163 char *s
= pri
->code_buf
;
2165 struct fcntl_flags
*fp
;
2168 (void) snprintf(s
, CBSIZE
, "0x%lx", val
);
2173 outstring(pri
, "(no flags)");
2178 for (fp
= fcntl_flags
;
2179 fp
< &fcntl_flags
[sizeof (fcntl_flags
) / sizeof (*fp
)]; fp
++) {
2180 if (val
& fp
->val
) {
2181 used
= strlcat(s
, fp
->name
, CBSIZE
);
2186 if (val
!= 0 && used
<= CBSIZE
)
2187 used
+= snprintf(s
+ used
, CBSIZE
- used
, "|0x%lx", val
);
2190 (void) snprintf(s
+ 1, CBSIZE
-1, "0x%lx", val
);
2191 outstring(pri
, s
+ 1);
2196 prt_prs(private_t
*pri
, int raw
, long val
)
2198 static size_t setsize
;
2199 priv_set_t
*set
= priv_allocset();
2202 const priv_impl_info_t
*info
= getprivimplinfo();
2204 setsize
= info
->priv_setsize
* sizeof (priv_chunk_t
);
2207 if (setsize
!= 0 && !raw
&& set
!= NULL
&&
2208 Pread(Proc
, set
, setsize
, val
) == setsize
) {
2211 outstring(pri
, "{");
2212 for (i
= 0; i
< setsize
/ sizeof (priv_chunk_t
); i
++) {
2213 char buf
[9]; /* 8 hex digits + '\0' */
2214 (void) snprintf(buf
, sizeof (buf
), "%08x",
2215 ((priv_chunk_t
*)set
)[i
]);
2216 outstring(pri
, buf
);
2219 outstring(pri
, "}");
2221 prt_hex(pri
, 0, val
);
2229 * Print privilege set operation.
2232 prt_pro(private_t
*pri
, int raw
, long val
)
2234 const char *s
= NULL
;
2237 switch ((priv_op_t
)val
) {
2238 case PRIV_ON
: s
= "PRIV_ON"; break;
2239 case PRIV_OFF
: s
= "PRIV_OFF"; break;
2240 case PRIV_SET
: s
= "PRIV_SET"; break;
2245 prt_dec(pri
, 0, val
);
2251 * Print privilege set name
2254 prt_prn(private_t
*pri
, int raw
, long val
)
2256 const char *s
= NULL
;
2259 s
= priv_getsetbynum((int)val
);
2262 prt_dec(pri
, 0, val
);
2264 char *dup
= strdup(s
);
2267 /* Do the best we can in this case */
2273 outstring(pri
, "PRIV_");
2277 while (*q
!= '\0') {
2281 outstring(pri
, dup
);
2287 * Print process flag names.
2290 prt_pfl(private_t
*pri
, int raw
, long val
)
2292 const char *s
= NULL
;
2296 case PRIV_DEBUG
: s
= "PRIV_DEBUG"; break;
2297 case PRIV_AWARE
: s
= "PRIV_AWARE"; break;
2298 case PRIV_XPOLICY
: s
= "PRIV_XPOLICY"; break;
2299 case PRIV_AWARE_RESET
: s
= "PRIV_AWARE_RESET"; break;
2300 case PRIV_PFEXEC
: s
= "PRIV_PFEXEC"; break;
2305 prt_dec(pri
, 0, val
);
2311 * Print lgrp_affinity_{get,set}() arguments.
2315 prt_laf(private_t
*pri
, int raw
, long val
)
2317 lgrp_affinity_args_t laff
;
2319 if (Pread(Proc
, &laff
, sizeof (lgrp_affinity_args_t
), val
) !=
2320 sizeof (lgrp_affinity_args_t
)) {
2321 prt_hex(pri
, 0, val
);
2325 * arrange the arguments in the order that user calls with
2327 prt_dec(pri
, 0, laff
.idtype
);
2328 outstring(pri
, ", ");
2329 prt_dec(pri
, 0, laff
.id
);
2330 outstring(pri
, ", ");
2331 prt_dec(pri
, 0, laff
.lgrp
);
2332 outstring(pri
, ", ");
2333 if (pri
->sys_args
[0] == LGRP_SYS_AFFINITY_SET
)
2334 prt_dec(pri
, 0, laff
.aff
);
2338 * Print a key_t as IPC_PRIVATE if it is 0.
2341 prt_key(private_t
*pri
, int raw
, long val
)
2343 if (!raw
&& val
== 0)
2344 outstring(pri
, "IPC_PRIVATE");
2346 prt_dec(pri
, 0, val
);
2351 * Print zone_getattr() attribute types.
2354 prt_zga(private_t
*pri
, int raw
, long val
)
2356 const char *s
= NULL
;
2360 case ZONE_ATTR_NAME
: s
= "ZONE_ATTR_NAME"; break;
2361 case ZONE_ATTR_ROOT
: s
= "ZONE_ATTR_ROOT"; break;
2362 case ZONE_ATTR_STATUS
: s
= "ZONE_ATTR_STATUS"; break;
2363 case ZONE_ATTR_PRIVSET
: s
= "ZONE_ATTR_PRIVSET"; break;
2364 case ZONE_ATTR_UNIQID
: s
= "ZONE_ATTR_UNIQID"; break;
2365 case ZONE_ATTR_POOLID
: s
= "ZONE_ATTR_POOLID"; break;
2366 case ZONE_ATTR_INITPID
: s
= "ZONE_ATTR_INITPID"; break;
2367 case ZONE_ATTR_INITNAME
: s
= "ZONE_ATTR_INITNAME"; break;
2368 case ZONE_ATTR_BOOTARGS
: s
= "ZONE_ATTR_BOOTARGS"; break;
2369 case ZONE_ATTR_BRAND
: s
= "ZONE_ATTR_BRAND"; break;
2370 case ZONE_ATTR_FLAGS
: s
= "ZONE_ATTR_FLAGS"; break;
2371 case ZONE_ATTR_PHYS_MCAP
: s
= "ZONE_ATTR_PHYS_MCAP"; break;
2376 prt_dec(pri
, 0, val
);
2382 * Print a file descriptor as AT_FDCWD if necessary
2385 prt_atc(private_t
*pri
, int raw
, long val
)
2387 if ((int)val
== AT_FDCWD
) {
2389 prt_hex(pri
, 0, (uint_t
)AT_FDCWD
);
2391 outstring(pri
, "AT_FDCWD");
2393 prt_dec(pri
, 0, val
);
2398 * Print LIO_XX flags
2401 prt_lio(private_t
*pri
, int raw
, long val
)
2404 prt_dec(pri
, 0, val
);
2405 else if (val
== LIO_WAIT
)
2406 outstring(pri
, "LIO_WAIT");
2407 else if (val
== LIO_NOWAIT
)
2408 outstring(pri
, "LIO_NOWAIT");
2410 prt_dec(pri
, 0, val
);
2414 door_flags(private_t
*pri
, long val
)
2416 door_attr_t attr
= (door_attr_t
)val
;
2417 char *str
= pri
->code_buf
;
2420 #define PROCESS_FLAG(flg) \
2422 (void) strlcat(str, "|" #flg, sizeof (pri->code_buf)); \
2426 PROCESS_FLAG(DOOR_UNREF
);
2427 PROCESS_FLAG(DOOR_UNREF_MULTI
);
2428 PROCESS_FLAG(DOOR_PRIVATE
);
2429 PROCESS_FLAG(DOOR_REFUSE_DESC
);
2430 PROCESS_FLAG(DOOR_NO_CANCEL
);
2431 PROCESS_FLAG(DOOR_LOCAL
);
2432 PROCESS_FLAG(DOOR_REVOKED
);
2433 PROCESS_FLAG(DOOR_IS_UNREF
);
2436 if (attr
!= 0 || *str
== '\0') {
2437 size_t len
= strlen(str
);
2438 (void) snprintf(str
+ len
, sizeof (pri
->code_buf
) - len
,
2446 * Print door_create() flags
2449 prt_dfl(private_t
*pri
, int raw
, long val
)
2452 prt_hex(pri
, 0, val
);
2454 outstring(pri
, door_flags(pri
, val
));
2458 * Print door_*param() param argument
2461 prt_dpm(private_t
*pri
, int raw
, long val
)
2464 prt_hex(pri
, 0, val
);
2465 else if (val
== DOOR_PARAM_DESC_MAX
)
2466 outstring(pri
, "DOOR_PARAM_DESC_MAX");
2467 else if (val
== DOOR_PARAM_DATA_MIN
)
2468 outstring(pri
, "DOOR_PARAM_DATA_MIN");
2469 else if (val
== DOOR_PARAM_DATA_MAX
)
2470 outstring(pri
, "DOOR_PARAM_DATA_MAX");
2472 prt_hex(pri
, 0, val
);
2476 * Print rctlsys subcodes
2479 prt_rsc(private_t
*pri
, int raw
, long val
) /* print utssys code */
2481 const char *s
= raw
? NULL
: rctlsyscode(val
);
2484 prt_dec(pri
, 0, val
);
2490 * Print getrctl flags
2493 prt_rgf(private_t
*pri
, int raw
, long val
)
2495 long action
= val
& (~RCTLSYS_ACTION_MASK
);
2498 prt_hex(pri
, 0, val
);
2499 else if (action
== RCTL_FIRST
)
2500 outstring(pri
, "RCTL_FIRST");
2501 else if (action
== RCTL_NEXT
)
2502 outstring(pri
, "RCTL_NEXT");
2503 else if (action
== RCTL_USAGE
)
2504 outstring(pri
, "RCTL_USAGE");
2506 prt_hex(pri
, 0, val
);
2510 * Print setrctl flags
2513 prt_rsf(private_t
*pri
, int raw
, long val
)
2515 long action
= val
& (~RCTLSYS_ACTION_MASK
);
2516 long pval
= val
& RCTL_LOCAL_ACTION_MASK
;
2517 char *s
= pri
->code_buf
;
2520 prt_hex(pri
, 0, val
);
2522 } else if (action
== RCTL_INSERT
)
2523 (void) strcpy(s
, "RCTL_INSERT");
2524 else if (action
== RCTL_DELETE
)
2525 (void) strcpy(s
, "RCTL_DELETE");
2526 else if (action
== RCTL_REPLACE
)
2527 (void) strcpy(s
, "RCTL_REPLACE");
2529 prt_hex(pri
, 0, val
);
2533 if (pval
& RCTL_USE_RECIPIENT_PID
) {
2534 pval
^= RCTL_USE_RECIPIENT_PID
;
2535 (void) strlcat(s
, "|RCTL_USE_RECIPIENT_PID",
2536 sizeof (pri
->code_buf
));
2539 if ((pval
& RCTLSYS_ACTION_MASK
) != 0)
2540 prt_hex(pri
, 0, val
);
2541 else if (*s
!= '\0')
2544 prt_hex(pri
, 0, val
);
2548 * Print rctlctl flags
2551 prt_rcf(private_t
*pri
, int raw
, long val
)
2553 long action
= val
& (~RCTLSYS_ACTION_MASK
);
2556 prt_hex(pri
, 0, val
);
2557 else if (action
== RCTLCTL_GET
)
2558 outstring(pri
, "RCTLCTL_GET");
2559 else if (action
== RCTLCTL_SET
)
2560 outstring(pri
, "RCTLCTL_SET");
2562 prt_hex(pri
, 0, val
);
2566 * Print setprojrctl flags
2569 prt_spf(private_t
*pri
, int raw
, long val
)
2571 long action
= val
& TASK_PROJ_MASK
;
2573 if (!raw
&& (action
== TASK_PROJ_PURGE
))
2574 outstring(pri
, "TASK_PROJ_PURGE");
2576 prt_hex(pri
, 0, val
);
2580 * Print forkx() flags
2583 prt_fxf(private_t
*pri
, int raw
, long val
)
2588 outstring(pri
, "0");
2589 else if (raw
|| (val
& ~(FORK_NOSIGCHLD
| FORK_WAITPID
)))
2590 prt_hhx(pri
, 0, val
);
2592 str
= pri
->code_buf
;
2594 if (val
& FORK_NOSIGCHLD
)
2595 (void) strlcat(str
, "|FORK_NOSIGCHLD",
2596 sizeof (pri
->code_buf
));
2597 if (val
& FORK_WAITPID
)
2598 (void) strlcat(str
, "|FORK_WAITPID",
2599 sizeof (pri
->code_buf
));
2600 outstring(pri
, str
+ 1);
2605 * Print faccessat() flag
2608 prt_fat(private_t
*pri
, int raw
, long val
)
2611 outstring(pri
, "0");
2612 else if (!raw
&& val
== AT_EACCESS
)
2613 outstring(pri
, "AT_EACCESS");
2615 prt_hex(pri
, 0, val
);
2619 * Print unlinkat() flag
2622 prt_uat(private_t
*pri
, int raw
, long val
)
2625 outstring(pri
, "0");
2626 else if (!raw
&& val
== AT_REMOVEDIR
)
2627 outstring(pri
, "AT_REMOVEDIR");
2629 prt_hex(pri
, 0, val
);
2633 * Print AT_SYMLINK_NOFOLLOW / AT_SYMLINK_FOLLOW flag
2636 prt_snf(private_t
*pri
, int raw
, long val
)
2639 outstring(pri
, "0");
2640 else if (!raw
&& val
== AT_SYMLINK_NOFOLLOW
)
2641 outstring(pri
, "AT_SYMLINK_NOFOLLOW");
2642 else if (!raw
&& val
== AT_SYMLINK_FOLLOW
)
2643 outstring(pri
, "AT_SYMLINK_FOLLOW");
2645 prt_hex(pri
, 0, val
);
2649 prt_grf(private_t
*pri
, int raw
, long val
)
2653 if (raw
!= 0 || val
== 0 ||
2654 (val
& ~(GRND_NONBLOCK
| GRND_RANDOM
)) != 0) {
2655 outstring(pri
, "0");
2659 if (val
& GRND_NONBLOCK
) {
2660 outstring(pri
, "|GRND_NONBLOCK" + first
);
2663 if (val
& GRND_RANDOM
) {
2664 outstring(pri
, "|GRND_RANDOM" + first
);
2670 * Array of pointers to print functions, one for each format.
2672 void (* const Print
[])() = {
2673 prt_nov
, /* NOV -- no value */
2674 prt_dec
, /* DEC -- print value in decimal */
2675 prt_oct
, /* OCT -- print value in octal */
2676 prt_hex
, /* HEX -- print value in hexadecimal */
2677 prt_dex
, /* DEX -- print value in hexadecimal if big enough */
2678 prt_stg
, /* STG -- print value as string */
2679 prt_ioc
, /* IOC -- print ioctl code */
2680 prt_fcn
, /* FCN -- print fcntl code */
2681 prt_s86
, /* S86 -- print sysi86 code */
2682 prt_uts
, /* UTS -- print utssys code */
2683 prt_opn
, /* OPN -- print open code */
2684 prt_sig
, /* SIG -- print signal name plus flags */
2685 prt_uat
, /* UAT -- print unlinkat() flag */
2686 prt_msc
, /* MSC -- print msgsys command */
2687 prt_msf
, /* MSF -- print msgsys flags */
2688 prt_smc
, /* SMC -- print semsys command */
2689 prt_sef
, /* SEF -- print semsys flags */
2690 prt_shc
, /* SHC -- print shmsys command */
2691 prt_shf
, /* SHF -- print shmsys flags */
2692 prt_fat
, /* FAT -- print faccessat( flag */
2693 prt_sfs
, /* SFS -- print sysfs code */
2694 prt_rst
, /* RST -- print string returned by syscall */
2695 prt_smf
, /* SMF -- print streams message flags */
2696 prt_ioa
, /* IOA -- print ioctl argument */
2697 prt_pip
, /* PIP -- print pipe flags */
2698 prt_mtf
, /* MTF -- print mount flags */
2699 prt_mft
, /* MFT -- print mount file system type */
2700 prt_iob
, /* IOB -- print contents of I/O buffer */
2701 prt_hhx
, /* HHX -- print value in hexadecimal (half size) */
2702 prt_wop
, /* WOP -- print waitsys() options */
2703 prt_spm
, /* SPM -- print sigprocmask argument */
2704 prt_rlk
, /* RLK -- print readlink buffer */
2705 prt_mpr
, /* MPR -- print mmap()/mprotect() flags */
2706 prt_mty
, /* MTY -- print mmap() mapping type flags */
2707 prt_mcf
, /* MCF -- print memcntl() function */
2708 prt_mc4
, /* MC4 -- print memcntl() (fourth) argument */
2709 prt_mc5
, /* MC5 -- print memcntl() (fifth) argument */
2710 prt_mad
, /* MAD -- print madvise() argument */
2711 prt_ulm
, /* ULM -- print ulimit() argument */
2712 prt_rlm
, /* RLM -- print get/setrlimit() argument */
2713 prt_cnf
, /* CNF -- print sysconfig() argument */
2714 prt_inf
, /* INF -- print sysinfo() argument */
2715 prt_ptc
, /* PTC -- print pathconf/fpathconf() argument */
2716 prt_fui
, /* FUI -- print fusers() input argument */
2717 prt_idt
, /* IDT -- print idtype_t, waitid() argument */
2718 prt_lwf
, /* LWF -- print lwp_create() flags */
2719 prt_itm
, /* ITM -- print [get|set]itimer() arg */
2720 prt_llo
, /* LLO -- print long long offset arg */
2721 prt_mod
, /* MOD -- print modctl() subcode */
2722 prt_whn
, /* WHN -- print lseek() whence arguiment */
2723 prt_acl
, /* ACL -- print acl() code */
2724 prt_aio
, /* AIO -- print kaio() code */
2725 prt_uns
, /* DEC -- print value in unsigned decimal */
2726 prt_cor
, /* COR -- print corectl() subcode */
2727 prt_cco
, /* CCO -- print corectl() options */
2728 prt_ccc
, /* CCC -- print corectl() content */
2729 prt_rcc
, /* RCC -- print corectl() returned content */
2730 prt_cpc
, /* CPC -- print cpc() subcode */
2731 prt_sqc
, /* SQC -- print sigqueue() si_code argument */
2732 prt_pc4
, /* PC4 -- print priocntlsys() (fourth) argument */
2733 prt_pc5
, /* PC5 -- print priocntlsys() (key, value) pairs */
2734 prt_pst
, /* PST -- print processor set id */
2735 prt_mif
, /* MIF -- print meminfo() arguments */
2736 prt_pfm
, /* PFM -- print so_socket() proto-family (1st) arg */
2737 prt_skt
, /* SKT -- print so_socket() socket-type (2nd) arg */
2738 prt_skp
, /* SKP -- print so_socket() protocol (3rd) arg */
2739 prt_sol
, /* SOL -- print [sg]etsockopt() level (2nd) arg */
2740 prt_son
, /* SON -- print [sg]etsockopt() opt-name (3rd) arg */
2741 prt_utt
, /* UTT -- print utrap type */
2742 prt_uth
, /* UTH -- print utrap handler */
2743 prt_acc
, /* ACC -- print access() flags */
2744 prt_sht
, /* SHT -- print shutdown() how (2nd) argument */
2745 prt_ffg
, /* FFG -- print fcntl() flags (3rd) argument */
2746 prt_prs
, /* PRS -- print privilege set */
2747 prt_pro
, /* PRO -- print privilege set operation */
2748 prt_prn
, /* PRN -- print privilege set name */
2749 prt_pfl
, /* PFL -- print privilege/process flag name */
2750 prt_laf
, /* LAF -- print lgrp_affinity arguments */
2751 prt_key
, /* KEY -- print key_t 0 as IPC_PRIVATE */
2752 prt_zga
, /* ZGA -- print zone_getattr attribute types */
2753 prt_atc
, /* ATC -- print AT_FDCWD or file descriptor */
2754 prt_lio
, /* LIO -- print LIO_XX flags */
2755 prt_dfl
, /* DFL -- print door_create() flags */
2756 prt_dpm
, /* DPM -- print DOOR_PARAM_XX flags */
2757 prt_rsc
, /* RSC -- print rctlsys() subcodes */
2758 prt_rgf
, /* RGF -- print getrctl() flags */
2759 prt_rsf
, /* RSF -- print setrctl() flags */
2760 prt_rcf
, /* RCF -- print rctlsys_ctl() flags */
2761 prt_fxf
, /* FXF -- print forkx() flags */
2762 prt_spf
, /* SPF -- print rctlsys_projset() flags */
2763 prt_un1
, /* UN1 -- as prt_uns except for -1 */
2764 prt_mob
, /* MOB -- print mmapobj() flags */
2765 prt_snf
, /* SNF -- print AT_SYMLINK_[NO]FOLLOW flag */
2766 prt_skc
, /* SKC -- print sockconfig() subcode */
2767 prt_acf
, /* ACF -- print accept4 flags */
2768 prt_pfd
, /* PFD -- print pipe fds */
2769 prt_grf
, /* GRF -- print getrandom flags */
2770 prt_psdelta
, /* PSDLT -- print psecflags(2) delta */
2771 prt_psfw
, /* PSFW -- print psecflags(2) set */
2772 prt_dec
, /* HID -- hidden argument, make this the last one */