]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/proc-events.c
Update copyright year range in all GDB files
[thirdparty/binutils-gdb.git] / gdb / proc-events.c
1 /* Machine-independent support for Solaris /proc (process file system)
2
3 Copyright (C) 1999-2018 Free Software Foundation, Inc.
4
5 Written by Michael Snyder at Cygnus Solutions.
6 Based on work by Fred Fish, Stu Grossman, Geoff Noer, and others.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20
21 /* Pretty-print "events of interest".
22
23 This module includes pretty-print routines for:
24 * faults (hardware exceptions)
25 * signals (software interrupts)
26 * syscalls
27
28 FIXME: At present, the syscall translation table must be
29 initialized, which is not true of the other translation tables. */
30
31 #include "defs.h"
32
33 #define _STRUCTURED_PROC 1
34
35 #include <sys/types.h>
36 #include <sys/procfs.h>
37 #include <sys/syscall.h>
38 #include <sys/fault.h>
39
40 #include "proc-utils.h"
41
42 /* Much of the information used in the /proc interface, particularly
43 for printing status information, is kept as tables of structures of
44 the following form. These tables can be used to map numeric values
45 to their symbolic names and to a string that describes their
46 specific use. */
47
48 struct trans
49 {
50 int value; /* The numeric value. */
51 const char *name; /* The equivalent symbolic value. */
52 const char *desc; /* Short description of value. */
53 };
54 \f
55
56 /* Pretty print syscalls. */
57
58 /* Syscall translation table. */
59
60 #define MAX_SYSCALLS 262 /* Pretty arbitrary. */
61 static const char *syscall_table[MAX_SYSCALLS];
62
63 static void
64 init_syscall_table (void)
65 {
66 syscall_table[SYS_accept] = "accept";
67 #ifdef SYS_access
68 syscall_table[SYS_access] = "access";
69 #endif
70 syscall_table[SYS_acct] = "acct";
71 syscall_table[SYS_acctctl] = "acctctl";
72 syscall_table[SYS_acl] = "acl";
73 #ifdef SYS_adi
74 syscall_table[SYS_adi] = "adi";
75 #endif
76 syscall_table[SYS_adjtime] = "adjtime";
77 syscall_table[SYS_alarm] = "alarm";
78 syscall_table[SYS_auditsys] = "auditsys";
79 syscall_table[SYS_autofssys] = "autofssys";
80 syscall_table[SYS_bind] = "bind";
81 syscall_table[SYS_brand] = "brand";
82 syscall_table[SYS_brk] = "brk";
83 syscall_table[SYS_chdir] = "chdir";
84 #ifdef SYS_chmod
85 syscall_table[SYS_chmod] = "chmod";
86 #endif
87 #ifdef SYS_chown
88 syscall_table[SYS_chown] = "chown";
89 #endif
90 syscall_table[SYS_chroot] = "chroot";
91 syscall_table[SYS_cladm] = "cladm";
92 syscall_table[SYS_clock_getres] = "clock_getres";
93 syscall_table[SYS_clock_gettime] = "clock_gettime";
94 syscall_table[SYS_clock_settime] = "clock_settime";
95 syscall_table[SYS_close] = "close";
96 syscall_table[SYS_connect] = "connect";
97 syscall_table[SYS_context] = "context";
98 syscall_table[SYS_corectl] = "corectl";
99 syscall_table[SYS_cpc] = "cpc";
100 #ifdef SYS_creat
101 syscall_table[SYS_creat] = "creat";
102 #endif
103 #ifdef SYS_creat64
104 syscall_table[SYS_creat64] = "creat64";
105 #endif
106 syscall_table[SYS_door] = "door";
107 #ifdef SYS_dup
108 syscall_table[SYS_dup] = "dup";
109 #endif
110 #ifdef SYS_evsys
111 syscall_table[SYS_evsys] = "evsys";
112 #endif
113 #ifdef SYS_evtrapret
114 syscall_table[SYS_evtrapret] = "evtrapret";
115 #endif
116 syscall_table[SYS_exacctsys] = "exacctsys";
117 #ifdef SYS_exec
118 syscall_table[SYS_exec] = "exec";
119 #endif
120 syscall_table[SYS_execve] = "execve";
121 syscall_table[SYS_exit] = "exit";
122 #ifdef SYS_faccessat
123 syscall_table[SYS_faccessat] = "faccessat";
124 #endif
125 syscall_table[SYS_facl] = "facl";
126 syscall_table[SYS_fchdir] = "fchdir";
127 #ifdef SYS_fchmod
128 syscall_table[SYS_fchmod] = "fchmod";
129 #endif
130 #ifdef SYS_fchmodat
131 syscall_table[SYS_fchmodat] = "fchmodat";
132 #endif
133 #ifdef SYS_fchown
134 syscall_table[SYS_fchown] = "fchown";
135 #endif
136 #ifdef SYS_fchownat
137 syscall_table[SYS_fchownat] = "fchownat";
138 #endif
139 syscall_table[SYS_fchroot] = "fchroot";
140 syscall_table[SYS_fcntl] = "fcntl";
141 syscall_table[SYS_fdsync] = "fdsync";
142 #ifdef SYS_fork1
143 syscall_table[SYS_fork1] = "fork1";
144 #endif
145 #ifdef SYS_forkall
146 syscall_table[SYS_forkall] = "forkall";
147 #endif
148 #ifdef SYS_forksys
149 syscall_table[SYS_forksys] = "forksys";
150 #endif
151 syscall_table[SYS_fpathconf] = "fpathconf";
152 #ifdef SYS_frealpathat
153 syscall_table[SYS_frealpathat] = "frealpathat";
154 #endif
155 #ifdef SYS_fsat
156 syscall_table[SYS_fsat] = "fsat";
157 #endif
158 #ifdef SYS_fstat
159 syscall_table[SYS_fstat] = "fstat";
160 #endif
161 #ifdef SYS_fstat64
162 syscall_table[SYS_fstat64] = "fstat64";
163 #endif
164 #ifdef SYS_fstatat
165 syscall_table[SYS_fstatat] = "fstatat";
166 #endif
167 #ifdef SYS_fstatat64
168 syscall_table[SYS_fstatat64] = "fstatat64";
169 #endif
170 syscall_table[SYS_fstatfs] = "fstatfs";
171 syscall_table[SYS_fstatvfs] = "fstatvfs";
172 syscall_table[SYS_fstatvfs64] = "fstatvfs64";
173 #ifdef SYS_fxstat
174 syscall_table[SYS_fxstat] = "fxstat";
175 #endif
176 syscall_table[SYS_getcwd] = "getcwd";
177 syscall_table[SYS_getdents] = "getdents";
178 syscall_table[SYS_getdents64] = "getdents64";
179 syscall_table[SYS_getgid] = "getgid";
180 syscall_table[SYS_getgroups] = "getgroups";
181 syscall_table[SYS_getitimer] = "getitimer";
182 syscall_table[SYS_getloadavg] = "getloadavg";
183 syscall_table[SYS_getmsg] = "getmsg";
184 syscall_table[SYS_getpagesizes] = "getpagesizes";
185 syscall_table[SYS_getpeername] = "getpeername";
186 syscall_table[SYS_getpid] = "getpid";
187 syscall_table[SYS_getpmsg] = "getpmsg";
188 #ifdef SYS_getrandom
189 syscall_table[SYS_getrandom] = "getrandom";
190 #endif
191 syscall_table[SYS_getrlimit] = "getrlimit";
192 syscall_table[SYS_getrlimit64] = "getrlimit64";
193 syscall_table[SYS_getsockname] = "getsockname";
194 syscall_table[SYS_getsockopt] = "getsockopt";
195 syscall_table[SYS_gettimeofday] = "gettimeofday";
196 syscall_table[SYS_getuid] = "getuid";
197 syscall_table[SYS_gtty] = "gtty";
198 syscall_table[SYS_hrtsys] = "hrtsys";
199 syscall_table[SYS_inst_sync] = "inst_sync";
200 syscall_table[SYS_install_utrap] = "install_utrap";
201 syscall_table[SYS_ioctl] = "ioctl";
202 #ifdef SYS_issetugid
203 syscall_table[SYS_issetugid] = "issetugid";
204 #endif
205 syscall_table[SYS_kaio] = "kaio";
206 syscall_table[SYS_kill] = "kill";
207 syscall_table[SYS_labelsys] = "labelsys";
208 #ifdef SYS_lchown
209 syscall_table[SYS_lchown] = "lchown";
210 #endif
211 syscall_table[SYS_lgrpsys] = "lgrpsys";
212 #ifdef SYS_link
213 syscall_table[SYS_link] = "link";
214 #endif
215 #ifdef SYS_linkat
216 syscall_table[SYS_linkat] = "linkat";
217 #endif
218 syscall_table[SYS_listen] = "listen";
219 syscall_table[SYS_llseek] = "llseek";
220 syscall_table[SYS_lseek] = "lseek";
221 #ifdef SYS_lstat
222 syscall_table[SYS_lstat] = "lstat";
223 #endif
224 #ifdef SYS_lstat64
225 syscall_table[SYS_lstat64] = "lstat64";
226 #endif
227 syscall_table[SYS_lwp_cond_broadcast] = "lwp_cond_broadcast";
228 syscall_table[SYS_lwp_cond_signal] = "lwp_cond_signal";
229 syscall_table[SYS_lwp_cond_wait] = "lwp_cond_wait";
230 syscall_table[SYS_lwp_continue] = "lwp_continue";
231 syscall_table[SYS_lwp_create] = "lwp_create";
232 syscall_table[SYS_lwp_detach] = "lwp_detach";
233 syscall_table[SYS_lwp_exit] = "lwp_exit";
234 syscall_table[SYS_lwp_info] = "lwp_info";
235 #ifdef SYS_lwp_kill
236 syscall_table[SYS_lwp_kill] = "lwp_kill";
237 #endif
238 #ifdef SYS_lwp_mutex_lock
239 syscall_table[SYS_lwp_mutex_lock] = "lwp_mutex_lock";
240 #endif
241 syscall_table[SYS_lwp_mutex_register] = "lwp_mutex_register";
242 syscall_table[SYS_lwp_mutex_timedlock] = "lwp_mutex_timedlock";
243 syscall_table[SYS_lwp_mutex_trylock] = "lwp_mutex_trylock";
244 syscall_table[SYS_lwp_mutex_unlock] = "lwp_mutex_unlock";
245 syscall_table[SYS_lwp_mutex_wakeup] = "lwp_mutex_wakeup";
246 #ifdef SYS_lwp_name
247 syscall_table[SYS_lwp_name] = "lwp_name";
248 #endif
249 syscall_table[SYS_lwp_park] = "lwp_park";
250 syscall_table[SYS_lwp_private] = "lwp_private";
251 syscall_table[SYS_lwp_rwlock_sys] = "lwp_rwlock_sys";
252 syscall_table[SYS_lwp_self] = "lwp_self";
253 syscall_table[SYS_lwp_sema_post] = "lwp_sema_post";
254 syscall_table[SYS_lwp_sema_timedwait] = "lwp_sema_timedwait";
255 syscall_table[SYS_lwp_sema_trywait] = "lwp_sema_trywait";
256 #ifdef SYS_lwp_sema_wait
257 syscall_table[SYS_lwp_sema_wait] = "lwp_sema_wait";
258 #endif
259 syscall_table[SYS_lwp_sigmask] = "lwp_sigmask";
260 #ifdef SYS_lwp_sigqueue
261 syscall_table[SYS_lwp_sigqueue] = "lwp_sigqueue";
262 #endif
263 syscall_table[SYS_lwp_suspend] = "lwp_suspend";
264 syscall_table[SYS_lwp_wait] = "lwp_wait";
265 #ifdef SYS_lxstat
266 syscall_table[SYS_lxstat] = "lxstat";
267 #endif
268 syscall_table[SYS_memcntl] = "memcntl";
269 #ifdef SYS_memsys
270 syscall_table[SYS_memsys] = "memsys";
271 #endif
272 syscall_table[SYS_mincore] = "mincore";
273 #ifdef SYS_mkdir
274 syscall_table[SYS_mkdir] = "mkdir";
275 #endif
276 #ifdef SYS_mkdirat
277 syscall_table[SYS_mkdirat] = "mkdirat";
278 #endif
279 #ifdef SYS_mknod
280 syscall_table[SYS_mknod] = "mknod";
281 #endif
282 #ifdef SYS_mknodat
283 syscall_table[SYS_mknodat] = "mknodat";
284 #endif
285 syscall_table[SYS_mmap] = "mmap";
286 syscall_table[SYS_mmap64] = "mmap64";
287 #ifdef SYS_mmapobj
288 syscall_table[SYS_mmapobj] = "mmapobj";
289 #endif
290 syscall_table[SYS_modctl] = "modctl";
291 syscall_table[SYS_mount] = "mount";
292 syscall_table[SYS_mprotect] = "mprotect";
293 syscall_table[SYS_msgsys] = "msgsys";
294 syscall_table[SYS_munmap] = "munmap";
295 syscall_table[SYS_nanosleep] = "nanosleep";
296 syscall_table[SYS_nfssys] = "nfssys";
297 syscall_table[SYS_nice] = "nice";
298 syscall_table[SYS_ntp_adjtime] = "ntp_adjtime";
299 syscall_table[SYS_ntp_gettime] = "ntp_gettime";
300 #ifdef SYS_open
301 syscall_table[SYS_open] = "open";
302 #endif
303 #ifdef SYS_open64
304 syscall_table[SYS_open64] = "open64";
305 #endif
306 #ifdef SYS_openat
307 syscall_table[SYS_openat] = "openat";
308 #endif
309 #ifdef SYS_openat64
310 syscall_table[SYS_openat64] = "openat64";
311 #endif
312 syscall_table[SYS_p_online] = "p_online";
313 syscall_table[SYS_pathconf] = "pathconf";
314 syscall_table[SYS_pause] = "pause";
315 syscall_table[SYS_pcsample] = "pcsample";
316 syscall_table[SYS_pgrpsys] = "pgrpsys";
317 syscall_table[SYS_pipe] = "pipe";
318 #ifdef SYS_plock
319 syscall_table[SYS_plock] = "plock";
320 #endif
321 #ifdef SYS_poll
322 syscall_table[SYS_poll] = "poll";
323 #endif
324 syscall_table[SYS_pollsys] = "pollsys";
325 syscall_table[SYS_port] = "port";
326 syscall_table[SYS_pread] = "pread";
327 syscall_table[SYS_pread64] = "pread64";
328 syscall_table[SYS_priocntlsys] = "priocntlsys";
329 syscall_table[SYS_privsys] = "privsys";
330 #ifdef SYS_processor_bind
331 syscall_table[SYS_processor_bind] = "processor_bind";
332 #endif
333 #ifdef SYS_processor_info
334 syscall_table[SYS_processor_info] = "processor_info";
335 #endif
336 #ifdef SYS_processor_sys
337 syscall_table[SYS_processor_sys] = "processor_sys";
338 #endif
339 syscall_table[SYS_profil] = "profil";
340 syscall_table[SYS_pset] = "pset";
341 syscall_table[SYS_putmsg] = "putmsg";
342 syscall_table[SYS_putpmsg] = "putpmsg";
343 syscall_table[SYS_pwrite] = "pwrite";
344 syscall_table[SYS_pwrite64] = "pwrite64";
345 syscall_table[SYS_rctlsys] = "rctlsys";
346 syscall_table[SYS_read] = "read";
347 #ifdef SYS_readlink
348 syscall_table[SYS_readlink] = "readlink";
349 #endif
350 #ifdef SYS_readlinkat
351 syscall_table[SYS_readlinkat] = "readlinkat";
352 #endif
353 syscall_table[SYS_readv] = "readv";
354 syscall_table[SYS_recv] = "recv";
355 syscall_table[SYS_recvfrom] = "recvfrom";
356 #ifdef SYS_recvmmsg
357 syscall_table[SYS_recvmmsg] = "recvmmsg";
358 #endif
359 syscall_table[SYS_recvmsg] = "recvmsg";
360 #ifdef SYS_reflinkat
361 syscall_table[SYS_reflinkat] = "reflinkat";
362 #endif
363 #ifdef SYS_rename
364 syscall_table[SYS_rename] = "rename";
365 #endif
366 #ifdef SYS_renameat
367 syscall_table[SYS_renameat] = "renameat";
368 #endif
369 syscall_table[SYS_resolvepath] = "resolvepath";
370 #ifdef SYS_rmdir
371 syscall_table[SYS_rmdir] = "rmdir";
372 #endif
373 syscall_table[SYS_rpcsys] = "rpcsys";
374 syscall_table[SYS_rusagesys] = "rusagesys";
375 syscall_table[SYS_schedctl] = "schedctl";
376 #ifdef SYS_secsys
377 syscall_table[SYS_secsys] = "secsys";
378 #endif
379 syscall_table[SYS_semsys] = "semsys";
380 syscall_table[SYS_send] = "send";
381 syscall_table[SYS_sendfilev] = "sendfilev";
382 #ifdef SYS_sendmmsg
383 syscall_table[SYS_sendmmsg] = "sendmmsg";
384 #endif
385 syscall_table[SYS_sendmsg] = "sendmsg";
386 syscall_table[SYS_sendto] = "sendto";
387 syscall_table[SYS_setegid] = "setegid";
388 syscall_table[SYS_seteuid] = "seteuid";
389 syscall_table[SYS_setgid] = "setgid";
390 syscall_table[SYS_setgroups] = "setgroups";
391 syscall_table[SYS_setitimer] = "setitimer";
392 syscall_table[SYS_setregid] = "setregid";
393 syscall_table[SYS_setreuid] = "setreuid";
394 syscall_table[SYS_setrlimit] = "setrlimit";
395 syscall_table[SYS_setrlimit64] = "setrlimit64";
396 syscall_table[SYS_setsockopt] = "setsockopt";
397 syscall_table[SYS_setuid] = "setuid";
398 syscall_table[SYS_sharefs] = "sharefs";
399 syscall_table[SYS_shmsys] = "shmsys";
400 syscall_table[SYS_shutdown] = "shutdown";
401 #ifdef SYS_sidsys
402 syscall_table[SYS_sidsys] = "sidsys";
403 #endif
404 syscall_table[SYS_sigaction] = "sigaction";
405 syscall_table[SYS_sigaltstack] = "sigaltstack";
406 #ifdef SYS_signal
407 syscall_table[SYS_signal] = "signal";
408 #endif
409 syscall_table[SYS_signotify] = "signotify";
410 syscall_table[SYS_sigpending] = "sigpending";
411 syscall_table[SYS_sigprocmask] = "sigprocmask";
412 syscall_table[SYS_sigqueue] = "sigqueue";
413 #ifdef SYS_sigresend
414 syscall_table[SYS_sigresend] = "sigresend";
415 #endif
416 syscall_table[SYS_sigsendsys] = "sigsendsys";
417 syscall_table[SYS_sigsuspend] = "sigsuspend";
418 syscall_table[SYS_sigtimedwait] = "sigtimedwait";
419 syscall_table[SYS_so_socket] = "so_socket";
420 syscall_table[SYS_so_socketpair] = "so_socketpair";
421 syscall_table[SYS_sockconfig] = "sockconfig";
422 #ifdef SYS_sparc_fixalign
423 syscall_table[SYS_sparc_fixalign] = "sparc_fixalign";
424 #endif
425 syscall_table[SYS_sparc_utrap_install] = "sparc_utrap_install";
426 #ifdef SYS_spawn
427 syscall_table[SYS_spawn] = "spawn";
428 #endif
429 #ifdef SYS_stat
430 syscall_table[SYS_stat] = "stat";
431 #endif
432 #ifdef SYS_stat64
433 syscall_table[SYS_stat64] = "stat64";
434 #endif
435 syscall_table[SYS_statfs] = "statfs";
436 syscall_table[SYS_statvfs] = "statvfs";
437 syscall_table[SYS_statvfs64] = "statvfs64";
438 syscall_table[SYS_stime] = "stime";
439 syscall_table[SYS_stty] = "stty";
440 #ifdef SYS_symlink
441 syscall_table[SYS_symlink] = "symlink";
442 #endif
443 #ifdef SYS_symlinkat
444 syscall_table[SYS_symlinkat] = "symlinkat";
445 #endif
446 syscall_table[SYS_sync] = "sync";
447 syscall_table[SYS_syscall] = "syscall";
448 syscall_table[SYS_sysconfig] = "sysconfig";
449 syscall_table[SYS_sysfs] = "sysfs";
450 syscall_table[SYS_sysi86] = "sysi86";
451 #ifdef SYS_syssun
452 syscall_table[SYS_syssun] = "syssun";
453 #endif
454 #ifdef SYS_system_stats
455 syscall_table[SYS_system_stats] = "system_stats";
456 #endif
457 syscall_table[SYS_systeminfo] = "systeminfo";
458 syscall_table[SYS_tasksys] = "tasksys";
459 syscall_table[SYS_time] = "time";
460 syscall_table[SYS_timer_create] = "timer_create";
461 syscall_table[SYS_timer_delete] = "timer_delete";
462 syscall_table[SYS_timer_getoverrun] = "timer_getoverrun";
463 syscall_table[SYS_timer_gettime] = "timer_gettime";
464 syscall_table[SYS_timer_settime] = "timer_settime";
465 syscall_table[SYS_times] = "times";
466 syscall_table[SYS_uadmin] = "uadmin";
467 syscall_table[SYS_ucredsys] = "ucredsys";
468 syscall_table[SYS_ulimit] = "ulimit";
469 syscall_table[SYS_umask] = "umask";
470 #ifdef SYS_umount
471 syscall_table[SYS_umount] = "umount";
472 #endif
473 syscall_table[SYS_umount2] = "umount2";
474 syscall_table[SYS_uname] = "uname";
475 #ifdef SYS_unlink
476 syscall_table[SYS_unlink] = "unlink";
477 #endif
478 #ifdef SYS_unlinkat
479 syscall_table[SYS_unlinkat] = "unlinkat";
480 #endif
481 #ifdef SYS_utime
482 syscall_table[SYS_utime] = "utime";
483 #endif
484 #ifdef SYS_utimensat
485 syscall_table[SYS_utimensat] = "utimensat";
486 #endif
487 #ifdef SYS_utimes
488 syscall_table[SYS_utimes] = "utimes";
489 #endif
490 #ifdef SYS_utimesys
491 syscall_table[SYS_utimesys] = "utimesys";
492 #endif
493 syscall_table[SYS_utssys] = "utssys";
494 syscall_table[SYS_uucopy] = "uucopy";
495 syscall_table[SYS_uucopystr] = "uucopystr";
496 syscall_table[SYS_uuidsys] = "uuidsys";
497 #ifdef SYS_va_mask
498 syscall_table[SYS_va_mask] = "va_mask";
499 #endif
500 syscall_table[SYS_vfork] = "vfork";
501 syscall_table[SYS_vhangup] = "vhangup";
502 #ifdef SYS_wait
503 syscall_table[SYS_wait] = "wait";
504 #endif
505 #ifdef SYS_waitid
506 syscall_table[SYS_waitid] = "waitid";
507 #endif
508 #ifdef SYS_waitsys
509 syscall_table[SYS_waitsys] = "waitsys";
510 #endif
511 syscall_table[SYS_write] = "write";
512 syscall_table[SYS_writev] = "writev";
513 #ifdef SYS_xmknod
514 syscall_table[SYS_xmknod] = "xmknod";
515 #endif
516 #ifdef SYS_xstat
517 syscall_table[SYS_xstat] = "xstat";
518 #endif
519 syscall_table[SYS_yield] = "yield";
520 syscall_table[SYS_zone] = "zone";
521 }
522
523 /* Prettyprint syscall NUM. */
524
525 void
526 proc_prettyfprint_syscall (FILE *file, int num, int verbose)
527 {
528 if (syscall_table[num])
529 fprintf (file, "SYS_%s ", syscall_table[num]);
530 else
531 fprintf (file, "<Unknown syscall %d> ", num);
532 }
533
534 void
535 proc_prettyprint_syscall (int num, int verbose)
536 {
537 proc_prettyfprint_syscall (stdout, num, verbose);
538 }
539
540 /* Prettyprint all syscalls in SYSSET. */
541
542 void
543 proc_prettyfprint_syscalls (FILE *file, sysset_t *sysset, int verbose)
544 {
545 int i;
546
547 for (i = 0; i < MAX_SYSCALLS; i++)
548 if (prismember (sysset, i))
549 {
550 proc_prettyfprint_syscall (file, i, verbose);
551 }
552 fprintf (file, "\n");
553 }
554
555 void
556 proc_prettyprint_syscalls (sysset_t *sysset, int verbose)
557 {
558 proc_prettyfprint_syscalls (stdout, sysset, verbose);
559 }
560 \f
561 /* Prettyprint signals. */
562
563 /* Signal translation table, ordered ANSI-standard signals first,
564 other signals second, with signals in each block ordered by their
565 numerical values on a typical POSIX platform. */
566
567 static struct trans signal_table[] =
568 {
569 { 0, "<no signal>", "no signal" },
570
571 /* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM
572 are ANSI-standard signals and are always available. */
573
574 { SIGINT, "SIGINT", "Interrupt (rubout)" },
575 { SIGILL, "SIGILL", "Illegal instruction" }, /* not reset when caught */
576 { SIGABRT, "SIGABRT", "used by abort()" }, /* replaces SIGIOT */
577 { SIGFPE, "SIGFPE", "Floating point exception" },
578 { SIGSEGV, "SIGSEGV", "Segmentation violation" },
579 { SIGTERM, "SIGTERM", "Software termination signal from kill" },
580
581 /* All other signals need preprocessor conditionals. */
582
583 { SIGHUP, "SIGHUP", "Hangup" },
584 { SIGQUIT, "SIGQUIT", "Quit (ASCII FS)" },
585 { SIGTRAP, "SIGTRAP", "Trace trap" }, /* not reset when caught */
586 { SIGIOT, "SIGIOT", "IOT instruction" },
587 { SIGEMT, "SIGEMT", "EMT instruction" },
588 { SIGKILL, "SIGKILL", "Kill" }, /* Solaris: cannot be caught/ignored */
589 { SIGBUS, "SIGBUS", "Bus error" },
590 { SIGSYS, "SIGSYS", "Bad argument to system call" },
591 { SIGPIPE, "SIGPIPE", "Write to pipe with no one to read it" },
592 { SIGALRM, "SIGALRM", "Alarm clock" },
593 { SIGUSR1, "SIGUSR1", "User defined signal 1" },
594 { SIGUSR2, "SIGUSR2", "User defined signal 2" },
595 { SIGCHLD, "SIGCHLD", "Child status changed" }, /* Posix version */
596 { SIGCLD, "SIGCLD", "Child status changed" }, /* Solaris version */
597 { SIGPWR, "SIGPWR", "Power-fail restart" },
598 { SIGWINCH, "SIGWINCH", "Window size change" },
599 { SIGURG, "SIGURG", "Urgent socket condition" },
600 { SIGPOLL, "SIGPOLL", "Pollable event" },
601 { SIGIO, "SIGIO", "Socket I/O possible" }, /* alias for SIGPOLL */
602 { SIGSTOP, "SIGSTOP", "Stop, not from tty" }, /* cannot be caught or
603 ignored */
604 { SIGTSTP, "SIGTSTP", "User stop from tty" },
605 { SIGCONT, "SIGCONT", "Stopped process has been continued" },
606 { SIGTTIN, "SIGTTIN", "Background tty read attempted" },
607 { SIGTTOU, "SIGTTOU", "Background tty write attempted" },
608 { SIGVTALRM, "SIGVTALRM", "Virtual timer expired" },
609 { SIGPROF, "SIGPROF", "Profiling timer expired" },
610 { SIGXCPU, "SIGXCPU", "Exceeded CPU limit" },
611 { SIGXFSZ, "SIGXFSZ", "Exceeded file size limit" },
612 { SIGWAITING, "SIGWAITING", "Process's LWPs are blocked" },
613 { SIGLWP, "SIGLWP", "Used by thread library" },
614 { SIGFREEZE, "SIGFREEZE", "Used by CPR" },
615 { SIGTHAW, "SIGTHAW", "Used by CPR" },
616 { SIGCANCEL, "SIGCANCEL", "Used by libthread" },
617 { SIGLOST, "SIGLOST", "Resource lost" },
618
619 /* FIXME: add real-time signals. */
620 };
621
622 /* Prettyprint signal number SIGNO. */
623
624 void
625 proc_prettyfprint_signal (FILE *file, int signo, int verbose)
626 {
627 int i;
628
629 for (i = 0; i < sizeof (signal_table) / sizeof (signal_table[0]); i++)
630 if (signo == signal_table[i].value)
631 {
632 fprintf (file, "%s", signal_table[i].name);
633 if (verbose)
634 fprintf (file, ": %s\n", signal_table[i].desc);
635 else
636 fprintf (file, " ");
637 return;
638 }
639 fprintf (file, "Unknown signal %d%c", signo, verbose ? '\n' : ' ');
640 }
641
642 void
643 proc_prettyprint_signal (int signo, int verbose)
644 {
645 proc_prettyfprint_signal (stdout, signo, verbose);
646 }
647
648 /* Prettyprint all signals in SIGSET. */
649
650 void
651 proc_prettyfprint_signalset (FILE *file, sigset_t *sigset, int verbose)
652 {
653 int i;
654
655 /* Loop over all signal numbers from 0 to NSIG, using them as the
656 index to prismember. The signal table had better not contain
657 aliases, for if it does they will both be printed. */
658
659 for (i = 0; i < NSIG; i++)
660 if (prismember (sigset, i))
661 proc_prettyfprint_signal (file, i, verbose);
662
663 if (!verbose)
664 fprintf (file, "\n");
665 }
666
667 void
668 proc_prettyprint_signalset (sigset_t *sigset, int verbose)
669 {
670 proc_prettyfprint_signalset (stdout, sigset, verbose);
671 }
672 \f
673
674 /* Prettyprint faults. */
675
676 /* Fault translation table. */
677
678 static struct trans fault_table[] =
679 {
680 { FLTILL, "FLTILL", "Illegal instruction" },
681 { FLTPRIV, "FLTPRIV", "Privileged instruction" },
682 { FLTBPT, "FLTBPT", "Breakpoint trap" },
683 { FLTTRACE, "FLTTRACE", "Trace trap" },
684 { FLTACCESS, "FLTACCESS", "Memory access fault" },
685 { FLTBOUNDS, "FLTBOUNDS", "Memory bounds violation" },
686 { FLTIOVF, "FLTIOVF", "Integer overflow" },
687 { FLTIZDIV, "FLTIZDIV", "Integer zero divide" },
688 { FLTFPE, "FLTFPE", "Floating-point exception" },
689 { FLTSTACK, "FLTSTACK", "Unrecoverable stack fault" },
690 { FLTPAGE, "FLTPAGE", "Recoverable page fault" },
691 { FLTWATCH, "FLTWATCH", "User watchpoint" },
692 };
693
694 /* Work horse. Accepts an index into the fault table, prints it
695 pretty. */
696
697 static void
698 prettyfprint_faulttable_entry (FILE *file, int i, int verbose)
699 {
700 fprintf (file, "%s", fault_table[i].name);
701 if (verbose)
702 fprintf (file, ": %s\n", fault_table[i].desc);
703 else
704 fprintf (file, " ");
705 }
706
707 /* Prettyprint hardware fault number FAULTNO. */
708
709 void
710 proc_prettyfprint_fault (FILE *file, int faultno, int verbose)
711 {
712 int i;
713
714 for (i = 0; i < ARRAY_SIZE (fault_table); i++)
715 if (faultno == fault_table[i].value)
716 {
717 prettyfprint_faulttable_entry (file, i, verbose);
718 return;
719 }
720
721 fprintf (file, "Unknown hardware fault %d%c",
722 faultno, verbose ? '\n' : ' ');
723 }
724
725 void
726 proc_prettyprint_fault (int faultno, int verbose)
727 {
728 proc_prettyfprint_fault (stdout, faultno, verbose);
729 }
730
731 /* Prettyprint all faults in FLTSET. */
732
733 void
734 proc_prettyfprint_faultset (FILE *file, fltset_t *fltset, int verbose)
735 {
736 int i;
737
738 /* Loop through the fault table, using the value field as the index
739 to prismember. The fault table had better not contain aliases,
740 for if it does they will both be printed. */
741
742 for (i = 0; i < ARRAY_SIZE (fault_table); i++)
743 if (prismember (fltset, fault_table[i].value))
744 prettyfprint_faulttable_entry (file, i, verbose);
745
746 if (!verbose)
747 fprintf (file, "\n");
748 }
749
750 void
751 proc_prettyprint_faultset (fltset_t *fltset, int verbose)
752 {
753 proc_prettyfprint_faultset (stdout, fltset, verbose);
754 }
755
756 /* TODO: actions, holds... */
757
758 void
759 proc_prettyprint_actionset (struct sigaction *actions, int verbose)
760 {
761 }
762
763 void
764 _initialize_proc_events (void)
765 {
766 init_syscall_table ();
767 }