]> Git Repo - binutils.git/blob - gdb/proc-events.c
gdb: remove SYMBOL_CLASS macro, add getter
[binutils.git] / gdb / proc-events.c
1 /* Machine-independent support for Solaris /proc (process file system)
2
3    Copyright (C) 1999-2022 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 #include <sys/types.h>
34 #include <sys/procfs.h>
35 #include <sys/syscall.h>
36 #include <sys/fault.h>
37
38 #include "proc-utils.h"
39
40 /* Much of the information used in the /proc interface, particularly
41    for printing status information, is kept as tables of structures of
42    the following form.  These tables can be used to map numeric values
43    to their symbolic names and to a string that describes their
44    specific use.  */
45
46 struct trans
47 {
48   int value;                    /* The numeric value.  */
49   const char *name;             /* The equivalent symbolic value.  */
50   const char *desc;             /* Short description of value.  */
51 };
52 \f
53
54 /* Pretty print syscalls.  */
55
56 /* Syscall translation table.  */
57
58 #define MAX_SYSCALLS 262        /* Pretty arbitrary.  */
59 static const char *syscall_table[MAX_SYSCALLS];
60
61 static void
62 init_syscall_table (void)
63 {
64   syscall_table[SYS_accept] = "accept";
65 #ifdef SYS_access
66   syscall_table[SYS_access] = "access";
67 #endif
68   syscall_table[SYS_acct] = "acct";
69   syscall_table[SYS_acctctl] = "acctctl";
70   syscall_table[SYS_acl] = "acl";
71 #ifdef SYS_adi
72   syscall_table[SYS_adi] = "adi";
73 #endif
74   syscall_table[SYS_adjtime] = "adjtime";
75   syscall_table[SYS_alarm] = "alarm";
76   syscall_table[SYS_auditsys] = "auditsys";
77   syscall_table[SYS_autofssys] = "autofssys";
78   syscall_table[SYS_bind] = "bind";
79   syscall_table[SYS_brand] = "brand";
80   syscall_table[SYS_brk] = "brk";
81   syscall_table[SYS_chdir] = "chdir";
82 #ifdef SYS_chmod
83   syscall_table[SYS_chmod] = "chmod";
84 #endif
85 #ifdef SYS_chown
86   syscall_table[SYS_chown] = "chown";
87 #endif
88   syscall_table[SYS_chroot] = "chroot";
89   syscall_table[SYS_cladm] = "cladm";
90   syscall_table[SYS_clock_getres] = "clock_getres";
91   syscall_table[SYS_clock_gettime] = "clock_gettime";
92   syscall_table[SYS_clock_settime] = "clock_settime";
93   syscall_table[SYS_close] = "close";
94   syscall_table[SYS_connect] = "connect";
95   syscall_table[SYS_context] = "context";
96   syscall_table[SYS_corectl] = "corectl";
97   syscall_table[SYS_cpc] = "cpc";
98 #ifdef SYS_creat
99   syscall_table[SYS_creat] = "creat";
100 #endif
101 #ifdef SYS_creat64
102   syscall_table[SYS_creat64] = "creat64";
103 #endif
104   syscall_table[SYS_door] = "door";
105 #ifdef SYS_dup
106   syscall_table[SYS_dup] = "dup";
107 #endif
108 #ifdef SYS_evsys
109   syscall_table[SYS_evsys] = "evsys";
110 #endif
111 #ifdef SYS_evtrapret
112   syscall_table[SYS_evtrapret] = "evtrapret";
113 #endif
114   syscall_table[SYS_exacctsys] = "exacctsys";
115 #ifdef SYS_exec
116   syscall_table[SYS_exec] = "exec";
117 #endif
118   syscall_table[SYS_execve] = "execve";
119   syscall_table[SYS_exit] = "exit";
120 #ifdef SYS_faccessat
121   syscall_table[SYS_faccessat] = "faccessat";
122 #endif
123   syscall_table[SYS_facl] = "facl";
124   syscall_table[SYS_fchdir] = "fchdir";
125 #ifdef SYS_fchmod
126   syscall_table[SYS_fchmod] = "fchmod";
127 #endif
128 #ifdef SYS_fchmodat
129   syscall_table[SYS_fchmodat] = "fchmodat";
130 #endif
131 #ifdef SYS_fchown
132   syscall_table[SYS_fchown] = "fchown";
133 #endif
134 #ifdef SYS_fchownat
135   syscall_table[SYS_fchownat] = "fchownat";
136 #endif
137   syscall_table[SYS_fchroot] = "fchroot";
138   syscall_table[SYS_fcntl] = "fcntl";
139   syscall_table[SYS_fdsync] = "fdsync";
140 #ifdef SYS_fork1
141   syscall_table[SYS_fork1] = "fork1";
142 #endif
143 #ifdef SYS_forkall
144   syscall_table[SYS_forkall] = "forkall";
145 #endif
146 #ifdef SYS_forksys
147   syscall_table[SYS_forksys] = "forksys";
148 #endif
149   syscall_table[SYS_fpathconf] = "fpathconf";
150 #ifdef SYS_frealpathat
151   syscall_table[SYS_frealpathat] = "frealpathat";
152 #endif
153 #ifdef SYS_fsat
154   syscall_table[SYS_fsat] = "fsat";
155 #endif
156 #ifdef SYS_fstat
157   syscall_table[SYS_fstat] = "fstat";
158 #endif
159 #ifdef SYS_fstat64
160   syscall_table[SYS_fstat64] = "fstat64";
161 #endif
162 #ifdef SYS_fstatat
163   syscall_table[SYS_fstatat] = "fstatat";
164 #endif
165 #ifdef SYS_fstatat64
166   syscall_table[SYS_fstatat64] = "fstatat64";
167 #endif
168   syscall_table[SYS_fstatfs] = "fstatfs";
169   syscall_table[SYS_fstatvfs] = "fstatvfs";
170   syscall_table[SYS_fstatvfs64] = "fstatvfs64";
171 #ifdef SYS_fxstat
172   syscall_table[SYS_fxstat] = "fxstat";
173 #endif
174   syscall_table[SYS_getcwd] = "getcwd";
175   syscall_table[SYS_getdents] = "getdents";
176   syscall_table[SYS_getdents64] = "getdents64";
177   syscall_table[SYS_getgid] = "getgid";
178   syscall_table[SYS_getgroups] = "getgroups";
179   syscall_table[SYS_getitimer] = "getitimer";
180   syscall_table[SYS_getloadavg] = "getloadavg";
181   syscall_table[SYS_getmsg] = "getmsg";
182   syscall_table[SYS_getpagesizes] = "getpagesizes";
183   syscall_table[SYS_getpeername] = "getpeername";
184   syscall_table[SYS_getpid] = "getpid";
185   syscall_table[SYS_getpmsg] = "getpmsg";
186 #ifdef SYS_getrandom
187   syscall_table[SYS_getrandom] = "getrandom";
188 #endif
189   syscall_table[SYS_getrlimit] = "getrlimit";
190   syscall_table[SYS_getrlimit64] = "getrlimit64";
191   syscall_table[SYS_getsockname] = "getsockname";
192   syscall_table[SYS_getsockopt] = "getsockopt";
193   syscall_table[SYS_gettimeofday] = "gettimeofday";
194   syscall_table[SYS_getuid] = "getuid";
195   syscall_table[SYS_gtty] = "gtty";
196   syscall_table[SYS_hrtsys] = "hrtsys";
197   syscall_table[SYS_inst_sync] = "inst_sync";
198   syscall_table[SYS_install_utrap] = "install_utrap";
199   syscall_table[SYS_ioctl] = "ioctl";
200 #ifdef SYS_issetugid
201   syscall_table[SYS_issetugid] = "issetugid";
202 #endif
203   syscall_table[SYS_kaio] = "kaio";
204   syscall_table[SYS_kill] = "kill";
205   syscall_table[SYS_labelsys] = "labelsys";
206 #ifdef SYS_lchown
207   syscall_table[SYS_lchown] = "lchown";
208 #endif
209   syscall_table[SYS_lgrpsys] = "lgrpsys";
210 #ifdef SYS_link
211   syscall_table[SYS_link] = "link";
212 #endif
213 #ifdef SYS_linkat
214   syscall_table[SYS_linkat] = "linkat";
215 #endif
216   syscall_table[SYS_listen] = "listen";
217   syscall_table[SYS_llseek] = "llseek";
218   syscall_table[SYS_lseek] = "lseek";
219 #ifdef SYS_lstat
220   syscall_table[SYS_lstat] = "lstat";
221 #endif
222 #ifdef SYS_lstat64
223   syscall_table[SYS_lstat64] = "lstat64";
224 #endif
225   syscall_table[SYS_lwp_cond_broadcast] = "lwp_cond_broadcast";
226   syscall_table[SYS_lwp_cond_signal] = "lwp_cond_signal";
227   syscall_table[SYS_lwp_cond_wait] = "lwp_cond_wait";
228   syscall_table[SYS_lwp_continue] = "lwp_continue";
229   syscall_table[SYS_lwp_create] = "lwp_create";
230   syscall_table[SYS_lwp_detach] = "lwp_detach";
231   syscall_table[SYS_lwp_exit] = "lwp_exit";
232   syscall_table[SYS_lwp_info] = "lwp_info";
233 #ifdef SYS_lwp_kill
234   syscall_table[SYS_lwp_kill] = "lwp_kill";
235 #endif
236 #ifdef SYS_lwp_mutex_lock
237   syscall_table[SYS_lwp_mutex_lock] = "lwp_mutex_lock";
238 #endif
239   syscall_table[SYS_lwp_mutex_register] = "lwp_mutex_register";
240   syscall_table[SYS_lwp_mutex_timedlock] = "lwp_mutex_timedlock";
241   syscall_table[SYS_lwp_mutex_trylock] = "lwp_mutex_trylock";
242   syscall_table[SYS_lwp_mutex_unlock] = "lwp_mutex_unlock";
243   syscall_table[SYS_lwp_mutex_wakeup] = "lwp_mutex_wakeup";
244 #ifdef SYS_lwp_name
245   syscall_table[SYS_lwp_name] = "lwp_name";
246 #endif
247   syscall_table[SYS_lwp_park] = "lwp_park";
248   syscall_table[SYS_lwp_private] = "lwp_private";
249   syscall_table[SYS_lwp_rwlock_sys] = "lwp_rwlock_sys";
250   syscall_table[SYS_lwp_self] = "lwp_self";
251   syscall_table[SYS_lwp_sema_post] = "lwp_sema_post";
252   syscall_table[SYS_lwp_sema_timedwait] = "lwp_sema_timedwait";
253   syscall_table[SYS_lwp_sema_trywait] = "lwp_sema_trywait";
254 #ifdef SYS_lwp_sema_wait
255   syscall_table[SYS_lwp_sema_wait] = "lwp_sema_wait";
256 #endif
257   syscall_table[SYS_lwp_sigmask] = "lwp_sigmask";
258 #ifdef SYS_lwp_sigqueue
259   syscall_table[SYS_lwp_sigqueue] = "lwp_sigqueue";
260 #endif
261   syscall_table[SYS_lwp_suspend] = "lwp_suspend";
262   syscall_table[SYS_lwp_wait] = "lwp_wait";
263 #ifdef SYS_lxstat
264   syscall_table[SYS_lxstat] = "lxstat";
265 #endif
266   syscall_table[SYS_memcntl] = "memcntl";
267 #ifdef SYS_memsys
268   syscall_table[SYS_memsys] = "memsys";
269 #endif
270   syscall_table[SYS_mincore] = "mincore";
271 #ifdef SYS_mkdir
272   syscall_table[SYS_mkdir] = "mkdir";
273 #endif
274 #ifdef SYS_mkdirat
275   syscall_table[SYS_mkdirat] = "mkdirat";
276 #endif
277 #ifdef SYS_mknod
278   syscall_table[SYS_mknod] = "mknod";
279 #endif
280 #ifdef SYS_mknodat
281   syscall_table[SYS_mknodat] = "mknodat";
282 #endif
283   syscall_table[SYS_mmap] = "mmap";
284   syscall_table[SYS_mmap64] = "mmap64";
285 #ifdef SYS_mmapobj
286   syscall_table[SYS_mmapobj] = "mmapobj";
287 #endif
288   syscall_table[SYS_modctl] = "modctl";
289   syscall_table[SYS_mount] = "mount";
290   syscall_table[SYS_mprotect] = "mprotect";
291   syscall_table[SYS_msgsys] = "msgsys";
292   syscall_table[SYS_munmap] = "munmap";
293   syscall_table[SYS_nanosleep] = "nanosleep";
294   syscall_table[SYS_nfssys] = "nfssys";
295   syscall_table[SYS_nice] = "nice";
296   syscall_table[SYS_ntp_adjtime] = "ntp_adjtime";
297   syscall_table[SYS_ntp_gettime] = "ntp_gettime";
298 #ifdef SYS_open
299   syscall_table[SYS_open] = "open";
300 #endif
301 #ifdef SYS_open64
302   syscall_table[SYS_open64] = "open64";
303 #endif
304 #ifdef SYS_openat
305   syscall_table[SYS_openat] = "openat";
306 #endif
307 #ifdef SYS_openat64
308   syscall_table[SYS_openat64] = "openat64";
309 #endif
310   syscall_table[SYS_p_online] = "p_online";
311   syscall_table[SYS_pathconf] = "pathconf";
312   syscall_table[SYS_pause] = "pause";
313   syscall_table[SYS_pcsample] = "pcsample";
314   syscall_table[SYS_pgrpsys] = "pgrpsys";
315   syscall_table[SYS_pipe] = "pipe";
316 #ifdef SYS_plock
317   syscall_table[SYS_plock] = "plock";
318 #endif
319 #ifdef SYS_poll
320   syscall_table[SYS_poll] = "poll";
321 #endif
322   syscall_table[SYS_pollsys] = "pollsys";
323   syscall_table[SYS_port] = "port";
324   syscall_table[SYS_pread] = "pread";
325   syscall_table[SYS_pread64] = "pread64";
326   syscall_table[SYS_priocntlsys] = "priocntlsys";
327   syscall_table[SYS_privsys] = "privsys";
328 #ifdef SYS_processor_bind
329   syscall_table[SYS_processor_bind] = "processor_bind";
330 #endif
331 #ifdef SYS_processor_info
332   syscall_table[SYS_processor_info] = "processor_info";
333 #endif
334 #ifdef SYS_processor_sys
335   syscall_table[SYS_processor_sys] = "processor_sys";
336 #endif
337   syscall_table[SYS_profil] = "profil";
338   syscall_table[SYS_pset] = "pset";
339   syscall_table[SYS_putmsg] = "putmsg";
340   syscall_table[SYS_putpmsg] = "putpmsg";
341   syscall_table[SYS_pwrite] = "pwrite";
342   syscall_table[SYS_pwrite64] = "pwrite64";
343   syscall_table[SYS_rctlsys] = "rctlsys";
344   syscall_table[SYS_read] = "read";
345 #ifdef SYS_readlink
346   syscall_table[SYS_readlink] = "readlink";
347 #endif
348 #ifdef SYS_readlinkat
349   syscall_table[SYS_readlinkat] = "readlinkat";
350 #endif
351   syscall_table[SYS_readv] = "readv";
352   syscall_table[SYS_recv] = "recv";
353   syscall_table[SYS_recvfrom] = "recvfrom";
354 #ifdef SYS_recvmmsg
355   syscall_table[SYS_recvmmsg] = "recvmmsg";
356 #endif
357   syscall_table[SYS_recvmsg] = "recvmsg";
358 #ifdef SYS_reflinkat
359   syscall_table[SYS_reflinkat] = "reflinkat";
360 #endif
361 #ifdef SYS_rename
362   syscall_table[SYS_rename] = "rename";
363 #endif
364 #ifdef SYS_renameat
365   syscall_table[SYS_renameat] = "renameat";
366 #endif
367   syscall_table[SYS_resolvepath] = "resolvepath";
368 #ifdef SYS_rmdir
369   syscall_table[SYS_rmdir] = "rmdir";
370 #endif
371   syscall_table[SYS_rpcsys] = "rpcsys";
372   syscall_table[SYS_rusagesys] = "rusagesys";
373   syscall_table[SYS_schedctl] = "schedctl";
374 #ifdef SYS_secsys
375   syscall_table[SYS_secsys] = "secsys";
376 #endif
377   syscall_table[SYS_semsys] = "semsys";
378   syscall_table[SYS_send] = "send";
379   syscall_table[SYS_sendfilev] = "sendfilev";
380 #ifdef SYS_sendmmsg
381   syscall_table[SYS_sendmmsg] = "sendmmsg";
382 #endif
383   syscall_table[SYS_sendmsg] = "sendmsg";
384   syscall_table[SYS_sendto] = "sendto";
385   syscall_table[SYS_setegid] = "setegid";
386   syscall_table[SYS_seteuid] = "seteuid";
387   syscall_table[SYS_setgid] = "setgid";
388   syscall_table[SYS_setgroups] = "setgroups";
389   syscall_table[SYS_setitimer] = "setitimer";
390   syscall_table[SYS_setregid] = "setregid";
391   syscall_table[SYS_setreuid] = "setreuid";
392   syscall_table[SYS_setrlimit] = "setrlimit";
393   syscall_table[SYS_setrlimit64] = "setrlimit64";
394   syscall_table[SYS_setsockopt] = "setsockopt";
395   syscall_table[SYS_setuid] = "setuid";
396   syscall_table[SYS_sharefs] = "sharefs";
397   syscall_table[SYS_shmsys] = "shmsys";
398   syscall_table[SYS_shutdown] = "shutdown";
399 #ifdef SYS_sidsys
400   syscall_table[SYS_sidsys] = "sidsys";
401 #endif
402   syscall_table[SYS_sigaction] = "sigaction";
403   syscall_table[SYS_sigaltstack] = "sigaltstack";
404 #ifdef SYS_signal
405   syscall_table[SYS_signal] = "signal";
406 #endif
407   syscall_table[SYS_signotify] = "signotify";
408   syscall_table[SYS_sigpending] = "sigpending";
409   syscall_table[SYS_sigprocmask] = "sigprocmask";
410   syscall_table[SYS_sigqueue] = "sigqueue";
411 #ifdef SYS_sigresend
412   syscall_table[SYS_sigresend] = "sigresend";
413 #endif
414   syscall_table[SYS_sigsendsys] = "sigsendsys";
415   syscall_table[SYS_sigsuspend] = "sigsuspend";
416   syscall_table[SYS_sigtimedwait] = "sigtimedwait";
417   syscall_table[SYS_so_socket] = "so_socket";
418   syscall_table[SYS_so_socketpair] = "so_socketpair";
419   syscall_table[SYS_sockconfig] = "sockconfig";
420 #ifdef SYS_sparc_fixalign
421   syscall_table[SYS_sparc_fixalign] = "sparc_fixalign";
422 #endif
423   syscall_table[SYS_sparc_utrap_install] = "sparc_utrap_install";
424 #ifdef SYS_spawn
425   syscall_table[SYS_spawn] = "spawn";
426 #endif
427 #ifdef SYS_stat
428   syscall_table[SYS_stat] = "stat";
429 #endif
430 #ifdef SYS_stat64
431   syscall_table[SYS_stat64] = "stat64";
432 #endif
433   syscall_table[SYS_statfs] = "statfs";
434   syscall_table[SYS_statvfs] = "statvfs";
435   syscall_table[SYS_statvfs64] = "statvfs64";
436   syscall_table[SYS_stime] = "stime";
437   syscall_table[SYS_stty] = "stty";
438 #ifdef SYS_symlink
439   syscall_table[SYS_symlink] = "symlink";
440 #endif
441 #ifdef SYS_symlinkat
442   syscall_table[SYS_symlinkat] = "symlinkat";
443 #endif
444   syscall_table[SYS_sync] = "sync";
445   syscall_table[SYS_syscall] = "syscall";
446   syscall_table[SYS_sysconfig] = "sysconfig";
447   syscall_table[SYS_sysfs] = "sysfs";
448   syscall_table[SYS_sysi86] = "sysi86";
449 #ifdef SYS_syssun
450   syscall_table[SYS_syssun] = "syssun";
451 #endif
452 #ifdef SYS_system_stats
453   syscall_table[SYS_system_stats] = "system_stats";
454 #endif
455   syscall_table[SYS_systeminfo] = "systeminfo";
456   syscall_table[SYS_tasksys] = "tasksys";
457   syscall_table[SYS_time] = "time";
458   syscall_table[SYS_timer_create] = "timer_create";
459   syscall_table[SYS_timer_delete] = "timer_delete";
460   syscall_table[SYS_timer_getoverrun] = "timer_getoverrun";
461   syscall_table[SYS_timer_gettime] = "timer_gettime";
462   syscall_table[SYS_timer_settime] = "timer_settime";
463   syscall_table[SYS_times] = "times";
464   syscall_table[SYS_uadmin] = "uadmin";
465   syscall_table[SYS_ucredsys] = "ucredsys";
466   syscall_table[SYS_ulimit] = "ulimit";
467   syscall_table[SYS_umask] = "umask";
468 #ifdef SYS_umount
469   syscall_table[SYS_umount] = "umount";
470 #endif
471   syscall_table[SYS_umount2] = "umount2";
472   syscall_table[SYS_uname] = "uname";
473 #ifdef SYS_unlink
474   syscall_table[SYS_unlink] = "unlink";
475 #endif
476 #ifdef SYS_unlinkat
477   syscall_table[SYS_unlinkat] = "unlinkat";
478 #endif
479 #ifdef SYS_utime
480   syscall_table[SYS_utime] = "utime";
481 #endif
482 #ifdef SYS_utimensat
483   syscall_table[SYS_utimensat] = "utimensat";
484 #endif
485 #ifdef SYS_utimes
486   syscall_table[SYS_utimes] = "utimes";
487 #endif
488 #ifdef SYS_utimesys
489   syscall_table[SYS_utimesys] = "utimesys";
490 #endif
491   syscall_table[SYS_utssys] = "utssys";
492   syscall_table[SYS_uucopy] = "uucopy";
493   syscall_table[SYS_uucopystr] = "uucopystr";
494 #ifdef SYS_uuidsys
495   syscall_table[SYS_uuidsys] = "uuidsys";
496 #endif
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 _initialize_proc_events ();
764 void
765 _initialize_proc_events ()
766 {
767   init_syscall_table ();
768 }
This page took 0.069034 seconds and 4 git commands to generate.