GDB (xrefs)
/tmp/gdb-8.1/gdb/proc-events.c
Go to the documentation of this file.
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 
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
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 
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 
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
765 {
767 }
void proc_prettyprint_actionset(struct sigaction *actions, int verbose)
Definition: proc-events.c:759
static struct trans signal_table[]
Definition: proc-events.c:567
static struct trans fault_table[]
Definition: proc-events.c:678
void proc_prettyprint_syscalls(sysset_t *sysset, int verbose)
Definition: proc-events.c:556
void proc_prettyprint_syscall(int num, int verbose)
Definition: proc-events.c:535
const char *const name
Definition: aarch64-tdep.c:76
#define MAX_SYSCALLS
Definition: proc-events.c:60
void proc_prettyprint_fault(int faultno, int verbose)
Definition: proc-events.c:726
void proc_prettyfprint_faultset(FILE *file, fltset_t *fltset, int verbose)
Definition: proc-events.c:734
void proc_prettyprint_signalset(sigset_t *sigset, int verbose)
Definition: proc-events.c:668
int value
Definition: proc-events.c:50
static const char * syscall_table[MAX_SYSCALLS]
Definition: proc-events.c:61
void proc_prettyprint_signal(int signo, int verbose)
Definition: proc-events.c:643
Definition: value.c:169
static void init_syscall_table(void)
Definition: proc-events.c:64
void proc_prettyprint_faultset(fltset_t *fltset, int verbose)
Definition: proc-events.c:751
void proc_prettyfprint_syscalls(FILE *file, sysset_t *sysset, int verbose)
Definition: proc-events.c:543
void _initialize_proc_events(void)
Definition: proc-events.c:764
void proc_prettyfprint_signal(FILE *file, int signo, int verbose)
Definition: proc-events.c:625
static void prettyfprint_faulttable_entry(FILE *file, int i, int verbose)
Definition: proc-events.c:698
const char * name
Definition: proc-api.c:49
void proc_prettyfprint_fault(FILE *file, int faultno, int verbose)
Definition: proc-events.c:710
const char * desc
Definition: proc-api.c:50
void proc_prettyfprint_signalset(FILE *file, sigset_t *sigset, int verbose)
Definition: proc-events.c:651
void proc_prettyfprint_syscall(FILE *file, int num, int verbose)
Definition: proc-events.c:526
Definition: proc-api.c:47