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 2010 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
27 * Copyright 2012 DEY Storage Systems, Inc. All rights reserved.
28 * Copyright 2016 Joyent, Inc.
32 * String conversion routines the system structs found in
33 * Solaris core file note sections. These items are not
34 * ELF constructs. However, elfdump contains code for decoding
35 * them, and therefore requires formatting support.
39 #include <sys/corectl.h>
40 #include <sys/secflags.h>
43 #include <corenote_msg.h>
46 conv_cnote_type(Word type
, Conv_fmt_flags_t fmt_flags
,
47 Conv_inv_buf_t
*inv_buf
)
49 static const Msg types
[] = {
50 MSG_NT_PRSTATUS
, MSG_NT_PRFPREG
,
51 MSG_NT_PRPSINFO
, MSG_NT_PRXREG
,
52 MSG_NT_PLATFORM
, MSG_NT_AUXV
,
53 MSG_NT_GWINDOWS
, MSG_NT_ASRS
,
54 MSG_NT_LDT
, MSG_NT_PSTATUS
,
56 MSG_NT_PSINFO
, MSG_NT_PRCRED
,
57 MSG_NT_UTSNAME
, MSG_NT_LWPSTATUS
,
58 MSG_NT_LWPSINFO
, MSG_NT_PRPRIV
,
59 MSG_NT_PRPRIVINFO
, MSG_NT_CONTENT
,
60 MSG_NT_ZONENAME
, MSG_NT_FDINFO
,
61 MSG_NT_SPYMASTER
, MSG_NT_SECFLAGS
63 #if NT_NUM != NT_SECFLAGS
64 #error "NT_NUM has grown. Update core note types[]"
66 static const conv_ds_msg_t ds_types
= {
67 CONV_DS_MSG_INIT(NT_PRSTATUS
, types
) };
68 static const conv_ds_t
*ds
[] = { CONV_DS_ADDR(ds_types
), NULL
};
71 return (conv_map_ds(ELFOSABI_NONE
, EM_NONE
, type
, ds
, fmt_flags
,
77 conv_cnote_auxv_type(Word type
, Conv_fmt_flags_t fmt_flags
,
78 Conv_inv_buf_t
*inv_buf
)
80 static const Msg types_0_22
[] = {
81 MSG_AUXV_AT_NULL
, MSG_AUXV_AT_IGNORE
,
82 MSG_AUXV_AT_EXECFD
, MSG_AUXV_AT_PHDR
,
83 MSG_AUXV_AT_PHENT
, MSG_AUXV_AT_PHNUM
,
84 MSG_AUXV_AT_PAGESZ
, MSG_AUXV_AT_BASE
,
85 MSG_AUXV_AT_FLAGS
, MSG_AUXV_AT_ENTRY
,
86 MSG_AUXV_AT_NOTELF
, MSG_AUXV_AT_UID
,
87 MSG_AUXV_AT_EUID
, MSG_AUXV_AT_GID
,
88 MSG_AUXV_AT_EGID
, MSG_AUXV_AT_PLATFORM
,
89 MSG_AUXV_AT_HWCAP
, MSG_AUXV_AT_CLKTCK
,
90 MSG_AUXV_AT_FPUCW
, MSG_AUXV_AT_DCACHEBSIZE
,
91 MSG_AUXV_AT_ICACHEBSIZE
, MSG_AUXV_AT_UCACHEBSIZE
,
94 static const conv_ds_msg_t ds_types_0_22
= {
95 CONV_DS_MSG_INIT(0, types_0_22
) };
97 static const Msg types_2000_2011
[] = {
98 MSG_AUXV_AT_SUN_UID
, MSG_AUXV_AT_SUN_RUID
,
99 MSG_AUXV_AT_SUN_GID
, MSG_AUXV_AT_SUN_RGID
,
100 MSG_AUXV_AT_SUN_LDELF
, MSG_AUXV_AT_SUN_LDSHDR
,
101 MSG_AUXV_AT_SUN_LDNAME
, MSG_AUXV_AT_SUN_LPAGESZ
,
102 MSG_AUXV_AT_SUN_PLATFORM
, MSG_AUXV_AT_SUN_HWCAP
,
103 MSG_AUXV_AT_SUN_IFLUSH
, MSG_AUXV_AT_SUN_CPU
105 static const conv_ds_msg_t ds_types_2000_2011
= {
106 CONV_DS_MSG_INIT(2000, types_2000_2011
) };
108 static const Msg types_2014_2024
[] = {
109 MSG_AUXV_AT_SUN_EXECNAME
, MSG_AUXV_AT_SUN_MMU
,
110 MSG_AUXV_AT_SUN_LDDATA
, MSG_AUXV_AT_SUN_AUXFLAGS
,
111 MSG_AUXV_AT_SUN_EMULATOR
, MSG_AUXV_AT_SUN_BRANDNAME
,
112 MSG_AUXV_AT_SUN_BRAND_AUX1
, MSG_AUXV_AT_SUN_BRAND_AUX2
,
113 MSG_AUXV_AT_SUN_BRAND_AUX3
, MSG_AUXV_AT_SUN_HWCAP2
,
114 MSG_AUXV_AT_SUN_COMMPAGE
116 static const conv_ds_msg_t ds_types_2014_2024
= {
117 CONV_DS_MSG_INIT(2014, types_2014_2024
) };
119 static const conv_ds_t
*ds
[] = {
120 CONV_DS_ADDR(ds_types_0_22
), CONV_DS_ADDR(ds_types_2000_2011
),
121 CONV_DS_ADDR(ds_types_2014_2024
), NULL
};
123 return (conv_map_ds(ELFOSABI_NONE
, EM_NONE
, type
, ds
, fmt_flags
,
129 conv_cnote_signal(Word sig
, Conv_fmt_flags_t fmt_flags
,
130 Conv_inv_buf_t
*inv_buf
)
132 static const Msg sigarr
[] = {
133 MSG_SIGHUP
, MSG_SIGINT
,
134 MSG_SIGQUIT
, MSG_SIGILL
,
135 MSG_SIGTRAP
, MSG_SIGABRT
,
136 MSG_SIGEMT
, MSG_SIGFPE
,
137 MSG_SIGKILL
, MSG_SIGBUS
,
138 MSG_SIGSEGV
, MSG_SIGSYS
,
139 MSG_SIGPIPE
, MSG_SIGALRM
,
140 MSG_SIGTERM
, MSG_SIGUSR1
,
141 MSG_SIGUSR2
, MSG_SIGCHLD
,
142 MSG_SIGPWR
, MSG_SIGWINCH
,
143 MSG_SIGURG
, MSG_SIGPOLL
,
144 MSG_SIGSTOP
, MSG_SIGTSTP
,
145 MSG_SIGCONT
, MSG_SIGTTIN
,
146 MSG_SIGTTOU
, MSG_SIGVTALRM
,
147 MSG_SIGPROF
, MSG_SIGXCPU
,
148 MSG_SIGXFSZ
, MSG_SIGWAITING
,
149 MSG_SIGLWP
, MSG_SIGFREEZE
,
150 MSG_SIGTHAW
, MSG_SIGCANCEL
,
151 MSG_SIGLOST
, MSG_SIGXRES
,
152 MSG_SIGJVM1
, MSG_SIGJVM2
,
154 static const conv_ds_msg_t ds_sigarr
= {
155 CONV_DS_MSG_INIT(SIGHUP
, sigarr
) };
157 static const conv_ds_t
*ds
[] = { CONV_DS_ADDR(ds_sigarr
), NULL
};
159 return (conv_map_ds(ELFOSABI_NONE
, EM_NONE
, sig
, ds
, fmt_flags
,
165 conv_cnote_fault(Word flt
, Conv_fmt_flags_t fmt_flags
,
166 Conv_inv_buf_t
*inv_buf
)
168 static const Msg fltarr
[] = {
169 MSG_FLTILL
, MSG_FLTPRIV
,
170 MSG_FLTBPT
, MSG_FLTTRACE
,
171 MSG_FLTACCESS
, MSG_FLTBOUNDS
,
172 MSG_FLTIOVF
, MSG_FLTIZDIV
,
173 MSG_FLTFPE
, MSG_FLTSTACK
,
174 MSG_FLTPAGE
, MSG_FLTWATCH
,
178 static const conv_ds_msg_t ds_fltarr
= {
179 CONV_DS_MSG_INIT(FLTILL
, fltarr
) };
181 static const conv_ds_t
*ds
[] = { CONV_DS_ADDR(ds_fltarr
), NULL
};
183 return (conv_map_ds(ELFOSABI_NONE
, EM_NONE
, flt
, ds
, fmt_flags
,
189 conv_cnote_syscall(Word sysnum
, Conv_fmt_flags_t fmt_flags
,
190 Conv_inv_buf_t
*inv_buf
)
192 static const Msg sysnumarr
[] = {
193 MSG_SYS_EXIT
, MSG_SYS_2
,
194 MSG_SYS_READ
, MSG_SYS_WRITE
,
195 MSG_SYS_OPEN
, MSG_SYS_CLOSE
,
196 MSG_SYS_7
, MSG_SYS_8
,
197 MSG_SYS_LINK
, MSG_SYS_UNLINK
,
198 MSG_SYS_11
, MSG_SYS_CHDIR
,
199 MSG_SYS_TIME
, MSG_SYS_MKNOD
,
200 MSG_SYS_CHMOD
, MSG_SYS_CHOWN
,
201 MSG_SYS_BRK
, MSG_SYS_STAT
,
202 MSG_SYS_LSEEK
, MSG_SYS_GETPID
,
203 MSG_SYS_MOUNT
, MSG_SYS_22
,
204 MSG_SYS_SETUID
, MSG_SYS_GETUID
,
205 MSG_SYS_STIME
, MSG_SYS_PCSAMPLE
,
206 MSG_SYS_ALARM
, MSG_SYS_FSTAT
,
207 MSG_SYS_PAUSE
, MSG_SYS_30
,
208 MSG_SYS_STTY
, MSG_SYS_GTTY
,
209 MSG_SYS_ACCESS
, MSG_SYS_NICE
,
210 MSG_SYS_STATFS
, MSG_SYS_SYNC
,
211 MSG_SYS_KILL
, MSG_SYS_FSTATFS
,
212 MSG_SYS_PGRPSYS
, MSG_SYS_UUCOPYSTR
,
213 MSG_SYS_41
, MSG_SYS_PIPE
,
214 MSG_SYS_TIMES
, MSG_SYS_PROFIL
,
215 MSG_SYS_FACCESSAT
, MSG_SYS_SETGID
,
216 MSG_SYS_GETGID
, MSG_SYS_48
,
217 MSG_SYS_MSGSYS
, MSG_SYS_SYSI86
,
218 MSG_SYS_ACCT
, MSG_SYS_SHMSYS
,
219 MSG_SYS_SEMSYS
, MSG_SYS_IOCTL
,
220 MSG_SYS_UADMIN
, MSG_SYS_FCHOWNAT
,
221 MSG_SYS_UTSSYS
, MSG_SYS_FDSYNC
,
222 MSG_SYS_EXECVE
, MSG_SYS_UMASK
,
223 MSG_SYS_CHROOT
, MSG_SYS_FCNTL
,
224 MSG_SYS_ULIMIT
, MSG_SYS_RENAMEAT
,
225 MSG_SYS_UNLINKAT
, MSG_SYS_FSTATAT
,
226 MSG_SYS_FSTATAT64
, MSG_SYS_OPENAT
,
227 MSG_SYS_OPENAT64
, MSG_SYS_TASKSYS
,
228 MSG_SYS_ACCTCTL
, MSG_SYS_EXACCTSYS
,
229 MSG_SYS_GETPAGESIZES
, MSG_SYS_RCTLSYS
,
230 MSG_SYS_SIDSYS
, MSG_SYS_76
,
231 MSG_SYS_LWP_PARK
, MSG_SYS_SENDFILEV
,
232 MSG_SYS_RMDIR
, MSG_SYS_MKDIR
,
233 MSG_SYS_GETDENTS
, MSG_SYS_PRIVSYS
,
234 MSG_SYS_UCREDSYS
, MSG_SYS_SYSFS
,
235 MSG_SYS_GETMSG
, MSG_SYS_PUTMSG
,
236 MSG_SYS_87
, MSG_SYS_LSTAT
,
237 MSG_SYS_SYMLINK
, MSG_SYS_READLINK
,
238 MSG_SYS_SETGROUPS
, MSG_SYS_GETGROUPS
,
239 MSG_SYS_FCHMOD
, MSG_SYS_FCHOWN
,
240 MSG_SYS_SIGPROCMASK
, MSG_SYS_SIGSUSPEND
,
241 MSG_SYS_SIGALTSTACK
, MSG_SYS_SIGACTION
,
242 MSG_SYS_SIGPENDING
, MSG_SYS_CONTEXT
,
243 MSG_SYS_101
, MSG_SYS_102
,
244 MSG_SYS_STATVFS
, MSG_SYS_FSTATVFS
,
245 MSG_SYS_GETLOADAVG
, MSG_SYS_NFSSYS
,
246 MSG_SYS_WAITID
, MSG_SYS_SIGSENDSYS
,
247 MSG_SYS_HRTSYS
, MSG_SYS_UTIMESYS
,
248 MSG_SYS_SIGRESEND
, MSG_SYS_PRIOCNTLSYS
,
249 MSG_SYS_PATHCONF
, MSG_SYS_MINCORE
,
250 MSG_SYS_MMAP
, MSG_SYS_MPROTECT
,
251 MSG_SYS_MUNMAP
, MSG_SYS_FPATHCONF
,
252 MSG_SYS_VFORK
, MSG_SYS_FCHDIR
,
253 MSG_SYS_READV
, MSG_SYS_WRITEV
,
254 MSG_SYS_123
, MSG_SYS_124
,
255 MSG_SYS_125
, MSG_SYS_126
,
256 MSG_SYS_MMAPOBJ
, MSG_SYS_SETRLIMIT
,
257 MSG_SYS_GETRLIMIT
, MSG_SYS_LCHOWN
,
258 MSG_SYS_MEMCNTL
, MSG_SYS_GETPMSG
,
259 MSG_SYS_PUTPMSG
, MSG_SYS_RENAME
,
260 MSG_SYS_UNAME
, MSG_SYS_SETEGID
,
261 MSG_SYS_SYSCONFIG
, MSG_SYS_ADJTIME
,
262 MSG_SYS_SYSTEMINFO
, MSG_SYS_SHAREFS
,
263 MSG_SYS_SETEUID
, MSG_SYS_FORKSYS
,
264 MSG_SYS_143
, MSG_SYS_SIGTIMEDWAIT
,
265 MSG_SYS_LWP_INFO
, MSG_SYS_YIELD
,
266 MSG_SYS_147
, MSG_SYS_LWP_SEMA_POST
,
267 MSG_SYS_LWP_SEMA_TRYWAIT
, MSG_SYS_LWP_DETACH
,
268 MSG_SYS_CORECTL
, MSG_SYS_MODCTL
,
269 MSG_SYS_FCHROOT
, MSG_SYS_154
,
270 MSG_SYS_VHANGUP
, MSG_SYS_GETTIMEOFDAY
,
271 MSG_SYS_GETITIMER
, MSG_SYS_SETITIMER
,
272 MSG_SYS_LWP_CREATE
, MSG_SYS_LWP_EXIT
,
273 MSG_SYS_LWP_SUSPEND
, MSG_SYS_LWP_CONTINUE
,
274 MSG_SYS_LWP_KILL
, MSG_SYS_LWP_SELF
,
275 MSG_SYS_LWP_SIGMASK
, MSG_SYS_LWP_PRIVATE
,
276 MSG_SYS_LWP_WAIT
, MSG_SYS_LWP_MUTEX_WAKEUP
,
277 MSG_SYS_169
, MSG_SYS_LWP_COND_WAIT
,
278 MSG_SYS_LWP_COND_SIGNAL
, MSG_SYS_LWP_COND_BROADCAST
,
279 MSG_SYS_PREAD
, MSG_SYS_PWRITE
,
280 MSG_SYS_LLSEEK
, MSG_SYS_INST_SYNC
,
281 MSG_SYS_BRAND
, MSG_SYS_KAIO
,
282 MSG_SYS_CPC
, MSG_SYS_LGRPSYS
,
283 MSG_SYS_RUSAGESYS
, MSG_SYS_PORT
,
284 MSG_SYS_POLLSYS
, MSG_SYS_LABELSYS
,
285 MSG_SYS_ACL
, MSG_SYS_AUDITSYS
,
286 MSG_SYS_PROCESSOR_BIND
, MSG_SYS_PROCESSOR_INFO
,
287 MSG_SYS_P_ONLINE
, MSG_SYS_SIGQUEUE
,
288 MSG_SYS_CLOCK_GETTIME
, MSG_SYS_CLOCK_SETTIME
,
289 MSG_SYS_CLOCK_GETRES
, MSG_SYS_TIMER_CREATE
,
290 MSG_SYS_TIMER_DELETE
, MSG_SYS_TIMER_SETTIME
,
291 MSG_SYS_TIMER_GETTIME
, MSG_SYS_TIMER_GETOVERRUN
,
292 MSG_SYS_NANOSLEEP
, MSG_SYS_FACL
,
293 MSG_SYS_DOOR
, MSG_SYS_SETREUID
,
294 MSG_SYS_SETREGID
, MSG_SYS_INSTALL_UTRAP
,
295 MSG_SYS_SIGNOTIFY
, MSG_SYS_SCHEDCTL
,
296 MSG_SYS_PSET
, MSG_SYS_SPARC_UTRAP_INSTALL
,
297 MSG_SYS_RESOLVEPATH
, MSG_SYS_LWP_MUTEX_TIMEDLOCK
,
298 MSG_SYS_LWP_SEMA_TIMEDWAIT
, MSG_SYS_LWP_RWLOCK_SYS
,
299 MSG_SYS_GETDENTS64
, MSG_SYS_MMAP64
,
300 MSG_SYS_STAT64
, MSG_SYS_LSTAT64
,
301 MSG_SYS_FSTAT64
, MSG_SYS_STATVFS64
,
302 MSG_SYS_FSTATVFS64
, MSG_SYS_SETRLIMIT64
,
303 MSG_SYS_GETRLIMIT64
, MSG_SYS_PREAD64
,
304 MSG_SYS_PWRITE64
, MSG_SYS_224
,
305 MSG_SYS_OPEN64
, MSG_SYS_RPCSYS
,
306 MSG_SYS_ZONE
, MSG_SYS_AUTOFSSYS
,
307 MSG_SYS_GETCWD
, MSG_SYS_SO_SOCKET
,
308 MSG_SYS_SO_SOCKETPAIR
, MSG_SYS_BIND
,
309 MSG_SYS_LISTEN
, MSG_SYS_ACCEPT
,
310 MSG_SYS_CONNECT
, MSG_SYS_SHUTDOWN
,
311 MSG_SYS_RECV
, MSG_SYS_RECVFROM
,
312 MSG_SYS_RECVMSG
, MSG_SYS_SEND
,
313 MSG_SYS_SENDMSG
, MSG_SYS_SENDTO
,
314 MSG_SYS_GETPEERNAME
, MSG_SYS_GETSOCKNAME
,
315 MSG_SYS_GETSOCKOPT
, MSG_SYS_SETSOCKOPT
,
316 MSG_SYS_SOCKCONFIG
, MSG_SYS_NTP_GETTIME
,
317 MSG_SYS_NTP_ADJTIME
, MSG_SYS_LWP_MUTEX_UNLOCK
,
318 MSG_SYS_LWP_MUTEX_TRYLOCK
, MSG_SYS_LWP_MUTEX_REGISTER
,
319 MSG_SYS_CLADM
, MSG_SYS_UUCOPY
,
322 static const conv_ds_msg_t ds_sysnumarr
= {
323 CONV_DS_MSG_INIT(1, sysnumarr
) };
325 static const conv_ds_t
*ds
[] = { CONV_DS_ADDR(ds_sysnumarr
), NULL
};
330 * Range check, and handle the unused values in the middle
331 * of the range. Although the missing values have strings,
332 * we still prefer to format them, because those strings are
333 * decimal, and the default behavior, unless the CONV_FMT_DECIMAL
334 * flag is set, is to display such things in hex.
362 use_num
= (sysnum
> SYS_umount2
);
366 return (conv_invalid_val(inv_buf
, sysnum
, fmt_flags
));
368 return (conv_map_ds(ELFOSABI_NONE
, EM_NONE
, sysnum
, ds
, fmt_flags
,
374 conv_cnote_errno(int errno_val
, Conv_fmt_flags_t fmt_flags
,
375 Conv_inv_buf_t
*inv_buf
)
377 static const Msg errarr_1_74
[74] = {
378 MSG_ERRNO_EPERM
, MSG_ERRNO_ENOENT
,
379 MSG_ERRNO_ESRCH
, MSG_ERRNO_EINTR
,
380 MSG_ERRNO_EIO
, MSG_ERRNO_ENXIO
,
381 MSG_ERRNO_E2BIG
, MSG_ERRNO_ENOEXEC
,
382 MSG_ERRNO_EBADF
, MSG_ERRNO_ECHILD
,
383 MSG_ERRNO_EAGAIN
, MSG_ERRNO_ENOMEM
,
384 MSG_ERRNO_EACCES
, MSG_ERRNO_EFAULT
,
385 MSG_ERRNO_ENOTBLK
, MSG_ERRNO_EBUSY
,
386 MSG_ERRNO_EEXIST
, MSG_ERRNO_EXDEV
,
387 MSG_ERRNO_ENODEV
, MSG_ERRNO_ENOTDIR
,
388 MSG_ERRNO_EISDIR
, MSG_ERRNO_EINVAL
,
389 MSG_ERRNO_ENFILE
, MSG_ERRNO_EMFILE
,
390 MSG_ERRNO_ENOTTY
, MSG_ERRNO_ETXTBSY
,
391 MSG_ERRNO_EFBIG
, MSG_ERRNO_ENOSPC
,
392 MSG_ERRNO_ESPIPE
, MSG_ERRNO_EROFS
,
393 MSG_ERRNO_EMLINK
, MSG_ERRNO_EPIPE
,
394 MSG_ERRNO_EDOM
, MSG_ERRNO_ERANGE
,
395 MSG_ERRNO_ENOMSG
, MSG_ERRNO_EIDRM
,
396 MSG_ERRNO_ECHRNG
, MSG_ERRNO_EL2NSYNC
,
397 MSG_ERRNO_EL3HLT
, MSG_ERRNO_EL3RST
,
398 MSG_ERRNO_ELNRNG
, MSG_ERRNO_EUNATCH
,
399 MSG_ERRNO_ENOCSI
, MSG_ERRNO_EL2HLT
,
400 MSG_ERRNO_EDEADLK
, MSG_ERRNO_ENOLCK
,
401 MSG_ERRNO_ECANCELED
, MSG_ERRNO_ENOTSUP
,
402 MSG_ERRNO_EDQUOT
, MSG_ERRNO_EBADE
,
403 MSG_ERRNO_EBADR
, MSG_ERRNO_EXFULL
,
404 MSG_ERRNO_ENOANO
, MSG_ERRNO_EBADRQC
,
405 MSG_ERRNO_EBADSLT
, MSG_ERRNO_EDEADLOCK
,
406 MSG_ERRNO_EBFONT
, MSG_ERRNO_EOWNERDEAD
,
407 MSG_ERRNO_ENOTRECOVERABLE
, MSG_ERRNO_ENOSTR
,
408 MSG_ERRNO_ENODATA
, MSG_ERRNO_ETIME
,
409 MSG_ERRNO_ENOSR
, MSG_ERRNO_ENONET
,
410 MSG_ERRNO_ENOPKG
, MSG_ERRNO_EREMOTE
,
411 MSG_ERRNO_ENOLINK
, MSG_ERRNO_EADV
,
412 MSG_ERRNO_ESRMNT
, MSG_ERRNO_ECOMM
,
413 MSG_ERRNO_EPROTO
, MSG_ERRNO_ELOCKUNMAPPED
,
414 MSG_ERRNO_ENOTACTIVE
, MSG_ERRNO_EMULTIHOP
416 static const conv_ds_msg_t ds_errarr_1_74
= {
417 CONV_DS_MSG_INIT(1, errarr_1_74
) };
419 static const Msg errarr_77_99
[23] = {
420 MSG_ERRNO_EBADMSG
, MSG_ERRNO_ENAMETOOLONG
,
421 MSG_ERRNO_EOVERFLOW
, MSG_ERRNO_ENOTUNIQ
,
422 MSG_ERRNO_EBADFD
, MSG_ERRNO_EREMCHG
,
423 MSG_ERRNO_ELIBACC
, MSG_ERRNO_ELIBBAD
,
424 MSG_ERRNO_ELIBSCN
, MSG_ERRNO_ELIBMAX
,
425 MSG_ERRNO_ELIBEXEC
, MSG_ERRNO_EILSEQ
,
426 MSG_ERRNO_ENOSYS
, MSG_ERRNO_ELOOP
,
427 MSG_ERRNO_ERESTART
, MSG_ERRNO_ESTRPIPE
,
428 MSG_ERRNO_ENOTEMPTY
, MSG_ERRNO_EUSERS
,
429 MSG_ERRNO_ENOTSOCK
, MSG_ERRNO_EDESTADDRREQ
,
430 MSG_ERRNO_EMSGSIZE
, MSG_ERRNO_EPROTOTYPE
,
431 MSG_ERRNO_ENOPROTOOPT
433 static const conv_ds_msg_t ds_errarr_77_99
= {
434 CONV_DS_MSG_INIT(77, errarr_77_99
) };
436 static const Msg errarr_120_134
[15] = {
437 MSG_ERRNO_EPROTONOSUPPORT
, MSG_ERRNO_ESOCKTNOSUPPORT
,
438 MSG_ERRNO_EOPNOTSUPP
, MSG_ERRNO_EPFNOSUPPORT
,
439 MSG_ERRNO_EAFNOSUPPORT
, MSG_ERRNO_EADDRINUSE
,
440 MSG_ERRNO_EADDRNOTAVAIL
, MSG_ERRNO_ENETDOWN
,
441 MSG_ERRNO_ENETUNREACH
, MSG_ERRNO_ENETRESET
,
442 MSG_ERRNO_ECONNABORTED
, MSG_ERRNO_ECONNRESET
,
443 MSG_ERRNO_ENOBUFS
, MSG_ERRNO_EISCONN
,
446 static const conv_ds_msg_t ds_errarr_120_134
= {
447 CONV_DS_MSG_INIT(120, errarr_120_134
) };
449 static const Msg errarr_143_151
[9] = {
450 MSG_ERRNO_ESHUTDOWN
, MSG_ERRNO_ETOOMANYREFS
,
451 MSG_ERRNO_ETIMEDOUT
, MSG_ERRNO_ECONNREFUSED
,
452 MSG_ERRNO_EHOSTDOWN
, MSG_ERRNO_EHOSTUNREACH
,
453 MSG_ERRNO_EALREADY
, MSG_ERRNO_EINPROGRESS
,
456 static const conv_ds_msg_t ds_errarr_143_151
= {
457 CONV_DS_MSG_INIT(143, errarr_143_151
) };
459 static const conv_ds_t
*ds
[] = { CONV_DS_ADDR(ds_errarr_1_74
),
460 CONV_DS_ADDR(ds_errarr_77_99
), CONV_DS_ADDR(ds_errarr_120_134
),
461 CONV_DS_ADDR(ds_errarr_143_151
), NULL
};
464 return (conv_map_ds(ELFOSABI_NONE
, EM_NONE
, errno_val
, ds
, fmt_flags
,
470 conv_cnote_pr_dmodel(Word dmodel
, Conv_fmt_flags_t fmt_flags
,
471 Conv_inv_buf_t
*inv_buf
)
473 static const Msg models
[] = {
474 MSG_PR_MODEL_UNKNOWN
,
478 static const conv_ds_msg_t ds_models
= {
479 CONV_DS_MSG_INIT(PR_MODEL_UNKNOWN
, models
) };
480 static const conv_ds_t
*ds
[] = { CONV_DS_ADDR(ds_models
), NULL
};
482 return (conv_map_ds(ELFOSABI_NONE
, EM_NONE
, dmodel
, ds
, fmt_flags
,
488 conv_cnote_pr_why(short why
, Conv_fmt_flags_t fmt_flags
,
489 Conv_inv_buf_t
*inv_buf
)
491 static const Msg why_arr
[] = {
492 MSG_PR_WHY_REQUESTED
,
493 MSG_PR_WHY_SIGNALLED
,
496 MSG_PR_WHY_JOBCONTROL
,
498 MSG_PR_WHY_SUSPENDED
,
499 MSG_PR_WHY_CHECKPOINT
501 static const conv_ds_msg_t ds_why_arr
= {
502 CONV_DS_MSG_INIT(1, why_arr
) };
503 static const conv_ds_t
*ds
[] = { CONV_DS_ADDR(ds_why_arr
), NULL
};
505 return (conv_map_ds(ELFOSABI_NONE
, EM_NONE
, why
, ds
, fmt_flags
,
511 conv_cnote_pr_what(short why
, short what
, Conv_fmt_flags_t fmt_flags
,
512 Conv_inv_buf_t
*inv_buf
)
515 * The meaning of pr_what depends on the corresponding
516 * value of pr_why, as discussed in the proc(4) manpage.
521 return (conv_cnote_signal(what
, fmt_flags
, inv_buf
));
524 return (conv_cnote_syscall(what
, fmt_flags
, inv_buf
));
526 return (conv_cnote_fault(what
, fmt_flags
, inv_buf
));
529 return (conv_invalid_val(inv_buf
, what
, fmt_flags
));
534 * Return the name of the general purpose register indexed by
535 * regno in the pr_reg array of lwpstatus_t (<sys/procfs.h>).
538 conv_cnote_pr_regname(Half mach
, int regno
, Conv_fmt_flags_t fmt_flags
,
539 Conv_inv_buf_t
*inv_buf
)
541 static const Msg sparc_gen_reg
[32] = {
542 MSG_REG_SPARC_G0
, MSG_REG_SPARC_G1
,
543 MSG_REG_SPARC_G2
, MSG_REG_SPARC_G3
,
544 MSG_REG_SPARC_G4
, MSG_REG_SPARC_G5
,
545 MSG_REG_SPARC_G6
, MSG_REG_SPARC_G7
,
546 MSG_REG_SPARC_O0
, MSG_REG_SPARC_O1
,
547 MSG_REG_SPARC_O2
, MSG_REG_SPARC_O3
,
548 MSG_REG_SPARC_O4
, MSG_REG_SPARC_O5
,
549 MSG_REG_SPARC_O6
, MSG_REG_SPARC_O7
,
550 MSG_REG_SPARC_L0
, MSG_REG_SPARC_L1
,
551 MSG_REG_SPARC_L2
, MSG_REG_SPARC_L3
,
552 MSG_REG_SPARC_L4
, MSG_REG_SPARC_L5
,
553 MSG_REG_SPARC_L6
, MSG_REG_SPARC_L7
,
554 MSG_REG_SPARC_I0
, MSG_REG_SPARC_I1
,
555 MSG_REG_SPARC_I2
, MSG_REG_SPARC_I3
,
556 MSG_REG_SPARC_I4
, MSG_REG_SPARC_I5
,
557 MSG_REG_SPARC_I6
, MSG_REG_SPARC_I7
559 static const conv_ds_msg_t ds_sparc_gen_reg
= {
560 CONV_DS_MSG_INIT(0, sparc_gen_reg
) };
562 static const Msg sparc_32_37_reg
[6] = {
563 MSG_REG_SPARC_PSR
, MSG_REG_SPARC_PC
,
564 MSG_REG_SPARC_nPC
, MSG_REG_SPARC_Y
,
565 MSG_REG_SPARC_WIM
, MSG_REG_SPARC_TBR
567 static const conv_ds_msg_t ds_sparc_32_37_reg
= {
568 CONV_DS_MSG_INIT(32, sparc_32_37_reg
) };
570 static const Msg sparcv9_32_37_reg
[6] = {
571 MSG_REG_SPARC_CCR
, MSG_REG_SPARC_PC
,
572 MSG_REG_SPARC_nPC
, MSG_REG_SPARC_Y
,
573 MSG_REG_SPARC_ASI
, MSG_REG_SPARC_FPRS
575 static const conv_ds_msg_t ds_sparcv9_32_37_reg
= {
576 CONV_DS_MSG_INIT(32, sparcv9_32_37_reg
) };
578 static const Msg amd64_reg
[28] = {
579 MSG_REG_AMD64_R15
, MSG_REG_AMD64_R14
,
580 MSG_REG_AMD64_R13
, MSG_REG_AMD64_R12
,
581 MSG_REG_AMD64_R11
, MSG_REG_AMD64_R10
,
582 MSG_REG_AMD64_R9
, MSG_REG_AMD64_R8
,
583 MSG_REG_AMD64_RDI
, MSG_REG_AMD64_RSI
,
584 MSG_REG_AMD64_RBP
, MSG_REG_AMD64_RBX
,
585 MSG_REG_AMD64_RDX
, MSG_REG_AMD64_RCX
,
586 MSG_REG_AMD64_RAX
, MSG_REG_AMD64_TRAPNO
,
587 MSG_REG_AMD64_ERR
, MSG_REG_AMD64_RIP
,
588 MSG_REG_AMD64_CS
, MSG_REG_AMD64_RFL
,
589 MSG_REG_AMD64_RSP
, MSG_REG_AMD64_SS
,
590 MSG_REG_AMD64_FS
, MSG_REG_AMD64_GS
,
591 MSG_REG_AMD64_ES
, MSG_REG_AMD64_DS
,
592 MSG_REG_AMD64_FSBASE
, MSG_REG_AMD64_GSBASE
594 static const conv_ds_msg_t ds_amd64_reg
= {
595 CONV_DS_MSG_INIT(0, amd64_reg
) };
597 static const Msg i86_reg
[19] = {
598 MSG_REG_I86_GS
, MSG_REG_I86_FS
,
599 MSG_REG_I86_ES
, MSG_REG_I86_DS
,
600 MSG_REG_I86_EDI
, MSG_REG_I86_ESI
,
601 MSG_REG_I86_EBP
, MSG_REG_I86_ESP
,
602 MSG_REG_I86_EBX
, MSG_REG_I86_EDX
,
603 MSG_REG_I86_ECX
, MSG_REG_I86_EAX
,
604 MSG_REG_I86_TRAPNO
, MSG_REG_I86_ERR
,
605 MSG_REG_I86_EIP
, MSG_REG_I86_CS
,
606 MSG_REG_I86_EFL
, MSG_REG_I86_UESP
,
609 static const conv_ds_msg_t ds_i86_reg
= {
610 CONV_DS_MSG_INIT(0, i86_reg
) };
613 static const conv_ds_t
*ds_sparc
[] = {
614 CONV_DS_ADDR(ds_sparc_gen_reg
),
615 CONV_DS_ADDR(ds_sparc_32_37_reg
),
618 static const conv_ds_t
*ds_sparcv9
[] = {
619 CONV_DS_ADDR(ds_sparc_gen_reg
),
620 CONV_DS_ADDR(ds_sparcv9_32_37_reg
),
623 static const conv_ds_t
*ds_amd64
[] = {
624 CONV_DS_ADDR(ds_amd64_reg
), NULL
};
625 static const conv_ds_t
*ds_i86
[] = {
626 CONV_DS_ADDR(ds_i86_reg
), NULL
};
628 const conv_ds_t
**ds
;
649 return (conv_invalid_val(inv_buf
, regno
, fmt_flags
));
652 return (conv_map_ds(ELFOSABI_NONE
, mach
, regno
, ds
, fmt_flags
,
657 conv_cnote_pr_stype(Word stype
, Conv_fmt_flags_t fmt_flags
,
658 Conv_inv_buf_t
*inv_buf
)
660 static const Msg types
[] = {
661 MSG_SOBJ_NONE
, MSG_SOBJ_MUTEX
,
662 MSG_SOBJ_RWLOCK
, MSG_SOBJ_CV
,
663 MSG_SOBJ_SEMA
, MSG_SOBJ_USER
,
664 MSG_SOBJ_USER_PI
, MSG_SOBJ_SHUTTLE
666 static const conv_ds_msg_t ds_types
= { CONV_DS_MSG_INIT(0, types
) };
667 static const conv_ds_t
*ds
[] = { CONV_DS_ADDR(ds_types
), NULL
};
670 return (conv_map_ds(ELFOSABI_NONE
, EM_NONE
, stype
, ds
, fmt_flags
,
676 conv_cnote_priv(int priv
, Conv_fmt_flags_t fmt_flags
,
677 Conv_inv_buf_t
*inv_buf
)
682 * The PRIV_ constants defined in <sys/priv.h> are unusual
683 * in that they are negative values. The libconv code is all
684 * built around the Word type, which is unsigned. Rather than
685 * modify libconv for this one case, we simply handle
686 * these constants differently that the usual approach,
687 * and stay away from conv_invalid_val() and conv_map_ds().
691 return (MSG_ORIG(MSG_PRIV_ALL
));
693 return (MSG_ORIG(MSG_PRIV_MULTIPLE
));
695 return (MSG_ORIG(MSG_PRIV_NONE
));
697 return (MSG_ORIG(MSG_PRIV_ALLZONE
));
699 return (MSG_ORIG(MSG_PRIV_GLOBAL
));
702 fmt
= (fmt_flags
& CONV_FMT_DECIMAL
) ?
703 MSG_ORIG(MSG_FMT_INT
) : MSG_ORIG(MSG_FMT_HEXINT
);
704 (void) snprintf(inv_buf
->buf
, sizeof (inv_buf
->buf
), fmt
, priv
);
705 return (inv_buf
->buf
);
710 conv_cnote_psetid(int id
, Conv_fmt_flags_t fmt_flags
,
711 Conv_inv_buf_t
*inv_buf
)
716 * The PS_ constants defined in <sys/pset.h> are unusual
717 * in that they are negative values. The libconv code is all
718 * built around the Word type, which is unsigned. Rather than
719 * modify libconv for this one case, we simply handle
720 * these constants differently that the usual approach,
721 * and stay away from conv_invalid_val() and conv_map_ds().
725 return (MSG_ORIG(MSG_PS_NONE
));
727 return (MSG_ORIG(MSG_PS_QUERY
));
729 return (MSG_ORIG(MSG_PS_MYID
));
731 return (MSG_ORIG(MSG_PS_SOFT
));
733 return (MSG_ORIG(MSG_PS_HARD
));
735 return (MSG_ORIG(MSG_PS_QUERY_TYPE
));
738 fmt
= (fmt_flags
& CONV_FMT_DECIMAL
) ?
739 MSG_ORIG(MSG_FMT_INT
) : MSG_ORIG(MSG_FMT_HEXINT
);
740 (void) snprintf(inv_buf
->buf
, sizeof (inv_buf
->buf
), fmt
, id
);
741 return (inv_buf
->buf
);
746 * Return a string describing the si_code field of
747 * the siginfo_t struct.
749 * The meaning of si_code is dependent on both the target
750 * machine (mach) as well as the signal (sig).
753 conv_cnote_si_code(Half mach
, int sig
, int si_code
,
754 Conv_fmt_flags_t fmt_flags
, Conv_inv_buf_t
*inv_buf
)
757 /* Values of si_code for user generated signals */
758 static const Msg user_arr
[6] = {
759 MSG_SI_USER
, MSG_SI_LWP
,
760 MSG_SI_QUEUE
, MSG_SI_TIMER
,
761 MSG_SI_ASYNCIO
, MSG_SI_MESGQ
763 static const conv_ds_msg_t ds_msg_user_arr
= {
764 CONV_DS_MSG_INIT(0, user_arr
) };
765 static const conv_ds_t
*ds_user_arr
[] = {
766 CONV_DS_ADDR(ds_msg_user_arr
), NULL
};
770 * Architecture dependent system generated signals. All
771 * versions of Solaris use the same set of these values.
773 static const Msg trap_arr
[6] = {
774 MSG_SI_TRAP_BRKPT
, MSG_SI_TRAP_TRACE
,
775 MSG_SI_TRAP_RWATCH
, MSG_SI_TRAP_WWATCH
,
776 MSG_SI_TRAP_XWATCH
, MSG_SI_TRAP_DTRACE
778 static const conv_ds_msg_t ds_msg_trap_arr
= {
779 CONV_DS_MSG_INIT(1, trap_arr
) };
780 static const conv_ds_t
*ds_trap_arr
[] = {
781 CONV_DS_ADDR(ds_msg_trap_arr
), NULL
};
783 static const Msg cld_arr
[6] = {
784 MSG_SI_CLD_EXITED
, MSG_SI_CLD_KILLED
,
785 MSG_SI_CLD_DUMPED
, MSG_SI_CLD_TRAPPED
,
786 MSG_SI_CLD_STOPPED
, MSG_SI_CLD_CONTINUED
788 static const conv_ds_msg_t ds_msg_cld_arr
= {
789 CONV_DS_MSG_INIT(1, cld_arr
) };
790 static const conv_ds_t
*ds_cld_arr
[] = {
791 CONV_DS_ADDR(ds_msg_cld_arr
), NULL
};
793 static const Msg poll_arr
[6] = {
794 MSG_SI_POLL_IN
, MSG_SI_POLL_OUT
,
795 MSG_SI_POLL_MSG
, MSG_SI_POLL_ERR
,
796 MSG_SI_POLL_PRI
, MSG_SI_POLL_HUP
798 static const conv_ds_msg_t ds_msg_poll_arr
= {
799 CONV_DS_MSG_INIT(1, poll_arr
) };
800 static const conv_ds_t
*ds_poll_arr
[] = {
801 CONV_DS_ADDR(ds_msg_poll_arr
), NULL
};
804 * Architecture dependent system generated signals.
805 * These items (ILL, EMT, FPE, SEGV, BUS) are platform
806 * dependent. Some architectures have extra codes.
807 * The same name may have a different integer value.
808 * Multiple arrays are used when they differ, and one
809 * array when all the architectures agree.
813 static const Msg ill_arr
[8] = {
814 MSG_SI_ILL_ILLOPC
, MSG_SI_ILL_ILLOPN
,
815 MSG_SI_ILL_ILLADR
, MSG_SI_ILL_ILLTRP
,
816 MSG_SI_ILL_PRVOPC
, MSG_SI_ILL_PRVREG
,
817 MSG_SI_ILL_COPROC
, MSG_SI_ILL_BADSTK
819 static const conv_ds_msg_t ds_msg_ill_arr
= {
820 CONV_DS_MSG_INIT(1, ill_arr
) };
821 static const conv_ds_t
*ds_ill_arr
[] = {
822 CONV_DS_ADDR(ds_msg_ill_arr
), NULL
};
825 static const Msg emt_arr_sparc
[2] = {
826 MSG_SI_EMT_TAGOVF
, MSG_SI_EMT_CPCOVF
828 static const conv_ds_msg_t ds_msg_emt_arr_sparc
= {
829 CONV_DS_MSG_INIT(1, emt_arr_sparc
) };
830 static const conv_ds_t
*ds_emt_arr_sparc
[] = {
831 CONV_DS_ADDR(ds_msg_emt_arr_sparc
), NULL
};
833 static const Msg emt_arr_x86
[1] = {
836 static const conv_ds_msg_t ds_msg_emt_arr_x86
= {
837 CONV_DS_MSG_INIT(1, emt_arr_x86
) };
838 static const conv_ds_t
*ds_emt_arr_x86
[] = {
839 CONV_DS_ADDR(ds_msg_emt_arr_x86
), NULL
};
843 static const Msg fpe_arr_sparc
[8] = {
844 MSG_SI_FPE_INTDIV
, MSG_SI_FPE_INTOVF
,
845 MSG_SI_FPE_FLTDIV
, MSG_SI_FPE_FLTOVF
,
846 MSG_SI_FPE_FLTUND
, MSG_SI_FPE_FLTRES
,
847 MSG_SI_FPE_FLTINV
, MSG_SI_FPE_FLTSUB
849 static const conv_ds_msg_t ds_msg_fpe_arr_sparc
= {
850 CONV_DS_MSG_INIT(1, fpe_arr_sparc
) };
851 static const conv_ds_t
*ds_fpe_arr_sparc
[] = {
852 CONV_DS_ADDR(ds_msg_fpe_arr_sparc
), NULL
};
854 static const Msg fpe_arr_x86
[9] = {
855 MSG_SI_FPE_INTDIV
, MSG_SI_FPE_INTOVF
,
856 MSG_SI_FPE_FLTDIV
, MSG_SI_FPE_FLTOVF
,
857 MSG_SI_FPE_FLTUND
, MSG_SI_FPE_FLTRES
,
858 MSG_SI_FPE_FLTINV
, MSG_SI_FPE_FLTSUB
,
861 static const conv_ds_msg_t ds_msg_fpe_arr_x86
= {
862 CONV_DS_MSG_INIT(1, fpe_arr_x86
) };
863 static const conv_ds_t
*ds_fpe_arr_x86
[] = {
864 CONV_DS_ADDR(ds_msg_fpe_arr_x86
), NULL
};
867 static const Msg segv_arr
[2] = {
868 MSG_SI_SEGV_MAPERR
, MSG_SI_SEGV_ACCERR
870 static const conv_ds_msg_t ds_msg_segv_arr
= {
871 CONV_DS_MSG_INIT(1, segv_arr
) };
872 static const conv_ds_t
*ds_segv_arr
[] = {
873 CONV_DS_ADDR(ds_msg_segv_arr
), NULL
};
876 static const Msg bus_arr
[3] = {
877 MSG_SI_BUS_ADRALN
, MSG_SI_BUS_ADRERR
,
880 static const conv_ds_msg_t ds_msg_bus_arr
= {
881 CONV_DS_MSG_INIT(1, bus_arr
) };
882 static const conv_ds_t
*ds_bus_arr
[] = {
883 CONV_DS_ADDR(ds_msg_bus_arr
), NULL
};
885 enum { ARCH_NONE
, ARCH_X86
, ARCH_SPARC
} arch
;
888 /* Handle the si_code values that do not depend on the signal */
891 return (MSG_ORIG(MSG_SI_NOINFO
));
893 return (MSG_ORIG(MSG_SI_DTRACE
));
895 return (MSG_ORIG(MSG_SI_RCTL
));
897 /* User generated signal codes are <= 0 */
902 * If no signal was delivered, and si_code is
903 * 0, return "0" rather than "SI_USER".
905 if ((si_code
== 0) && (sig
== 0))
906 return (MSG_ORIG(MSG_GBL_ZERO
));
908 if (ndx
>= ARRAY_NELTS(user_arr
)) {
911 fmt
= (fmt_flags
& CONV_FMT_DECIMAL
) ?
912 MSG_ORIG(MSG_FMT_INT
) :
913 MSG_ORIG(MSG_FMT_HEXINT
);
915 (void) snprintf(inv_buf
->buf
,
916 sizeof (inv_buf
->buf
), fmt
, si_code
);
917 return (inv_buf
->buf
);
919 return (conv_map_ds(ELFOSABI_NONE
, EM_NONE
, ndx
,
920 ds_user_arr
, fmt_flags
, inv_buf
));
925 * If we didn't return above, then this is a
926 * system generated signal, and the meaning of si_code
927 * depends on the signal that was delivered, and possibly
928 * on the target architecture.
949 return (conv_map_ds(ELFOSABI_NONE
, EM_NONE
, si_code
,
950 ds_trap_arr
, fmt_flags
, inv_buf
));
953 return (conv_map_ds(ELFOSABI_NONE
, EM_NONE
, si_code
,
954 ds_cld_arr
, fmt_flags
, inv_buf
));
957 return (conv_map_ds(ELFOSABI_NONE
, EM_NONE
, si_code
,
958 ds_poll_arr
, fmt_flags
, inv_buf
));
961 return (conv_map_ds(ELFOSABI_NONE
, EM_NONE
, si_code
,
962 ds_ill_arr
, fmt_flags
, inv_buf
));
967 return (conv_map_ds(ELFOSABI_NONE
, EM_NONE
, si_code
,
968 ds_emt_arr_sparc
, fmt_flags
, inv_buf
));
970 return (conv_map_ds(ELFOSABI_NONE
, EM_NONE
, si_code
,
971 ds_emt_arr_x86
, fmt_flags
, inv_buf
));
978 return (conv_map_ds(ELFOSABI_NONE
, EM_NONE
, si_code
,
979 ds_fpe_arr_sparc
, fmt_flags
, inv_buf
));
981 return (conv_map_ds(ELFOSABI_NONE
, EM_NONE
, si_code
,
982 ds_fpe_arr_x86
, fmt_flags
, inv_buf
));
987 return (conv_map_ds(ELFOSABI_NONE
, EM_NONE
, si_code
,
988 ds_segv_arr
, fmt_flags
, inv_buf
));
991 return (conv_map_ds(ELFOSABI_NONE
, EM_NONE
, si_code
,
992 ds_bus_arr
, fmt_flags
, inv_buf
));
995 /* If not recognized, format as a number */
996 return (conv_invalid_val(inv_buf
, si_code
, fmt_flags
));
1001 #define AUXAFFLGSZ CONV_EXPN_FIELD_DEF_PREFIX_SIZE + \
1002 MSG_AUXV_AF_SUN_SETUGID_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1003 MSG_AUXV_AF_SUN_HWCAPVERIFY_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1004 MSG_AUXV_AF_SUN_NOPLM_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1005 CONV_INV_BUFSIZE + CONV_EXPN_FIELD_DEF_SUFFIX_SIZE
1008 * Ensure that Conv_cnote_auxv_af_buf_t is large enough:
1010 * AUXAFFLGSZ is the real minimum size of the buffer required by
1011 * conv_cnote_auxv_af(). However, Conv_cnote_auxv_af_buf_t
1012 * uses CONV_CNOTE_AUXV_AF_BUFSIZE to set the buffer size. We do
1013 * things this way because the definition of AUXAFFLGSZ uses information
1014 * that is not available in the environment of other programs
1015 * that include the conv.h header file.
1017 #if (CONV_CNOTE_AUXV_AF_BUFSIZE != AUXAFFLGSZ) && !defined(__lint)
1018 #define REPORT_BUFSIZE AUXAFFLGSZ
1019 #include "report_bufsize.h"
1020 #error "CONV_CNOTE_AUXV_AF_BUFSIZE does not match AUXAFFLGSZ"
1024 conv_cnote_auxv_af(Word flags
, Conv_fmt_flags_t fmt_flags
,
1025 Conv_cnote_auxv_af_buf_t
*cnote_auxv_af_buf
)
1027 static const Val_desc vda
[] = {
1028 { AF_SUN_SETUGID
, MSG_AUXV_AF_SUN_SETUGID
},
1029 { AF_SUN_HWCAPVERIFY
, MSG_AUXV_AF_SUN_HWCAPVERIFY
},
1030 { AF_SUN_NOPLM
, MSG_AUXV_AF_SUN_NOPLM
},
1033 static CONV_EXPN_FIELD_ARG conv_arg
= {
1034 NULL
, sizeof (cnote_auxv_af_buf
->buf
) };
1037 return (MSG_ORIG(MSG_GBL_ZERO
));
1039 conv_arg
.buf
= cnote_auxv_af_buf
->buf
;
1040 conv_arg
.oflags
= conv_arg
.rflags
= flags
;
1041 (void) conv_expn_field(&conv_arg
, vda
, fmt_flags
);
1043 return ((const char *)cnote_auxv_af_buf
->buf
);
1047 #define CCFLGSZ CONV_EXPN_FIELD_DEF_PREFIX_SIZE + \
1048 MSG_CC_CONTENT_STACK_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1049 MSG_CC_CONTENT_HEAP_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1050 MSG_CC_CONTENT_SHFILE_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1051 MSG_CC_CONTENT_SHANON_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1052 MSG_CC_CONTENT_TEXT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1053 MSG_CC_CONTENT_DATA_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1054 MSG_CC_CONTENT_RODATA_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1055 MSG_CC_CONTENT_ANON_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1056 MSG_CC_CONTENT_SHM_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1057 MSG_CC_CONTENT_ISM_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1058 MSG_CC_CONTENT_DISM_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1059 MSG_CC_CONTENT_CTF_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1060 MSG_CC_CONTENT_SYMTAB_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1061 CONV_INV_BUFSIZE + CONV_EXPN_FIELD_DEF_SUFFIX_SIZE
1064 * Ensure that Conv_cnote_cc_content_buf_t is large enough:
1066 * CCFLGSZ is the real minimum size of the buffer required by
1067 * conv_cnote_cc_content(). However, Conv_cnote_cc_content_buf_t
1068 * uses CONV_CNOTE_CC_CONTENT_BUFSIZE to set the buffer size. We do
1069 * things this way because the definition of CCFLGSZ uses information
1070 * that is not available in the environment of other programs
1071 * that include the conv.h header file.
1073 #if (CONV_CNOTE_CC_CONTENT_BUFSIZE != CCFLGSZ) && !defined(__lint)
1074 #define REPORT_BUFSIZE CCFLGSZ
1075 #include "report_bufsize.h"
1076 #error "CONV_CNOTE_CC_CONTENT_BUFSIZE does not match CCFLGSZ"
1080 conv_cnote_cc_content(Lword flags
, Conv_fmt_flags_t fmt_flags
,
1081 Conv_cnote_cc_content_buf_t
*cnote_cc_content_buf
)
1084 * Note: core_content_t is a 64-bit integer value, but our
1085 * conv_expn_field() logic is all built around 32-bit
1086 * Word values. This will probably need changing someday,
1087 * but for now, we make do with the 32-bit engine. This works
1088 * because the number of bits actually assigned in
1089 * the core_content_t data type (<sys/corectl.h>) bits within
1092 * The downside is that any bits set in the upper half of
1093 * the flags will be ignored. At the time of this writing,
1094 * that can only occur via core file corruption, which presumably
1095 * would be evident in other ways.
1097 static const Val_desc vda
[] = {
1098 { (Word
) CC_CONTENT_STACK
, MSG_CC_CONTENT_STACK
},
1099 { (Word
) CC_CONTENT_HEAP
, MSG_CC_CONTENT_HEAP
},
1100 { (Word
) CC_CONTENT_SHFILE
, MSG_CC_CONTENT_SHFILE
},
1101 { (Word
) CC_CONTENT_SHANON
, MSG_CC_CONTENT_SHANON
},
1102 { (Word
) CC_CONTENT_TEXT
, MSG_CC_CONTENT_TEXT
},
1103 { (Word
) CC_CONTENT_DATA
, MSG_CC_CONTENT_DATA
},
1104 { (Word
) CC_CONTENT_RODATA
, MSG_CC_CONTENT_RODATA
},
1105 { (Word
) CC_CONTENT_ANON
, MSG_CC_CONTENT_ANON
},
1106 { (Word
) CC_CONTENT_SHM
, MSG_CC_CONTENT_SHM
},
1107 { (Word
) CC_CONTENT_ISM
, MSG_CC_CONTENT_ISM
},
1108 { (Word
) CC_CONTENT_DISM
, MSG_CC_CONTENT_DISM
},
1109 { (Word
) CC_CONTENT_CTF
, MSG_CC_CONTENT_CTF
},
1110 { (Word
) CC_CONTENT_SYMTAB
, MSG_CC_CONTENT_SYMTAB
},
1113 static CONV_EXPN_FIELD_ARG conv_arg
= {
1114 NULL
, sizeof (cnote_cc_content_buf
->buf
) };
1117 return (MSG_ORIG(MSG_GBL_ZERO
));
1119 conv_arg
.buf
= cnote_cc_content_buf
->buf
;
1120 conv_arg
.oflags
= conv_arg
.rflags
= flags
;
1121 (void) conv_expn_field(&conv_arg
, vda
, fmt_flags
);
1123 return ((const char *)cnote_cc_content_buf
->buf
);
1127 #define PRFLGSZ CONV_EXPN_FIELD_DEF_PREFIX_SIZE + \
1128 MSG_PR_FLAGS_STOPPED_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1129 MSG_PR_FLAGS_ISTOP_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1130 MSG_PR_FLAGS_DSTOP_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1131 MSG_PR_FLAGS_STEP_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1132 MSG_PR_FLAGS_ASLEEP_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1133 MSG_PR_FLAGS_PCINVAL_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1134 MSG_PR_FLAGS_ASLWP_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1135 MSG_PR_FLAGS_AGENT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1136 MSG_PR_FLAGS_DETACH_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1137 MSG_PR_FLAGS_DAEMON_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1138 MSG_PR_FLAGS_IDLE_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1139 MSG_PR_FLAGS_ISSYS_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1140 MSG_PR_FLAGS_VFORKP_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1141 MSG_PR_FLAGS_ORPHAN_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1142 MSG_PR_FLAGS_NOSIGCHLD_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1143 MSG_PR_FLAGS_WAITPID_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1144 MSG_PR_FLAGS_FORK_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1145 MSG_PR_FLAGS_RLC_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1146 MSG_PR_FLAGS_KLC_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1147 MSG_PR_FLAGS_ASYNC_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1148 MSG_PR_FLAGS_MSACCT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1149 MSG_PR_FLAGS_BPTADJ_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1150 MSG_PR_FLAGS_PTRACE_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1151 MSG_PR_FLAGS_MSFORK_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1152 CONV_INV_BUFSIZE + CONV_EXPN_FIELD_DEF_SUFFIX_SIZE
1155 * Ensure that Conv_cnote_pr_flags_buf_t is large enough:
1157 * PRFLGSZ is the real minimum size of the buffer required by
1158 * conv_cnote_pr_flags(). However, Conv_cnote_pr_flags_buf_t
1159 * uses CONV_CNOTE_PR_FLAGS_BUFSIZE to set the buffer size. We do
1160 * things this way because the definition of PRFLGSZ uses information
1161 * that is not available in the environment of other programs
1162 * that include the conv.h header file.
1164 #if (CONV_CNOTE_PR_FLAGS_BUFSIZE != PRFLGSZ) && !defined(__lint)
1165 #define REPORT_BUFSIZE PRFLGSZ
1166 #include "report_bufsize.h"
1167 #error "CONV_CNOTE_PR_FLAGS_BUFSIZE does not match PRFLGSZ"
1171 conv_cnote_pr_flags(int flags
, Conv_fmt_flags_t fmt_flags
,
1172 Conv_cnote_pr_flags_buf_t
*cnote_pr_flags_buf
)
1174 static const Val_desc vda
[] = {
1175 { PR_STOPPED
, MSG_PR_FLAGS_STOPPED
},
1176 { PR_ISTOP
, MSG_PR_FLAGS_ISTOP
},
1177 { PR_DSTOP
, MSG_PR_FLAGS_DSTOP
},
1178 { PR_STEP
, MSG_PR_FLAGS_STEP
},
1179 { PR_ASLEEP
, MSG_PR_FLAGS_ASLEEP
},
1180 { PR_PCINVAL
, MSG_PR_FLAGS_PCINVAL
},
1181 { PR_ASLWP
, MSG_PR_FLAGS_ASLWP
},
1182 { PR_AGENT
, MSG_PR_FLAGS_AGENT
},
1183 { PR_DETACH
, MSG_PR_FLAGS_DETACH
},
1184 { PR_DAEMON
, MSG_PR_FLAGS_DAEMON
},
1185 { PR_IDLE
, MSG_PR_FLAGS_IDLE
},
1186 { PR_ISSYS
, MSG_PR_FLAGS_ISSYS
},
1187 { PR_VFORKP
, MSG_PR_FLAGS_VFORKP
},
1188 { PR_ORPHAN
, MSG_PR_FLAGS_ORPHAN
},
1189 { PR_NOSIGCHLD
, MSG_PR_FLAGS_NOSIGCHLD
},
1190 { PR_WAITPID
, MSG_PR_FLAGS_WAITPID
},
1191 { PR_FORK
, MSG_PR_FLAGS_FORK
},
1192 { PR_RLC
, MSG_PR_FLAGS_RLC
},
1193 { PR_KLC
, MSG_PR_FLAGS_KLC
},
1194 { PR_ASYNC
, MSG_PR_FLAGS_ASYNC
},
1195 { PR_MSACCT
, MSG_PR_FLAGS_MSACCT
},
1196 { PR_BPTADJ
, MSG_PR_FLAGS_BPTADJ
},
1197 { PR_PTRACE
, MSG_PR_FLAGS_PTRACE
},
1198 { PR_MSFORK
, MSG_PR_FLAGS_MSFORK
},
1201 static CONV_EXPN_FIELD_ARG conv_arg
= {
1202 NULL
, sizeof (cnote_pr_flags_buf
->buf
) };
1205 return (MSG_ORIG(MSG_GBL_ZERO
));
1207 conv_arg
.buf
= cnote_pr_flags_buf
->buf
;
1208 conv_arg
.oflags
= conv_arg
.rflags
= flags
;
1209 (void) conv_expn_field(&conv_arg
, vda
, fmt_flags
);
1211 return ((const char *)cnote_pr_flags_buf
->buf
);
1215 #define OLDPRFLGSZ CONV_EXPN_FIELD_DEF_PREFIX_SIZE + \
1216 MSG_PR_FLAGS_STOPPED_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1217 MSG_PR_FLAGS_ISTOP_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1218 MSG_PR_FLAGS_DSTOP_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1219 MSG_PR_FLAGS_ASLEEP_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1220 MSG_PR_FLAGS_FORK_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1221 MSG_PR_FLAGS_RLC_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1222 MSG_PR_FLAGS_PTRACE_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1223 MSG_PR_FLAGS_PCINVAL_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1224 MSG_PR_FLAGS_ISSYS_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1225 MSG_PR_FLAGS_STEP_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1226 MSG_PR_FLAGS_KLC_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1227 MSG_PR_FLAGS_ASYNC_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1228 MSG_PR_FLAGS_PCOMPAT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1229 MSG_PR_FLAGS_MSACCT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1230 MSG_PR_FLAGS_BPTADJ_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1231 MSG_PR_FLAGS_ASLWP_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1232 CONV_INV_BUFSIZE + CONV_EXPN_FIELD_DEF_SUFFIX_SIZE
1235 * Ensure that Conv_cnote_old_pr_flags_buf_t is large enough:
1237 * OLDPRFLGSZ is the real minimum size of the buffer required by
1238 * conv_cnote_old_pr_flags(). However, Conv_cnote_old_pr_flags_buf_t
1239 * uses CONV_CNOTE_OLD_PR_FLAGS_BUFSIZE to set the buffer size. We do
1240 * things this way because the definition of OLDPRFLGSZ uses information
1241 * that is not available in the environment of other programs
1242 * that include the conv.h header file.
1244 #if (CONV_CNOTE_OLD_PR_FLAGS_BUFSIZE != OLDPRFLGSZ) && !defined(__lint)
1245 #define REPORT_BUFSIZE OLDPRFLGSZ
1246 #include "report_bufsize.h"
1247 #error "CONV_CNOTE_OLD_PR_FLAGS_BUFSIZE does not match OLDPRFLGSZ"
1251 conv_cnote_old_pr_flags(int flags
, Conv_fmt_flags_t fmt_flags
,
1252 Conv_cnote_old_pr_flags_buf_t
*cnote_old_pr_flags_buf
)
1255 * <sys/old_procfs.h> defines names for many of these flags
1256 * that are also defined in <sys/procfs.h>, but with different
1257 * values. To avoid confusion, we don't include <sys/old_procfs.h>,
1258 * and specify the values directly.
1260 static const Val_desc vda
[] = {
1261 { 0x0001, MSG_PR_FLAGS_STOPPED
},
1262 { 0x0002, MSG_PR_FLAGS_ISTOP
},
1263 { 0x0004, MSG_PR_FLAGS_DSTOP
},
1264 { 0x0008, MSG_PR_FLAGS_ASLEEP
},
1265 { 0x0010, MSG_PR_FLAGS_FORK
},
1266 { 0x0020, MSG_PR_FLAGS_RLC
},
1267 { 0x0040, MSG_PR_FLAGS_PTRACE
},
1268 { 0x0080, MSG_PR_FLAGS_PCINVAL
},
1269 { 0x0100, MSG_PR_FLAGS_ISSYS
},
1270 { 0x0200, MSG_PR_FLAGS_STEP
},
1271 { 0x0400, MSG_PR_FLAGS_KLC
},
1272 { 0x0800, MSG_PR_FLAGS_ASYNC
},
1273 { 0x1000, MSG_PR_FLAGS_PCOMPAT
},
1274 { 0x2000, MSG_PR_FLAGS_MSACCT
},
1275 { 0x4000, MSG_PR_FLAGS_BPTADJ
},
1276 { 0x8000, MSG_PR_FLAGS_ASLWP
},
1279 static CONV_EXPN_FIELD_ARG conv_arg
= {
1280 NULL
, sizeof (cnote_old_pr_flags_buf
->buf
) };
1283 return (MSG_ORIG(MSG_GBL_ZERO
));
1285 conv_arg
.buf
= cnote_old_pr_flags_buf
->buf
;
1286 conv_arg
.oflags
= conv_arg
.rflags
= flags
;
1287 (void) conv_expn_field(&conv_arg
, vda
, fmt_flags
);
1289 return ((const char *)cnote_old_pr_flags_buf
->buf
);
1293 #define PROCFLGSZ CONV_EXPN_FIELD_DEF_PREFIX_SIZE + \
1294 MSG_PROC_FLAG_SSYS_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1295 MSG_PROC_FLAG_SMSACCT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1296 CONV_INV_BUFSIZE + CONV_EXPN_FIELD_DEF_SUFFIX_SIZE
1299 * Ensure that Conv_cnote_proc_flag_buf_t is large enough:
1301 * PROCFLGSZ is the real minimum size of the buffer required by
1302 * conv_cnote_proc_flag(). However, Conv_cnote_proc_flag_buf_t
1303 * uses CONV_CNOTE_PROC_FLAG_BUFSIZE to set the buffer size. We do
1304 * things this way because the definition of PROCFLGSZ uses information
1305 * that is not available in the environment of other programs
1306 * that include the conv.h header file.
1308 #if (CONV_CNOTE_PROC_FLAG_BUFSIZE != PROCFLGSZ) && !defined(__lint)
1309 #define REPORT_BUFSIZE PROCFLGSZ
1310 #include "report_bufsize.h"
1311 #error "CONV_CNOTE_PROC_FLAG_BUFSIZE does not match PROCFLGSZ"
1315 conv_cnote_proc_flag(int flags
, Conv_fmt_flags_t fmt_flags
,
1316 Conv_cnote_proc_flag_buf_t
*cnote_proc_flag_buf
)
1319 * Most of the proc flags are implementation dependant, and can
1320 * change between releases. As such, we do not attempt to translate
1321 * them to symbolic form, but simply report them in hex form.
1322 * However, SMSACCT and SSYS are special, and their bit values
1323 * are maintained between releases so they can be used in the
1324 * psinfo_t.p_flag field. We therefore translate these items.
1326 * See <system/proc.h>
1328 * Note: We don't want to include <sys/proc.h> in this file, because
1329 * it redefines 'struct list', which we have defined in sgs.h. As
1330 * SMSACCT and SSYS are stable public values, we simply use
1331 * their numeric value.
1333 static const Val_desc vda
[] = {
1334 { 0x00000001, MSG_PROC_FLAG_SSYS
},
1335 { 0x02000000, MSG_PROC_FLAG_SMSACCT
},
1338 static CONV_EXPN_FIELD_ARG conv_arg
= {
1339 NULL
, sizeof (cnote_proc_flag_buf
->buf
) };
1342 return (MSG_ORIG(MSG_GBL_ZERO
));
1344 conv_arg
.buf
= cnote_proc_flag_buf
->buf
;
1345 conv_arg
.oflags
= conv_arg
.rflags
= flags
;
1346 (void) conv_expn_field(&conv_arg
, vda
, fmt_flags
);
1348 return ((const char *)cnote_proc_flag_buf
->buf
);
1352 #define SAFLGSZ CONV_EXPN_FIELD_DEF_PREFIX_SIZE + \
1353 MSG_SA_ONSTACK_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1354 MSG_SA_RESETHAND_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1355 MSG_SA_RESTART_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1356 MSG_SA_SIGINFO_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1357 MSG_SA_NODEFER_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1358 MSG_SA_NOCLDWAIT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1359 MSG_SA_NOCLDSTOP_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1360 CONV_INV_BUFSIZE + CONV_EXPN_FIELD_DEF_SUFFIX_SIZE
1363 * Ensure that Conv_cnote_sa_flags_buf_t is large enough:
1365 * SAFLGSZ is the real minimum size of the buffer required by
1366 * conv_cnote_sa_flags(). However, Conv_cnote_sa_flags_buf_t
1367 * uses CONV_CNOTE_SA_FLAGS_BUFSIZE to set the buffer size. We do
1368 * things this way because the definition of SAFLGSZ uses information
1369 * that is not available in the environment of other programs
1370 * that include the conv.h header file.
1372 #if (CONV_CNOTE_SA_FLAGS_BUFSIZE != SAFLGSZ) && !defined(__lint)
1373 #define REPORT_BUFSIZE SAFLGSZ
1374 #include "report_bufsize.h"
1375 #error "CONV_CNOTE_SA_FLAGS_BUFSIZE does not match SAFLGSZ"
1379 conv_cnote_sa_flags(int flags
, Conv_fmt_flags_t fmt_flags
,
1380 Conv_cnote_sa_flags_buf_t
*cnote_sa_flags_buf
)
1382 static const Val_desc vda
[] = {
1383 { SA_ONSTACK
, MSG_SA_ONSTACK
},
1384 { SA_RESETHAND
, MSG_SA_RESETHAND
},
1385 { SA_RESTART
, MSG_SA_RESTART
},
1386 { SA_SIGINFO
, MSG_SA_SIGINFO
},
1387 { SA_NODEFER
, MSG_SA_NODEFER
},
1388 { SA_NOCLDWAIT
, MSG_SA_NOCLDWAIT
},
1389 { SA_NOCLDSTOP
, MSG_SA_NOCLDSTOP
},
1392 static CONV_EXPN_FIELD_ARG conv_arg
= {
1393 NULL
, sizeof (cnote_sa_flags_buf
->buf
) };
1396 return (MSG_ORIG(MSG_GBL_ZERO
));
1398 conv_arg
.buf
= cnote_sa_flags_buf
->buf
;
1399 conv_arg
.oflags
= conv_arg
.rflags
= flags
;
1400 (void) conv_expn_field(&conv_arg
, vda
, fmt_flags
);
1402 return ((const char *)cnote_sa_flags_buf
->buf
);
1406 #define SSFLGSZ CONV_EXPN_FIELD_DEF_PREFIX_SIZE + \
1407 MSG_SS_ONSTACK_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1408 MSG_SS_DISABLE_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1409 CONV_INV_BUFSIZE + CONV_EXPN_FIELD_DEF_SUFFIX_SIZE
1412 * Ensure that Conv_cnote_ss_flags_buf_t is large enough:
1414 * SSFLGSZ is the real minimum size of the buffer required by
1415 * conv_cnote_ss_flags(). However, Conv_cnote_ss_flags_buf_t
1416 * uses CONV_CNOTE_SS_FLAGS_BUFSIZE to set the buffer size. We do
1417 * things this way because the definition of SSFLGSZ uses information
1418 * that is not available in the environment of other programs
1419 * that include the conv.h header file.
1421 #if (CONV_CNOTE_SS_FLAGS_BUFSIZE != SSFLGSZ) && !defined(__lint)
1422 #define REPORT_BUFSIZE SSFLGSZ
1423 #include "report_bufsize.h"
1424 #error "CONV_CNOTE_SS_FLAGS_BUFSIZE does not match SSFLGSZ"
1428 conv_cnote_ss_flags(int flags
, Conv_fmt_flags_t fmt_flags
,
1429 Conv_cnote_ss_flags_buf_t
*cnote_ss_flags_buf
)
1431 static const Val_desc vda
[] = {
1432 { SS_ONSTACK
, MSG_SS_ONSTACK
},
1433 { SS_DISABLE
, MSG_SS_DISABLE
},
1436 static CONV_EXPN_FIELD_ARG conv_arg
= {
1437 NULL
, sizeof (cnote_ss_flags_buf
->buf
) };
1440 return (MSG_ORIG(MSG_GBL_ZERO
));
1442 conv_arg
.buf
= cnote_ss_flags_buf
->buf
;
1443 conv_arg
.oflags
= conv_arg
.rflags
= flags
;
1444 (void) conv_expn_field(&conv_arg
, vda
, fmt_flags
);
1446 return ((const char *)cnote_ss_flags_buf
->buf
);
1451 * Solaris has a variety of types that use bitmasks to represent
1452 * sets of things like signals (sigset_t), faults (fltset_t), and
1453 * system calls (sysset_t). These types use arrays of unsigned 32-bit
1454 * integers to represent the set. These are public types that
1455 * cannot be changed, so they are generously oversized to allow
1456 * for future growth. Hence, there are usually unused bits.
1458 * conv_bitmaskset() generalizes the process of displaying these items.
1462 const Val_desc
*vdp
; /* NULL, or bitmask description */
1463 uint32_t unused_bits
; /* Mask of undefined bits */
1464 } conv_bitmaskset_desc_t
;
1468 * n_mask - # of 32-bit masks that make up this bitmask type.
1469 * maskarr - Array of n_mask 32-bit mask values
1470 * bitmask_descarr - Array of n_mask bitmask_desc_t descriptors,
1471 * one for each mask, specifying the bitmask names, and
1472 * a mask of the bits that are not defined by the system.
1473 * fmt_flags - CONV_FMT_* values, used to specify formatting details.
1474 * conv_buf - Buffer to receive formatted results
1475 * conv_buf_size - Size of conv_buf, including room for NULL termination
1478 conv_bitmaskset(uint32_t *maskarr
, int n_mask
,
1479 const conv_bitmaskset_desc_t
*bitmask_descarr
, Conv_fmt_flags_t fmt_flags
,
1480 char *conv_buf
, size_t conv_buf_size
)
1482 CONV_EXPN_FIELD_ARG conv_arg
;
1483 int i
, need_sep
= 0;
1485 /* If every bit of every mask is 0, return 0 as the result */
1486 for (i
= 0; i
< n_mask
; i
++)
1487 if (maskarr
[i
] != 0)
1490 return (MSG_ORIG(MSG_GBL_ZERO
));
1493 * At least one bit is non-zero. Move through the masks
1494 * and process each one.
1496 (void) memset(&conv_arg
, 0, sizeof (conv_arg
));
1497 conv_arg
.bufsize
= conv_buf_size
;
1498 conv_arg
.buf
= conv_buf
;
1499 if ((fmt_flags
& CONV_FMT_NOBKT
) == 0) {
1500 *conv_arg
.buf
++ = '[';
1501 *conv_arg
.buf
++ = ' ';
1502 conv_arg
.bufsize
-= 2;
1506 * conv_expn_field() orders its output with the most significant
1507 * bits on the left. To preserve this ordering across the
1508 * subwords or our "virtual bitmask", we need to process
1509 * the sub-words in the same order, from most significant down
1510 * to least significant. Since unassigned bits tend to be at
1511 * the MSB end of the word, we process the unused bits first.
1513 * One implication of this is that the caller should not use
1514 * the unassigned bits for "abandoned" bits in the middle of
1515 * a used range, but should instead define the string for
1516 * that bit as being the string representation of that decimal
1517 * value (i.e. "65"). That will cause the bit to be properly
1518 * sorted among the named bits to either side of it.
1520 for (i
= 0; i
< n_mask
; i
++) {
1522 uint32_t mask
, unused_bits
;
1523 const int bits_per_mask
= sizeof (mask
) * 8;
1526 unused_bits
= mask
& bitmask_descarr
[i
].unused_bits
;
1527 mask
&= ~unused_bits
;
1531 conv_arg
.oflags
= conv_arg
.rflags
= mask
;
1533 *conv_arg
.buf
++ = ' ';
1537 (void) conv_expn_field(&conv_arg
,
1538 bitmask_descarr
[i
].vdp
, fmt_flags
| CONV_FMT_NOBKT
);
1539 n
= strlen(conv_arg
.buf
);
1540 conv_arg
.bufsize
-= n
;
1544 if (unused_bits
!= 0) {
1545 uint32_t bit
= 0x00000001;
1548 for (j
= 1; j
<= bits_per_mask
; j
++, bit
*= 2) {
1549 if ((unused_bits
& bit
) == 0)
1553 *conv_arg
.buf
++ = ' ';
1557 n
= snprintf(conv_arg
.buf
, conv_arg
.bufsize
,
1558 MSG_ORIG(MSG_FMT_WORD
),
1559 EC_WORD(j
+ (bits_per_mask
* i
)));
1561 conv_arg
.bufsize
-= n
;
1565 if ((fmt_flags
& CONV_FMT_NOBKT
) == 0) {
1566 *conv_arg
.buf
++ = ' ';
1567 *conv_arg
.buf
++ = ']';
1569 *conv_arg
.buf
= '\0';
1571 return ((const char *) conv_buf
);
1575 #define SIGSET_FLAGSZ CONV_EXPN_FIELD_DEF_PREFIX_SIZE + \
1576 /* sigset_t [0] - Signals [1 - 32] */ \
1577 MSG_SIGHUP_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1578 MSG_SIGINT_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1579 MSG_SIGQUIT_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1580 MSG_SIGILL_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1581 MSG_SIGTRAP_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1582 MSG_SIGABRT_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1583 MSG_SIGEMT_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1584 MSG_SIGFPE_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1585 MSG_SIGKILL_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1586 MSG_SIGBUS_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1587 MSG_SIGSEGV_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1588 MSG_SIGSYS_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1589 MSG_SIGPIPE_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1590 MSG_SIGALRM_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1591 MSG_SIGTERM_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1592 MSG_SIGUSR1_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1593 MSG_SIGUSR2_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1594 MSG_SIGCHLD_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1595 MSG_SIGPWR_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1596 MSG_SIGWINCH_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1597 MSG_SIGURG_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1598 MSG_SIGPOLL_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1599 MSG_SIGSTOP_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1600 MSG_SIGTSTP_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1601 MSG_SIGCONT_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1602 MSG_SIGTTIN_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1603 MSG_SIGTTOU_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1604 MSG_SIGVTALRM_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1605 MSG_SIGPROF_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1606 MSG_SIGXCPU_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1607 MSG_SIGXFSZ_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1608 MSG_SIGWAITING_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1611 * sigset_t [1] - Signals [33 - 64] \
1612 * There are 24 unused bits, each of which needs two \
1613 * characters plus a separator. \
1615 MSG_SIGLWP_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1616 MSG_SIGFREEZE_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1617 MSG_SIGTHAW_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1618 MSG_SIGCANCEL_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1619 MSG_SIGLOST_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1620 MSG_SIGXRES_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1621 MSG_SIGJVM1_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1622 MSG_SIGJVM2_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1623 (24 * (2 + CONV_EXPN_FIELD_DEF_SEP_SIZE)) + \
1626 * sigset_t [2] - Signals [65 - 96] \
1627 * There are 32 unused bits, each of which needs two \
1628 * characters plus a separator. \
1630 (32 * (2 + CONV_EXPN_FIELD_DEF_SEP_SIZE)) + \
1633 * sigset_t [2] - Signals [97 - 128] \
1634 * There are 32 unused bits. Three of these need two \
1635 * characters, and 29 need 3. Each one needs a separator. \
1637 (3 * (2 + CONV_EXPN_FIELD_DEF_SEP_SIZE)) + \
1638 (29 * (3 + CONV_EXPN_FIELD_DEF_SEP_SIZE)) + \
1640 CONV_INV_BUFSIZE + CONV_EXPN_FIELD_DEF_SUFFIX_SIZE
1643 * Ensure that Conv_cnote_sigset_buf_t is large enough:
1645 * SIGSET_FLAGSZ is the real minimum size of the buffer required by
1646 * conv_cnote_sigset(). However, Conv_cnote_sigset_buf_t
1647 * uses CONV_CNOTE_SIGSET_BUFSIZE to set the buffer size. We do
1648 * things this way because the definition of SIGSET_FLAGSZ uses information
1649 * that is not available in the environment of other programs
1650 * that include the conv.h header file.
1652 #if (CONV_CNOTE_SIGSET_BUFSIZE != SIGSET_FLAGSZ) && !defined(__lint)
1653 #define REPORT_BUFSIZE SIGSET_FLAGSZ
1654 #include "report_bufsize.h"
1655 #error "CONV_CNOTE_SIGSET_BUFSIZE does not match SIGSET_FLAGSZ"
1659 conv_cnote_sigset(uint32_t *maskarr
, int n_mask
,
1660 Conv_fmt_flags_t fmt_flags
, Conv_cnote_sigset_buf_t
*cnote_sigset_buf
)
1664 static const Val_desc vda0
[] = {
1665 { 0x00000001, MSG_SIGHUP_ALT
},
1666 { 0x00000002, MSG_SIGINT_ALT
},
1667 { 0x00000004, MSG_SIGQUIT_ALT
},
1668 { 0x00000008, MSG_SIGILL_ALT
},
1669 { 0x00000010, MSG_SIGTRAP_ALT
},
1670 { 0x00000020, MSG_SIGABRT_ALT
},
1671 { 0x00000040, MSG_SIGEMT_ALT
},
1672 { 0x00000080, MSG_SIGFPE_ALT
},
1673 { 0x00000100, MSG_SIGKILL_ALT
},
1674 { 0x00000200, MSG_SIGBUS_ALT
},
1675 { 0x00000400, MSG_SIGSEGV_ALT
},
1676 { 0x00000800, MSG_SIGSYS_ALT
},
1677 { 0x00001000, MSG_SIGPIPE_ALT
},
1678 { 0x00002000, MSG_SIGALRM_ALT
},
1679 { 0x00004000, MSG_SIGTERM_ALT
},
1680 { 0x00008000, MSG_SIGUSR1_ALT
},
1681 { 0x00010000, MSG_SIGUSR2_ALT
},
1682 { 0x00020000, MSG_SIGCHLD_ALT
},
1683 { 0x00040000, MSG_SIGPWR_ALT
},
1684 { 0x00080000, MSG_SIGWINCH_ALT
},
1685 { 0x00100000, MSG_SIGURG_ALT
},
1686 { 0x00200000, MSG_SIGPOLL_ALT
},
1687 { 0x00400000, MSG_SIGSTOP_ALT
},
1688 { 0x00800000, MSG_SIGTSTP_ALT
},
1689 { 0x01000000, MSG_SIGCONT_ALT
},
1690 { 0x02000000, MSG_SIGTTIN_ALT
},
1691 { 0x04000000, MSG_SIGTTOU_ALT
},
1692 { 0x08000000, MSG_SIGVTALRM_ALT
},
1693 { 0x10000000, MSG_SIGPROF_ALT
},
1694 { 0x20000000, MSG_SIGXCPU_ALT
},
1695 { 0x40000000, MSG_SIGXFSZ_ALT
},
1696 { 0x80000000, MSG_SIGWAITING_ALT
},
1699 static const Val_desc vda1
[] = {
1700 { 0x00000001, MSG_SIGLWP_ALT
},
1701 { 0x00000002, MSG_SIGFREEZE_ALT
},
1702 { 0x00000004, MSG_SIGTHAW_ALT
},
1703 { 0x00000008, MSG_SIGCANCEL_ALT
},
1704 { 0x00000010, MSG_SIGLOST_ALT
},
1705 { 0x00000020, MSG_SIGXRES_ALT
},
1706 { 0x00000040, MSG_SIGJVM1_ALT
},
1707 { 0x00000080, MSG_SIGJVM2_ALT
},
1710 static const conv_bitmaskset_desc_t bitmask_desc
[N_MASK
] = {
1712 { vda1
, 0xffffff00 },
1713 { NULL
, 0xffffffff },
1714 { NULL
, 0xffffffff }
1717 if (n_mask
> N_MASK
)
1719 return (conv_bitmaskset(maskarr
, n_mask
, bitmask_desc
, fmt_flags
,
1720 cnote_sigset_buf
->buf
, CONV_CNOTE_SIGSET_BUFSIZE
));
1726 #define FLTSET_FLAGSZ CONV_EXPN_FIELD_DEF_PREFIX_SIZE + \
1728 * fltset_t[0] - Faults [1 - 32] \
1729 * There are 19 unused bits, each of which needs two \
1730 * characters plus a separator. \
1732 MSG_FLTILL_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1733 MSG_FLTPRIV_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1734 MSG_FLTBPT_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1735 MSG_FLTTRACE_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1736 MSG_FLTACCESS_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1737 MSG_FLTBOUNDS_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1738 MSG_FLTIOVF_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1739 MSG_FLTIZDIV_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1740 MSG_FLTFPE_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1741 MSG_FLTSTACK_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1742 MSG_FLTPAGE_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1743 MSG_FLTWATCH_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1744 MSG_FLTCPCOVF_ALT_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
1745 (19 * (2 + CONV_EXPN_FIELD_DEF_SEP_SIZE)) + \
1747 * fltset_t [1] - Faults [33 - 64] \
1748 * There are 32 unused bits, each of which needs two \
1749 * characters plus a separator. \
1751 (32 * (2 + CONV_EXPN_FIELD_DEF_SEP_SIZE)) + \
1753 * fltset_t [2] - Faults [65 - 96] \
1754 * There are 32 unused bits, each of which needs two \
1755 * characters plus a separator. \
1757 (32 * (2 + CONV_EXPN_FIELD_DEF_SEP_SIZE)) + \
1759 * fltset_t [3] - Faults [97 - 128] \
1760 * There are 32 unused bits. Three of these need two \
1761 * characters, and 29 need 3. Each one needs a separator. \
1763 (3 * (2 + CONV_EXPN_FIELD_DEF_SEP_SIZE)) + \
1764 (29 * (3 + CONV_EXPN_FIELD_DEF_SEP_SIZE)) + \
1766 CONV_INV_BUFSIZE + CONV_EXPN_FIELD_DEF_SUFFIX_SIZE
1769 * Ensure that Conv_cnote_fltset_buf_t is large enough:
1771 * FLTSET_FLAGSZ is the real minimum size of the buffer required by
1772 * conv_cnote_fltset(). However, Conv_cnote_fltset_buf_t
1773 * uses CONV_CNOTE_FLTSET_BUFSIZE to set the buffer size. We do
1774 * things this way because the definition of FLTSET_FLAGSZ uses information
1775 * that is not available in the environment of other programs
1776 * that include the conv.h header file.
1778 #if (CONV_CNOTE_FLTSET_BUFSIZE != FLTSET_FLAGSZ) && !defined(__lint)
1779 #define REPORT_BUFSIZE FLTSET_FLAGSZ
1780 #include "report_bufsize.h"
1781 #error "CONV_CNOTE_FLTSET_BUFSIZE does not match FLTSET_FLAGSZ"
1785 conv_cnote_fltset(uint32_t *maskarr
, int n_mask
,
1786 Conv_fmt_flags_t fmt_flags
, Conv_cnote_fltset_buf_t
*cnote_fltset_buf
)
1790 static const Val_desc vda0
[] = {
1791 { 0x00000001, MSG_FLTILL_ALT
},
1792 { 0x00000002, MSG_FLTPRIV_ALT
},
1793 { 0x00000004, MSG_FLTBPT_ALT
},
1794 { 0x00000008, MSG_FLTTRACE_ALT
},
1795 { 0x00000010, MSG_FLTACCESS_ALT
},
1796 { 0x00000020, MSG_FLTBOUNDS_ALT
},
1797 { 0x00000040, MSG_FLTIOVF_ALT
},
1798 { 0x00000080, MSG_FLTIZDIV_ALT
},
1799 { 0x00000100, MSG_FLTFPE_ALT
},
1800 { 0x00000200, MSG_FLTSTACK_ALT
},
1801 { 0x00000400, MSG_FLTPAGE_ALT
},
1802 { 0x00000800, MSG_FLTWATCH_ALT
},
1803 { 0x00001000, MSG_FLTCPCOVF_ALT
},
1806 static const conv_bitmaskset_desc_t bitmask_desc
[N_MASK
] = {
1807 { vda0
, 0xffffe000 },
1808 { NULL
, 0xffffffff },
1809 { NULL
, 0xffffffff },
1810 { NULL
, 0xffffffff }
1813 if (n_mask
> N_MASK
)
1815 return (conv_bitmaskset(maskarr
, n_mask
, bitmask_desc
, fmt_flags
,
1816 cnote_fltset_buf
->buf
, CONV_CNOTE_FLTSET_BUFSIZE
));
1823 #define SYSSET_FLAGSZ CONV_EXPN_FIELD_DEF_PREFIX_SIZE + \
1824 (512 * CONV_EXPN_FIELD_DEF_SEP_SIZE) + \
1826 /* sysset_t[0] - System Calls [1 - 32] */ \
1827 MSG_SYS_EXIT_ALT_SIZE /* 1 */ + \
1828 MSG_SYS_2_SIZE /* 2 (unused) */ + \
1829 MSG_SYS_READ_ALT_SIZE /* 3 */ + \
1830 MSG_SYS_WRITE_ALT_SIZE /* 4 */ + \
1831 MSG_SYS_OPEN_ALT_SIZE /* 5 */ + \
1832 MSG_SYS_CLOSE_ALT_SIZE /* 6 */ + \
1833 MSG_SYS_7_SIZE /* 7 (unused) */ + \
1834 MSG_SYS_8_SIZE /* 8 (unused) */ + \
1835 MSG_SYS_LINK_ALT_SIZE /* 9 */ + \
1836 MSG_SYS_UNLINK_ALT_SIZE /* 10 */ + \
1837 MSG_SYS_11_SIZE /* 11 (unused) */ + \
1838 MSG_SYS_CHDIR_ALT_SIZE /* 12 */ + \
1839 MSG_SYS_TIME_ALT_SIZE /* 13 */ + \
1840 MSG_SYS_MKNOD_ALT_SIZE /* 14 */ + \
1841 MSG_SYS_CHMOD_ALT_SIZE /* 15 */ + \
1842 MSG_SYS_CHOWN_ALT_SIZE /* 16 */ + \
1843 MSG_SYS_BRK_ALT_SIZE /* 17 */ + \
1844 MSG_SYS_STAT_ALT_SIZE /* 18 */ + \
1845 MSG_SYS_LSEEK_ALT_SIZE /* 19 */ + \
1846 MSG_SYS_GETPID_ALT_SIZE /* 20 */ + \
1847 MSG_SYS_MOUNT_ALT_SIZE /* 21 */ + \
1848 MSG_SYS_22_SIZE /* 22 (unused) */ + \
1849 MSG_SYS_SETUID_ALT_SIZE /* 23 */ + \
1850 MSG_SYS_GETUID_ALT_SIZE /* 24 */ + \
1851 MSG_SYS_STIME_ALT_SIZE /* 25 */ + \
1852 MSG_SYS_PCSAMPLE_ALT_SIZE /* 26 */ + \
1853 MSG_SYS_ALARM_ALT_SIZE /* 27 */ + \
1854 MSG_SYS_FSTAT_ALT_SIZE /* 28 */ + \
1855 MSG_SYS_PAUSE_ALT_SIZE /* 29 */ + \
1856 MSG_SYS_30_SIZE /* 30 (unused) */ + \
1857 MSG_SYS_STTY_ALT_SIZE /* 31 */ + \
1858 MSG_SYS_GTTY_ALT_SIZE /* 32 */ + \
1860 /* sysset_t[1] - System Calls [33 - 64] */ \
1861 MSG_SYS_ACCESS_ALT_SIZE /* 33 */ + \
1862 MSG_SYS_NICE_ALT_SIZE /* 34 */ + \
1863 MSG_SYS_STATFS_ALT_SIZE /* 35 */ + \
1864 MSG_SYS_SYNC_ALT_SIZE /* 36 */ + \
1865 MSG_SYS_KILL_ALT_SIZE /* 37 */ + \
1866 MSG_SYS_FSTATFS_ALT_SIZE /* 38 */ + \
1867 MSG_SYS_PGRPSYS_ALT_SIZE /* 39 */ + \
1868 MSG_SYS_UUCOPYSTR_ALT_SIZE /* 40 */ + \
1869 MSG_SYS_41_SIZE /* 41 (unused) */ + \
1870 MSG_SYS_PIPE_ALT_SIZE /* 42 */ + \
1871 MSG_SYS_TIMES_ALT_SIZE /* 43 */ + \
1872 MSG_SYS_PROFIL_ALT_SIZE /* 44 */ + \
1873 MSG_SYS_FACCESSAT_ALT_SIZE /* 45 */ + \
1874 MSG_SYS_SETGID_ALT_SIZE /* 46 */ + \
1875 MSG_SYS_GETGID_ALT_SIZE /* 47 */ + \
1876 MSG_SYS_48_SIZE /* 48 (unused) */ + \
1877 MSG_SYS_MSGSYS_ALT_SIZE /* 49 */ + \
1878 MSG_SYS_SYSI86_ALT_SIZE /* 50 */ + \
1879 MSG_SYS_ACCT_ALT_SIZE /* 51 */ + \
1880 MSG_SYS_SHMSYS_ALT_SIZE /* 52 */ + \
1881 MSG_SYS_SEMSYS_ALT_SIZE /* 53 */ + \
1882 MSG_SYS_IOCTL_ALT_SIZE /* 54 */ + \
1883 MSG_SYS_UADMIN_ALT_SIZE /* 55 */ + \
1884 MSG_SYS_FCHOWNAT_ALT_SIZE /* 56 */ + \
1885 MSG_SYS_UTSSYS_ALT_SIZE /* 57 */ + \
1886 MSG_SYS_FDSYNC_ALT_SIZE /* 58 */ + \
1887 MSG_SYS_EXECVE_ALT_SIZE /* 59 */ + \
1888 MSG_SYS_UMASK_ALT_SIZE /* 60 */ + \
1889 MSG_SYS_CHROOT_ALT_SIZE /* 61 */ + \
1890 MSG_SYS_FCNTL_ALT_SIZE /* 62 */ + \
1891 MSG_SYS_ULIMIT_ALT_SIZE /* 63 */ + \
1892 MSG_SYS_RENAMEAT_ALT_SIZE /* 64 */ + \
1894 /* sysset_t[2] - System Calls [65 - 96] */ \
1895 MSG_SYS_UNLINKAT_ALT_SIZE /* 65 */ + \
1896 MSG_SYS_FSTATAT_ALT_SIZE /* 66 */ + \
1897 MSG_SYS_FSTATAT64_ALT_SIZE /* 67 */ + \
1898 MSG_SYS_OPENAT_ALT_SIZE /* 68 */ + \
1899 MSG_SYS_OPENAT64_ALT_SIZE /* 69 */ + \
1900 MSG_SYS_TASKSYS_ALT_SIZE /* 70 */ + \
1901 MSG_SYS_ACCTCTL_ALT_SIZE /* 71 */ + \
1902 MSG_SYS_EXACCTSYS_ALT_SIZE /* 72 */ + \
1903 MSG_SYS_GETPAGESIZES_ALT_SIZE /* 73 */ + \
1904 MSG_SYS_RCTLSYS_ALT_SIZE /* 74 */ + \
1905 MSG_SYS_SIDSYS_ALT_SIZE /* 75 */ + \
1906 MSG_SYS_76_SIZE /* 76 (unused) */ + \
1907 MSG_SYS_LWP_PARK_ALT_SIZE /* 77 */ + \
1908 MSG_SYS_SENDFILEV_ALT_SIZE /* 78 */ + \
1909 MSG_SYS_RMDIR_ALT_SIZE /* 79 */ + \
1910 MSG_SYS_MKDIR_ALT_SIZE /* 80 */ + \
1911 MSG_SYS_GETDENTS_ALT_SIZE /* 81 */ + \
1912 MSG_SYS_PRIVSYS_ALT_SIZE /* 82 */ + \
1913 MSG_SYS_UCREDSYS_ALT_SIZE /* 83 */ + \
1914 MSG_SYS_SYSFS_ALT_SIZE /* 84 */ + \
1915 MSG_SYS_GETMSG_ALT_SIZE /* 85 */ + \
1916 MSG_SYS_PUTMSG_ALT_SIZE /* 86 */ + \
1917 MSG_SYS_87_SIZE /* 87 (unused) */ + \
1918 MSG_SYS_LSTAT_ALT_SIZE /* 88 */ + \
1919 MSG_SYS_SYMLINK_ALT_SIZE /* 89 */ + \
1920 MSG_SYS_READLINK_ALT_SIZE /* 90 */ + \
1921 MSG_SYS_SETGROUPS_ALT_SIZE /* 91 */ + \
1922 MSG_SYS_GETGROUPS_ALT_SIZE /* 92 */ + \
1923 MSG_SYS_FCHMOD_ALT_SIZE /* 93 */ + \
1924 MSG_SYS_FCHOWN_ALT_SIZE /* 94 */ + \
1925 MSG_SYS_SIGPROCMASK_ALT_SIZE /* 95 */ + \
1926 MSG_SYS_SIGSUSPEND_ALT_SIZE /* 96 */ + \
1928 /* sysset_t[3] - System Calls [97 - 128] */ \
1929 MSG_SYS_SIGALTSTACK_ALT_SIZE /* 97 */ + \
1930 MSG_SYS_SIGACTION_ALT_SIZE /* 98 */ + \
1931 MSG_SYS_SIGPENDING_ALT_SIZE /* 99 */ + \
1932 MSG_SYS_CONTEXT_ALT_SIZE /* 100 */ + \
1933 MSG_SYS_101_SIZE /* 101 (unused) */ + \
1934 MSG_SYS_102_SIZE /* 102 (unused) */ + \
1935 MSG_SYS_STATVFS_ALT_SIZE /* 103 */ + \
1936 MSG_SYS_FSTATVFS_ALT_SIZE /* 104 */ + \
1937 MSG_SYS_GETLOADAVG_ALT_SIZE /* 105 */ + \
1938 MSG_SYS_NFSSYS_ALT_SIZE /* 106 */ + \
1939 MSG_SYS_WAITID_ALT_SIZE /* 107 */ + \
1940 MSG_SYS_SIGSENDSYS_ALT_SIZE /* 108 */ + \
1941 MSG_SYS_HRTSYS_ALT_SIZE /* 109 */ + \
1942 MSG_SYS_UTIMESYS_ALT_SIZE /* 110 */ + \
1943 MSG_SYS_SIGRESEND_ALT_SIZE /* 111 */ + \
1944 MSG_SYS_PRIOCNTLSYS_ALT_SIZE /* 112 */ + \
1945 MSG_SYS_PATHCONF_ALT_SIZE /* 113 */ + \
1946 MSG_SYS_MINCORE_ALT_SIZE /* 114 */ + \
1947 MSG_SYS_MMAP_ALT_SIZE /* 115 */ + \
1948 MSG_SYS_MPROTECT_ALT_SIZE /* 116 */ + \
1949 MSG_SYS_MUNMAP_ALT_SIZE /* 117 */ + \
1950 MSG_SYS_FPATHCONF_ALT_SIZE /* 118 */ + \
1951 MSG_SYS_VFORK_ALT_SIZE /* 119 */ + \
1952 MSG_SYS_FCHDIR_ALT_SIZE /* 120 */ + \
1953 MSG_SYS_READV_ALT_SIZE /* 121 */ + \
1954 MSG_SYS_WRITEV_ALT_SIZE /* 122 */ + \
1955 MSG_SYS_123_SIZE /* 123 (unused) */ + \
1956 MSG_SYS_124_SIZE /* 124 (unused) */ + \
1957 MSG_SYS_125_SIZE /* 125 (unused) */ + \
1958 MSG_SYS_126_SIZE /* 126 (unused) */ + \
1959 MSG_SYS_MMAPOBJ_ALT_SIZE /* 127 */ + \
1960 MSG_SYS_SETRLIMIT_ALT_SIZE /* 128 */ + \
1962 /* sysset_t[4] - System Calls [129 - 160] */ \
1963 MSG_SYS_GETRLIMIT_ALT_SIZE /* 129 */ + \
1964 MSG_SYS_LCHOWN_ALT_SIZE /* 130 */ + \
1965 MSG_SYS_MEMCNTL_ALT_SIZE /* 131 */ + \
1966 MSG_SYS_GETPMSG_ALT_SIZE /* 132 */ + \
1967 MSG_SYS_PUTPMSG_ALT_SIZE /* 133 */ + \
1968 MSG_SYS_RENAME_ALT_SIZE /* 134 */ + \
1969 MSG_SYS_UNAME_ALT_SIZE /* 135 */ + \
1970 MSG_SYS_SETEGID_ALT_SIZE /* 136 */ + \
1971 MSG_SYS_SYSCONFIG_ALT_SIZE /* 137 */ + \
1972 MSG_SYS_ADJTIME_ALT_SIZE /* 138 */ + \
1973 MSG_SYS_SYSTEMINFO_ALT_SIZE /* 139 */ + \
1974 MSG_SYS_SHAREFS_ALT_SIZE /* 140 */ + \
1975 MSG_SYS_SETEUID_ALT_SIZE /* 141 */ + \
1976 MSG_SYS_FORKSYS_ALT_SIZE /* 142 */ + \
1977 MSG_SYS_143_SIZE /* 143 (unused) */ + \
1978 MSG_SYS_SIGTIMEDWAIT_ALT_SIZE /* 144 */ + \
1979 MSG_SYS_LWP_INFO_ALT_SIZE /* 145 */ + \
1980 MSG_SYS_YIELD_ALT_SIZE /* 146 */ + \
1981 MSG_SYS_147_SIZE /* 147 (unused) */ + \
1982 MSG_SYS_LWP_SEMA_POST_ALT_SIZE /* 148 */ + \
1983 MSG_SYS_LWP_SEMA_TRYWAIT_ALT_SIZE /* 149 */ + \
1984 MSG_SYS_LWP_DETACH_ALT_SIZE /* 150 */ + \
1985 MSG_SYS_CORECTL_ALT_SIZE /* 151 */ + \
1986 MSG_SYS_MODCTL_ALT_SIZE /* 152 */ + \
1987 MSG_SYS_FCHROOT_ALT_SIZE /* 153 */ + \
1988 MSG_SYS_154_SIZE /* 154 (unused) */ + \
1989 MSG_SYS_VHANGUP_ALT_SIZE /* 155 */ + \
1990 MSG_SYS_GETTIMEOFDAY_ALT_SIZE /* 156 */ + \
1991 MSG_SYS_GETITIMER_ALT_SIZE /* 157 */ + \
1992 MSG_SYS_SETITIMER_ALT_SIZE /* 158 */ + \
1993 MSG_SYS_LWP_CREATE_ALT_SIZE /* 159 */ + \
1994 MSG_SYS_LWP_EXIT_ALT_SIZE /* 160 */ + \
1996 /* sysset_t[5] - System Calls [161 - 192] */ \
1997 MSG_SYS_LWP_SUSPEND_ALT_SIZE /* 161 */ + \
1998 MSG_SYS_LWP_CONTINUE_ALT_SIZE /* 162 */ + \
1999 MSG_SYS_LWP_KILL_ALT_SIZE /* 163 */ + \
2000 MSG_SYS_LWP_SELF_ALT_SIZE /* 164 */ + \
2001 MSG_SYS_LWP_SIGMASK_ALT_SIZE /* 165 */ + \
2002 MSG_SYS_LWP_PRIVATE_ALT_SIZE /* 166 */ + \
2003 MSG_SYS_LWP_WAIT_ALT_SIZE /* 167 */ + \
2004 MSG_SYS_LWP_MUTEX_WAKEUP_ALT_SIZE /* 168 */ + \
2005 MSG_SYS_169_SIZE /* 169 (unused) */ + \
2006 MSG_SYS_LWP_COND_WAIT_ALT_SIZE /* 170 */ + \
2007 MSG_SYS_LWP_COND_SIGNAL_ALT_SIZE /* 171 */ + \
2008 MSG_SYS_LWP_COND_BROADCAST_ALT_SIZE /* 172 */ + \
2009 MSG_SYS_PREAD_ALT_SIZE /* 173 */ + \
2010 MSG_SYS_PWRITE_ALT_SIZE /* 174 */ + \
2011 MSG_SYS_LLSEEK_ALT_SIZE /* 175 */ + \
2012 MSG_SYS_INST_SYNC_ALT_SIZE /* 176 */ + \
2013 MSG_SYS_BRAND_ALT_SIZE /* 177 */ + \
2014 MSG_SYS_KAIO_ALT_SIZE /* 178 */ + \
2015 MSG_SYS_CPC_ALT_SIZE /* 179 */ + \
2016 MSG_SYS_LGRPSYS_ALT_SIZE /* 180 */ + \
2017 MSG_SYS_RUSAGESYS_ALT_SIZE /* 181 */ + \
2018 MSG_SYS_PORT_ALT_SIZE /* 182 */ + \
2019 MSG_SYS_POLLSYS_ALT_SIZE /* 183 */ + \
2020 MSG_SYS_LABELSYS_ALT_SIZE /* 184 */ + \
2021 MSG_SYS_ACL_ALT_SIZE /* 185 */ + \
2022 MSG_SYS_AUDITSYS_ALT_SIZE /* 186 */ + \
2023 MSG_SYS_PROCESSOR_BIND_ALT_SIZE /* 187 */ + \
2024 MSG_SYS_PROCESSOR_INFO_ALT_SIZE /* 188 */ + \
2025 MSG_SYS_P_ONLINE_ALT_SIZE /* 189 */ + \
2026 MSG_SYS_SIGQUEUE_ALT_SIZE /* 190 */ + \
2027 MSG_SYS_CLOCK_GETTIME_ALT_SIZE /* 191 */ + \
2028 MSG_SYS_CLOCK_SETTIME_ALT_SIZE /* 192 */ + \
2030 /* sysset_t[6] - System Calls [193 - 224] */ \
2031 MSG_SYS_CLOCK_GETRES_ALT_SIZE /* 193 */ + \
2032 MSG_SYS_TIMER_CREATE_ALT_SIZE /* 194 */ + \
2033 MSG_SYS_TIMER_DELETE_ALT_SIZE /* 195 */ + \
2034 MSG_SYS_TIMER_SETTIME_ALT_SIZE /* 196 */ + \
2035 MSG_SYS_TIMER_GETTIME_ALT_SIZE /* 197 */ + \
2036 MSG_SYS_TIMER_GETOVERRUN_ALT_SIZE /* 198 */ + \
2037 MSG_SYS_NANOSLEEP_ALT_SIZE /* 199 */ + \
2038 MSG_SYS_FACL_ALT_SIZE /* 200 */ + \
2039 MSG_SYS_DOOR_ALT_SIZE /* 201 */ + \
2040 MSG_SYS_SETREUID_ALT_SIZE /* 202 */ + \
2041 MSG_SYS_SETREGID_ALT_SIZE /* 203 */ + \
2042 MSG_SYS_INSTALL_UTRAP_ALT_SIZE /* 204 */ + \
2043 MSG_SYS_SIGNOTIFY_ALT_SIZE /* 205 */ + \
2044 MSG_SYS_SCHEDCTL_ALT_SIZE /* 206 */ + \
2045 MSG_SYS_PSET_ALT_SIZE /* 207 */ + \
2046 MSG_SYS_SPARC_UTRAP_INSTALL_ALT_SIZE /* 208 */ + \
2047 MSG_SYS_RESOLVEPATH_ALT_SIZE /* 209 */ + \
2048 MSG_SYS_LWP_MUTEX_TIMEDLOCK_ALT_SIZE /* 210 */ + \
2049 MSG_SYS_LWP_SEMA_TIMEDWAIT_ALT_SIZE /* 211 */ + \
2050 MSG_SYS_LWP_RWLOCK_SYS_ALT_SIZE /* 212 */ + \
2051 MSG_SYS_GETDENTS64_ALT_SIZE /* 213 */ + \
2052 MSG_SYS_MMAP64_ALT_SIZE /* 214 */ + \
2053 MSG_SYS_STAT64_ALT_SIZE /* 215 */ + \
2054 MSG_SYS_LSTAT64_ALT_SIZE /* 216 */ + \
2055 MSG_SYS_FSTAT64_ALT_SIZE /* 217 */ + \
2056 MSG_SYS_STATVFS64_ALT_SIZE /* 218 */ + \
2057 MSG_SYS_FSTATVFS64_ALT_SIZE /* 219 */ + \
2058 MSG_SYS_SETRLIMIT64_ALT_SIZE /* 220 */ + \
2059 MSG_SYS_GETRLIMIT64_ALT_SIZE /* 221 */ + \
2060 MSG_SYS_PREAD64_ALT_SIZE /* 222 */ + \
2061 MSG_SYS_PWRITE64_ALT_SIZE /* 223 */ + \
2062 MSG_SYS_224_SIZE /* 224 (unused) */ + \
2064 /* sysset_t[7] - System Calls [225 - 256] */ \
2065 MSG_SYS_OPEN64_ALT_SIZE /* 225 */ + \
2066 MSG_SYS_RPCSYS_ALT_SIZE /* 226 */ + \
2067 MSG_SYS_ZONE_ALT_SIZE /* 227 */ + \
2068 MSG_SYS_AUTOFSSYS_ALT_SIZE /* 228 */ + \
2069 MSG_SYS_GETCWD_ALT_SIZE /* 229 */ + \
2070 MSG_SYS_SO_SOCKET_ALT_SIZE /* 230 */ + \
2071 MSG_SYS_SO_SOCKETPAIR_ALT_SIZE /* 231 */ + \
2072 MSG_SYS_BIND_ALT_SIZE /* 232 */ + \
2073 MSG_SYS_LISTEN_ALT_SIZE /* 233 */ + \
2074 MSG_SYS_ACCEPT_ALT_SIZE /* 234 */ + \
2075 MSG_SYS_CONNECT_ALT_SIZE /* 235 */ + \
2076 MSG_SYS_SHUTDOWN_ALT_SIZE /* 236 */ + \
2077 MSG_SYS_RECV_ALT_SIZE /* 237 */ + \
2078 MSG_SYS_RECVFROM_ALT_SIZE /* 238 */ + \
2079 MSG_SYS_RECVMSG_ALT_SIZE /* 239 */ + \
2080 MSG_SYS_SEND_ALT_SIZE /* 240 */ + \
2081 MSG_SYS_SENDMSG_ALT_SIZE /* 241 */ + \
2082 MSG_SYS_SENDTO_ALT_SIZE /* 242 */ + \
2083 MSG_SYS_GETPEERNAME_ALT_SIZE /* 243 */ + \
2084 MSG_SYS_GETSOCKNAME_ALT_SIZE /* 244 */ + \
2085 MSG_SYS_GETSOCKOPT_ALT_SIZE /* 245 */ + \
2086 MSG_SYS_SETSOCKOPT_ALT_SIZE /* 246 */ + \
2087 MSG_SYS_SOCKCONFIG_ALT_SIZE /* 247 */ + \
2088 MSG_SYS_NTP_GETTIME_ALT_SIZE /* 248 */ + \
2089 MSG_SYS_NTP_ADJTIME_ALT_SIZE /* 249 */ + \
2090 MSG_SYS_LWP_MUTEX_UNLOCK_ALT_SIZE /* 250 */ + \
2091 MSG_SYS_LWP_MUTEX_TRYLOCK_ALT_SIZE /* 251 */ + \
2092 MSG_SYS_LWP_MUTEX_REGISTER_ALT_SIZE /* 252 */ + \
2093 MSG_SYS_CLADM_ALT_SIZE /* 253 */ + \
2094 MSG_SYS_UUCOPY_ALT_SIZE /* 254 */ + \
2095 MSG_SYS_UMOUNT2_ALT_SIZE /* 255 */ + \
2096 3 /* 256 (unused) */ + \
2098 /* sysset_t[8] - System Calls [257 - 288] */ \
2099 (32 * 3) /* 257 - 288 (unused) */ + \
2101 /* sysset_t[9] - System Calls [289 - 320] */ \
2102 (32 * 3) /* 289 - 320 (unused) */ + \
2104 /* sysset_t[10] - System Calls [321 - 352] */ \
2105 (32 * 3) /* 321 - 352 (unused) */ + \
2107 /* sysset_t[11] - System Calls [353 - 384] */ \
2108 (32 * 3) /* 353 - 384 (unused) */ + \
2110 /* sysset_t[12] - System Calls [385 - 416] */ \
2111 (32 * 3) /* 385 - 416 (unused) */ + \
2113 /* sysset_t[13] - System Calls [417 - 448] */ \
2114 (32 * 3) /* 417 - 448 (unused) */ + \
2116 /* sysset_t[14] - System Calls [449 - 480] */ \
2117 (32 * 3) /* 449 - 480 (unused) */ + \
2119 /* sysset_t[15] - System Calls [481 - 512] */ \
2120 (32 * 3) /* 481 - 512 (unused) */ + \
2122 CONV_INV_BUFSIZE + CONV_EXPN_FIELD_DEF_SUFFIX_SIZE
2125 * Ensure that Conv_cnote_sysset_buf_t is large enough:
2127 * SYSSET_FLAGSZ is the real minimum size of the buffer required by
2128 * conv_cnote_sysset(). However, Conv_cnote_sysset_buf_t
2129 * uses CONV_CNOTE_SYSSET_BUFSIZE to set the buffer size. We do
2130 * things this way because the definition of SYSSET_FLAGSZ uses information
2131 * that is not available in the environment of other programs
2132 * that include the conv.h header file.
2134 #if (CONV_CNOTE_SYSSET_BUFSIZE != SYSSET_FLAGSZ) && !defined(__lint)
2135 #define REPORT_BUFSIZE SYSSET_FLAGSZ
2136 #include "report_bufsize.h"
2137 #error "CONV_CNOTE_SYSSET_BUFSIZE does not match SYSSET_FLAGSZ"
2141 conv_cnote_sysset(uint32_t *maskarr
, int n_mask
,
2142 Conv_fmt_flags_t fmt_flags
, Conv_cnote_sysset_buf_t
*cnote_sysset_buf
)
2146 static const Val_desc vda0
[] = { /* System Calls [1 - 32] */
2147 { 0x00000001, MSG_SYS_EXIT_ALT
},
2148 { 0x00000002, MSG_SYS_2
},
2149 { 0x00000004, MSG_SYS_READ_ALT
},
2150 { 0x00000008, MSG_SYS_WRITE_ALT
},
2151 { 0x00000010, MSG_SYS_OPEN_ALT
},
2152 { 0x00000020, MSG_SYS_CLOSE_ALT
},
2153 { 0x00000040, MSG_SYS_7
},
2154 { 0x00000080, MSG_SYS_8
},
2155 { 0x00000100, MSG_SYS_LINK_ALT
},
2156 { 0x00000200, MSG_SYS_UNLINK_ALT
},
2157 { 0x00000400, MSG_SYS_11
},
2158 { 0x00000800, MSG_SYS_CHDIR_ALT
},
2159 { 0x00001000, MSG_SYS_TIME_ALT
},
2160 { 0x00002000, MSG_SYS_MKNOD_ALT
},
2161 { 0x00004000, MSG_SYS_CHMOD_ALT
},
2162 { 0x00008000, MSG_SYS_CHOWN_ALT
},
2163 { 0x00010000, MSG_SYS_BRK_ALT
},
2164 { 0x00020000, MSG_SYS_STAT_ALT
},
2165 { 0x00040000, MSG_SYS_LSEEK_ALT
},
2166 { 0x00080000, MSG_SYS_GETPID_ALT
},
2167 { 0x00100000, MSG_SYS_MOUNT_ALT
},
2168 { 0x00200000, MSG_SYS_22
},
2169 { 0x00400000, MSG_SYS_SETUID_ALT
},
2170 { 0x00800000, MSG_SYS_GETUID_ALT
},
2171 { 0x01000000, MSG_SYS_STIME_ALT
},
2172 { 0x02000000, MSG_SYS_PCSAMPLE_ALT
},
2173 { 0x04000000, MSG_SYS_ALARM_ALT
},
2174 { 0x08000000, MSG_SYS_FSTAT_ALT
},
2175 { 0x10000000, MSG_SYS_PAUSE_ALT
},
2176 { 0x20000000, MSG_SYS_30
},
2177 { 0x40000000, MSG_SYS_STTY_ALT
},
2178 { 0x80000000, MSG_SYS_GTTY_ALT
},
2181 static const Val_desc vda1
[] = { /* System Calls [33 - 64] */
2182 { 0x00000001, MSG_SYS_ACCESS_ALT
},
2183 { 0x00000002, MSG_SYS_NICE_ALT
},
2184 { 0x00000004, MSG_SYS_STATFS_ALT
},
2185 { 0x00000008, MSG_SYS_SYNC_ALT
},
2186 { 0x00000010, MSG_SYS_KILL_ALT
},
2187 { 0x00000020, MSG_SYS_FSTATFS_ALT
},
2188 { 0x00000040, MSG_SYS_PGRPSYS_ALT
},
2189 { 0x00000080, MSG_SYS_UUCOPYSTR_ALT
},
2190 { 0x00000100, MSG_SYS_41
},
2191 { 0x00000200, MSG_SYS_PIPE_ALT
},
2192 { 0x00000400, MSG_SYS_TIMES_ALT
},
2193 { 0x00000800, MSG_SYS_PROFIL_ALT
},
2194 { 0x00001000, MSG_SYS_FACCESSAT_ALT
},
2195 { 0x00002000, MSG_SYS_SETGID_ALT
},
2196 { 0x00004000, MSG_SYS_GETGID_ALT
},
2197 { 0x00008000, MSG_SYS_48
},
2198 { 0x00010000, MSG_SYS_MSGSYS_ALT
},
2199 { 0x00020000, MSG_SYS_SYSI86_ALT
},
2200 { 0x00040000, MSG_SYS_ACCT_ALT
},
2201 { 0x00080000, MSG_SYS_SHMSYS_ALT
},
2202 { 0x00100000, MSG_SYS_SEMSYS_ALT
},
2203 { 0x00200000, MSG_SYS_IOCTL_ALT
},
2204 { 0x00400000, MSG_SYS_UADMIN_ALT
},
2205 { 0x00800000, MSG_SYS_FCHOWNAT_ALT
},
2206 { 0x01000000, MSG_SYS_UTSSYS_ALT
},
2207 { 0x0200000, MSG_SYS_FDSYNC_ALT
},
2208 { 0x04000000, MSG_SYS_EXECVE_ALT
},
2209 { 0x08000000, MSG_SYS_UMASK_ALT
},
2210 { 0x10000000, MSG_SYS_CHROOT_ALT
},
2211 { 0x20000000, MSG_SYS_FCNTL_ALT
},
2212 { 0x40000000, MSG_SYS_ULIMIT_ALT
},
2213 { 0x80000000, MSG_SYS_RENAMEAT_ALT
},
2216 static const Val_desc vda2
[] = { /* System Calls [65 - 96] */
2217 { 0x00000001, MSG_SYS_UNLINKAT_ALT
},
2218 { 0x00000002, MSG_SYS_FSTATAT_ALT
},
2219 { 0x00000004, MSG_SYS_FSTATAT64_ALT
},
2220 { 0x00000008, MSG_SYS_OPENAT_ALT
},
2221 { 0x00000010, MSG_SYS_OPENAT64_ALT
},
2222 { 0x00000020, MSG_SYS_TASKSYS_ALT
},
2223 { 0x00000040, MSG_SYS_ACCTCTL_ALT
},
2224 { 0x00000080, MSG_SYS_EXACCTSYS_ALT
},
2225 { 0x00000100, MSG_SYS_GETPAGESIZES_ALT
},
2226 { 0x00000200, MSG_SYS_RCTLSYS_ALT
},
2227 { 0x00000400, MSG_SYS_SIDSYS_ALT
},
2228 { 0x00000800, MSG_SYS_76
},
2229 { 0x00001000, MSG_SYS_LWP_PARK_ALT
},
2230 { 0x00002000, MSG_SYS_SENDFILEV_ALT
},
2231 { 0x00004000, MSG_SYS_RMDIR_ALT
},
2232 { 0x00008000, MSG_SYS_MKDIR_ALT
},
2233 { 0x00010000, MSG_SYS_GETDENTS_ALT
},
2234 { 0x00020000, MSG_SYS_PRIVSYS_ALT
},
2235 { 0x00040000, MSG_SYS_UCREDSYS_ALT
},
2236 { 0x00080000, MSG_SYS_SYSFS_ALT
},
2237 { 0x00100000, MSG_SYS_GETMSG_ALT
},
2238 { 0x00200000, MSG_SYS_PUTMSG_ALT
},
2239 { 0x00400000, MSG_SYS_87
},
2240 { 0x00800000, MSG_SYS_LSTAT_ALT
},
2241 { 0x01000000, MSG_SYS_SYMLINK_ALT
},
2242 { 0x02000000, MSG_SYS_READLINK_ALT
},
2243 { 0x04000000, MSG_SYS_SETGROUPS_ALT
},
2244 { 0x08000000, MSG_SYS_GETGROUPS_ALT
},
2245 { 0x10000000, MSG_SYS_FCHMOD_ALT
},
2246 { 0x20000000, MSG_SYS_FCHOWN_ALT
},
2247 { 0x40000000, MSG_SYS_SIGPROCMASK_ALT
},
2248 { 0x80000000, MSG_SYS_SIGSUSPEND_ALT
},
2251 static const Val_desc vda3
[] = { /* System Calls [97 - 128] */
2252 { 0x00000001, MSG_SYS_SIGALTSTACK_ALT
},
2253 { 0x00000002, MSG_SYS_SIGACTION_ALT
},
2254 { 0x00000004, MSG_SYS_SIGPENDING_ALT
},
2255 { 0x00000008, MSG_SYS_CONTEXT_ALT
},
2256 { 0x00000010, MSG_SYS_101
},
2257 { 0x00000020, MSG_SYS_102
},
2258 { 0x00000040, MSG_SYS_STATVFS_ALT
},
2259 { 0x00000080, MSG_SYS_FSTATVFS_ALT
},
2260 { 0x00000100, MSG_SYS_GETLOADAVG_ALT
},
2261 { 0x00000200, MSG_SYS_NFSSYS_ALT
},
2262 { 0x00000400, MSG_SYS_WAITID_ALT
},
2263 { 0x00000800, MSG_SYS_SIGSENDSYS_ALT
},
2264 { 0x00001000, MSG_SYS_HRTSYS_ALT
},
2265 { 0x00002000, MSG_SYS_UTIMESYS_ALT
},
2266 { 0x00004000, MSG_SYS_SIGRESEND_ALT
},
2267 { 0x00008000, MSG_SYS_PRIOCNTLSYS_ALT
},
2268 { 0x00010000, MSG_SYS_PATHCONF_ALT
},
2269 { 0x00020000, MSG_SYS_MINCORE_ALT
},
2270 { 0x00040000, MSG_SYS_MMAP_ALT
},
2271 { 0x00080000, MSG_SYS_MPROTECT_ALT
},
2272 { 0x00100000, MSG_SYS_MUNMAP_ALT
},
2273 { 0x00200000, MSG_SYS_FPATHCONF_ALT
},
2274 { 0x00400000, MSG_SYS_VFORK_ALT
},
2275 { 0x00800000, MSG_SYS_FCHDIR_ALT
},
2276 { 0x01000000, MSG_SYS_READV_ALT
},
2277 { 0x02000000, MSG_SYS_WRITEV_ALT
},
2278 { 0x04000000, MSG_SYS_123
},
2279 { 0x08000000, MSG_SYS_124
},
2280 { 0x10000000, MSG_SYS_125
},
2281 { 0x20000000, MSG_SYS_126
},
2282 { 0x40000000, MSG_SYS_MMAPOBJ_ALT
},
2283 { 0x80000000, MSG_SYS_SETRLIMIT_ALT
},
2286 static const Val_desc vda4
[] = { /* System Calls [129 - 160] */
2287 { 0x00000001, MSG_SYS_GETRLIMIT_ALT
},
2288 { 0x00000002, MSG_SYS_LCHOWN_ALT
},
2289 { 0x00000004, MSG_SYS_MEMCNTL_ALT
},
2290 { 0x00000008, MSG_SYS_GETPMSG_ALT
},
2291 { 0x00000010, MSG_SYS_PUTPMSG_ALT
},
2292 { 0x00000020, MSG_SYS_RENAME_ALT
},
2293 { 0x00000040, MSG_SYS_UNAME_ALT
},
2294 { 0x00000080, MSG_SYS_SETEGID_ALT
},
2295 { 0x00000100, MSG_SYS_SYSCONFIG_ALT
},
2296 { 0x00000200, MSG_SYS_ADJTIME_ALT
},
2297 { 0x00000400, MSG_SYS_SYSTEMINFO_ALT
},
2298 { 0x00000800, MSG_SYS_SHAREFS_ALT
},
2299 { 0x00001000, MSG_SYS_SETEUID_ALT
},
2300 { 0x00002000, MSG_SYS_FORKSYS_ALT
},
2301 { 0x00004000, MSG_SYS_143
},
2302 { 0x00008000, MSG_SYS_SIGTIMEDWAIT_ALT
},
2303 { 0x00010000, MSG_SYS_LWP_INFO_ALT
},
2304 { 0x00020000, MSG_SYS_YIELD_ALT
},
2305 { 0x00040000, MSG_SYS_147
},
2306 { 0x00080000, MSG_SYS_LWP_SEMA_POST_ALT
},
2307 { 0x00100000, MSG_SYS_LWP_SEMA_TRYWAIT_ALT
},
2308 { 0x00200000, MSG_SYS_LWP_DETACH_ALT
},
2309 { 0x00400000, MSG_SYS_CORECTL_ALT
},
2310 { 0x00800000, MSG_SYS_MODCTL_ALT
},
2311 { 0x01000000, MSG_SYS_FCHROOT_ALT
},
2312 { 0x02000000, MSG_SYS_154
},
2313 { 0x04000000, MSG_SYS_VHANGUP_ALT
},
2314 { 0x08000000, MSG_SYS_GETTIMEOFDAY_ALT
},
2315 { 0x10000000, MSG_SYS_GETITIMER_ALT
},
2316 { 0x20000000, MSG_SYS_SETITIMER_ALT
},
2317 { 0x40000000, MSG_SYS_LWP_CREATE_ALT
},
2318 { 0x80000000, MSG_SYS_LWP_EXIT_ALT
},
2321 static const Val_desc vda5
[] = { /* System Calls [161 - 192] */
2322 { 0x00000001, MSG_SYS_LWP_SUSPEND_ALT
},
2323 { 0x00000002, MSG_SYS_LWP_CONTINUE_ALT
},
2324 { 0x00000004, MSG_SYS_LWP_KILL_ALT
},
2325 { 0x00000008, MSG_SYS_LWP_SELF_ALT
},
2326 { 0x00000010, MSG_SYS_LWP_SIGMASK_ALT
},
2327 { 0x00000020, MSG_SYS_LWP_PRIVATE_ALT
},
2328 { 0x00000040, MSG_SYS_LWP_WAIT_ALT
},
2329 { 0x00000080, MSG_SYS_LWP_MUTEX_WAKEUP_ALT
},
2330 { 0x00000100, MSG_SYS_169
},
2331 { 0x00000200, MSG_SYS_LWP_COND_WAIT_ALT
},
2332 { 0x00000400, MSG_SYS_LWP_COND_SIGNAL_ALT
},
2333 { 0x00000800, MSG_SYS_LWP_COND_BROADCAST_ALT
},
2334 { 0x00001000, MSG_SYS_PREAD_ALT
},
2335 { 0x00002000, MSG_SYS_PWRITE_ALT
},
2336 { 0x00004000, MSG_SYS_LLSEEK_ALT
},
2337 { 0x00008000, MSG_SYS_INST_SYNC_ALT
},
2338 { 0x00010000, MSG_SYS_BRAND_ALT
},
2339 { 0x00020000, MSG_SYS_KAIO_ALT
},
2340 { 0x00040000, MSG_SYS_CPC_ALT
},
2341 { 0x00080000, MSG_SYS_LGRPSYS_ALT
},
2342 { 0x00100000, MSG_SYS_RUSAGESYS_ALT
},
2343 { 0x00200000, MSG_SYS_PORT_ALT
},
2344 { 0x00400000, MSG_SYS_POLLSYS_ALT
},
2345 { 0x00800000, MSG_SYS_LABELSYS_ALT
},
2346 { 0x01000000, MSG_SYS_ACL_ALT
},
2347 { 0x02000000, MSG_SYS_AUDITSYS_ALT
},
2348 { 0x04000000, MSG_SYS_PROCESSOR_BIND_ALT
},
2349 { 0x08000000, MSG_SYS_PROCESSOR_INFO_ALT
},
2350 { 0x10000000, MSG_SYS_P_ONLINE_ALT
},
2351 { 0x20000000, MSG_SYS_SIGQUEUE_ALT
},
2352 { 0x40000000, MSG_SYS_CLOCK_GETTIME_ALT
},
2353 { 0x80000000, MSG_SYS_CLOCK_SETTIME_ALT
},
2356 static const Val_desc vda6
[] = { /* System Calls [193 - 224] */
2357 { 0x00000001, MSG_SYS_CLOCK_GETRES_ALT
},
2358 { 0x00000002, MSG_SYS_TIMER_CREATE_ALT
},
2359 { 0x00000004, MSG_SYS_TIMER_DELETE_ALT
},
2360 { 0x00000008, MSG_SYS_TIMER_SETTIME_ALT
},
2361 { 0x00000010, MSG_SYS_TIMER_GETTIME_ALT
},
2362 { 0x00000020, MSG_SYS_TIMER_GETOVERRUN_ALT
},
2363 { 0x00000040, MSG_SYS_NANOSLEEP_ALT
},
2364 { 0x00000080, MSG_SYS_FACL_ALT
},
2365 { 0x00000100, MSG_SYS_DOOR_ALT
},
2366 { 0x00000200, MSG_SYS_SETREUID_ALT
},
2367 { 0x00000400, MSG_SYS_SETREGID_ALT
},
2368 { 0x00000800, MSG_SYS_INSTALL_UTRAP_ALT
},
2369 { 0x00001000, MSG_SYS_SIGNOTIFY_ALT
},
2370 { 0x00002000, MSG_SYS_SCHEDCTL_ALT
},
2371 { 0x00004000, MSG_SYS_PSET_ALT
},
2372 { 0x00008000, MSG_SYS_SPARC_UTRAP_INSTALL_ALT
},
2373 { 0x00010000, MSG_SYS_RESOLVEPATH_ALT
},
2374 { 0x00020000, MSG_SYS_LWP_MUTEX_TIMEDLOCK_ALT
},
2375 { 0x00040000, MSG_SYS_LWP_SEMA_TIMEDWAIT_ALT
},
2376 { 0x00080000, MSG_SYS_LWP_RWLOCK_SYS_ALT
},
2377 { 0x00100000, MSG_SYS_GETDENTS64_ALT
},
2378 { 0x00200000, MSG_SYS_MMAP64_ALT
},
2379 { 0x00400000, MSG_SYS_STAT64_ALT
},
2380 { 0x00800000, MSG_SYS_LSTAT64_ALT
},
2381 { 0x01000000, MSG_SYS_FSTAT64_ALT
},
2382 { 0x02000000, MSG_SYS_STATVFS64_ALT
},
2383 { 0x04000000, MSG_SYS_FSTATVFS64_ALT
},
2384 { 0x08000000, MSG_SYS_SETRLIMIT64_ALT
},
2385 { 0x10000000, MSG_SYS_GETRLIMIT64_ALT
},
2386 { 0x20000000, MSG_SYS_PREAD64_ALT
},
2387 { 0x40000000, MSG_SYS_PWRITE64_ALT
},
2388 { 0x80000000, MSG_SYS_224
},
2391 static const Val_desc vda7
[] = { /* System Calls [225 - 256] */
2392 { 0x00000001, MSG_SYS_OPEN64_ALT
},
2393 { 0x00000002, MSG_SYS_RPCSYS_ALT
},
2394 { 0x00000004, MSG_SYS_ZONE_ALT
},
2395 { 0x00000008, MSG_SYS_AUTOFSSYS_ALT
},
2396 { 0x00000010, MSG_SYS_GETCWD_ALT
},
2397 { 0x00000020, MSG_SYS_SO_SOCKET_ALT
},
2398 { 0x00000040, MSG_SYS_SO_SOCKETPAIR_ALT
},
2399 { 0x00000080, MSG_SYS_BIND_ALT
},
2400 { 0x00000100, MSG_SYS_LISTEN_ALT
},
2401 { 0x00000200, MSG_SYS_ACCEPT_ALT
},
2402 { 0x00000400, MSG_SYS_CONNECT_ALT
},
2403 { 0x00000800, MSG_SYS_SHUTDOWN_ALT
},
2404 { 0x00001000, MSG_SYS_RECV_ALT
},
2405 { 0x00002000, MSG_SYS_RECVFROM_ALT
},
2406 { 0x00004000, MSG_SYS_RECVMSG_ALT
},
2407 { 0x00008000, MSG_SYS_SEND_ALT
},
2408 { 0x00010000, MSG_SYS_SENDMSG_ALT
},
2409 { 0x00020000, MSG_SYS_SENDTO_ALT
},
2410 { 0x00040000, MSG_SYS_GETPEERNAME_ALT
},
2411 { 0x00080000, MSG_SYS_GETSOCKNAME_ALT
},
2412 { 0x00100000, MSG_SYS_GETSOCKOPT_ALT
},
2413 { 0x00200000, MSG_SYS_SETSOCKOPT_ALT
},
2414 { 0x00400000, MSG_SYS_SOCKCONFIG_ALT
},
2415 { 0x00800000, MSG_SYS_NTP_GETTIME_ALT
},
2416 { 0x01000000, MSG_SYS_NTP_ADJTIME_ALT
},
2417 { 0x02000000, MSG_SYS_LWP_MUTEX_UNLOCK_ALT
},
2418 { 0x04000000, MSG_SYS_LWP_MUTEX_TRYLOCK_ALT
},
2419 { 0x08000000, MSG_SYS_LWP_MUTEX_REGISTER_ALT
},
2420 { 0x10000000, MSG_SYS_CLADM_ALT
},
2421 { 0x20000000, MSG_SYS_UUCOPY_ALT
},
2422 { 0x40000000, MSG_SYS_UMOUNT2_ALT
},
2426 static const conv_bitmaskset_desc_t bitmask_desc
[N_MASK
] = {
2427 { vda0
, 0x00000000 },
2428 { vda1
, 0x00000000 },
2429 { vda2
, 0x00000000 },
2430 { vda3
, 0x00000000 },
2431 { vda4
, 0x00000000 },
2432 { vda5
, 0x00000000 },
2433 { vda6
, 0x00000000 },
2434 { vda7
, 0x80000000 },
2435 { NULL
, 0xffffffff },
2436 { NULL
, 0xffffffff },
2437 { NULL
, 0xffffffff },
2438 { NULL
, 0xffffffff },
2439 { NULL
, 0xffffffff },
2440 { NULL
, 0xffffffff },
2441 { NULL
, 0xffffffff },
2442 { NULL
, 0xffffffff }
2445 if (n_mask
> N_MASK
)
2447 return (conv_bitmaskset(maskarr
, n_mask
, bitmask_desc
, fmt_flags
,
2448 cnote_sysset_buf
->buf
, CONV_CNOTE_SYSSET_BUFSIZE
));
2454 conv_cnote_fileflags(uint32_t fileflags
, Conv_fmt_flags_t fmt_flags
,
2455 char *buf
, size_t bufsize
)
2457 CONV_EXPN_FIELD_ARG arg
= { 0 };
2460 { 0x0001, MSG_PR_O_WRONLY
},
2461 { 0x0002, MSG_PR_O_RDONLY
},
2462 { 0x200000, MSG_PR_O_SEARCH
},
2463 { 0x400000, MSG_PR_O_EXEC
},
2464 { 0x0004, MSG_PR_O_NDELAY
},
2465 { 0x0008, MSG_PR_O_APPEND
},
2466 { 0x0010, MSG_PR_O_SYNC
},
2467 { 0x0040, MSG_PR_O_DSYNC
},
2468 { 0x0080, MSG_PR_O_NONBLOCK
},
2469 { 0x0100, MSG_PR_O_CREAT
},
2470 { 0x0200, MSG_PR_O_TRUNC
},
2471 { 0x0400, MSG_PR_O_EXCL
},
2472 { 0x0800, MSG_PR_O_NOCTTY
},
2473 { 0x4000, MSG_PR_O_XATTR
},
2474 { 0x8000, MSG_PR_O_RSYNC
},
2475 { 0x2000, MSG_PR_O_LARGEFILE
},
2476 { 0x20000, MSG_PR_O_NOFOLLOW
},
2477 { 0x40000, MSG_PR_O_NOLINKS
},
2481 arg
.oflags
= arg
.rflags
= fileflags
;
2483 arg
.bufsize
= bufsize
;
2485 switch (fileflags
& (0x600003)) {
2486 case 0: /* RDONLY */
2487 vda
[0].v_msg
= MSG_PR_O_RDONLY
;
2491 case 1: /* WRONLY */
2493 case 0x200000: /* SEARCH */
2495 /* In isolate, treat these as normal bits */
2498 /* More than one bit set in this group, emit numerically */
2499 arg
.oflags
&= ~(fileflags
& 0x600003);
2503 return (MSG_ORIG(MSG_GBL_ZERO
));
2505 (void) conv_expn_field(&arg
, vda
, fmt_flags
);
2510 conv_cnote_filemode(uint32_t mode
, Conv_fmt_flags_t fmt_flags
,
2511 char *buf
, size_t bufsize
)
2513 CONV_EXPN_FIELD_ARG arg
= { 0 };
2517 { 0x1000, MSG_S_IFIFO
},
2518 { 0x800, MSG_S_ISUID
},
2519 { 0x400, MSG_S_ISGID
},
2520 { 0x200, MSG_S_ISVTX
},
2521 { 0400, MSG_S_IRUSR
},
2522 { 0200, MSG_S_IWUSR
},
2523 { 0100, MSG_S_IXUSR
},
2524 { 0040, MSG_S_IRGRP
},
2525 { 0020, MSG_S_IWGRP
},
2526 { 0010, MSG_S_IXGRP
},
2527 { 0004, MSG_S_IROTH
},
2528 { 0002, MSG_S_IWOTH
},
2529 { 0001, MSG_S_IXOTH
},
2533 arg
.oflags
= arg
.rflags
= mode
& ~(0xf000);
2535 arg
.bufsize
= bufsize
;
2537 switch (mode
& (0xf000)) {
2574 arg
.oflags
|= 0x1000;
2575 arg
.rflags
|= 0x1000;
2582 return (MSG_ORIG(MSG_GBL_ZERO
));
2584 (void) conv_expn_field(&arg
, vda
, fmt_flags
);
2589 #define PROCSECFLGSZ CONV_EXPN_FIELD_DEF_PREFIX_SIZE + \
2590 MSG_ASLR_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
2591 MSG_FORBIDNULLMAP_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
2592 MSG_NOEXECSTACK_SIZE + CONV_EXPN_FIELD_DEF_SEP_SIZE + \
2593 CONV_INV_BUFSIZE + CONV_EXPN_FIELD_DEF_SUFFIX_SIZE
2596 * Ensure that Conv_cnote_pr_secflags_buf_t is large enough:
2598 * PROCSECFLGSZ is the real minimum size of the buffer required by
2599 * conv_prsecflags(). However, Conv_cnote_pr_secflags_buf_t uses
2600 * CONV_CNOTE_PSECFLAGS_FLAG_BUFSIZE to set the buffer size. We do things this
2601 * way because the definition of PROCSECFLGSZ uses information that is not
2602 * available in the environment of other programs that include the conv.h
2605 #if (CONV_PRSECFLAGS_BUFSIZE != PROCSECFLGSZ) && !defined(__lint)
2606 #define REPORT_BUFSIZE PROCSECFLGSZ
2607 #include "report_bufsize.h"
2608 #error "CONV_PRSECFLAGS_BUFSIZE does not match PROCSECFLGSZ"
2612 conv_prsecflags(secflagset_t flags
, Conv_fmt_flags_t fmt_flags
,
2613 Conv_secflags_buf_t
*secflags_buf
)
2616 * The values are initialized later, based on position in this array
2618 static Val_desc vda
[] = {
2620 { 0, MSG_FORBIDNULLMAP
},
2621 { 0, MSG_NOEXECSTACK
},
2624 static CONV_EXPN_FIELD_ARG conv_arg
= {
2625 NULL
, sizeof (secflags_buf
->buf
)
2629 for (i
= 0; vda
[i
].v_msg
!= 0; i
++)
2630 vda
[i
].v_val
= secflag_to_bit(i
);
2633 return (MSG_ORIG(MSG_GBL_ZERO
));
2635 conv_arg
.buf
= secflags_buf
->buf
;
2636 conv_arg
.oflags
= conv_arg
.rflags
= flags
;
2637 (void) conv_expn_field(&conv_arg
, vda
, fmt_flags
);
2639 return ((const char *)secflags_buf
->buf
);