]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/proc-why.c
PR31692, objdump fails .debug_info size check
[thirdparty/binutils-gdb.git] / gdb / proc-why.c
CommitLineData
44122162 1/* Machine-independent support for Solaris /proc (process file system)
0fda6bd2 2
1d506c26 3 Copyright (C) 1999-2024 Free Software Foundation, Inc.
0fda6bd2 4
7a952542
MK
5 Written by Michael Snyder at Cygnus Solutions.
6 Based on work by Fred Fish, Stu Grossman, Geoff Noer, and others.
0fda6bd2 7
7a952542
MK
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
a9762ec7 10 the Free Software Foundation; either version 3 of the License, or
7a952542 11 (at your option) any later version.
0fda6bd2 12
7a952542
MK
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.
0fda6bd2 17
7a952542 18 You should have received a copy of the GNU General Public License
a9762ec7 19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
0fda6bd2 20
0fda6bd2 21
0fda6bd2
JM
22#include <sys/types.h>
23#include <sys/procfs.h>
24
25#include "proc-utils.h"
26
7a952542
MK
27/* Much of the information used in the /proc interface, particularly
28 for printing status information, is kept as tables of structures of
29 the following form. These tables can be used to map numeric values
30 to their symbolic names and to a string that describes their
31 specific use. */
0fda6bd2 32
7a952542
MK
33struct trans
34{
35 int value; /* The numeric value. */
995816ba
PA
36 const char *name; /* The equivalent symbolic value. */
37 const char *desc; /* Short description of value. */
0fda6bd2
JM
38};
39
7a952542
MK
40/* Translate values in the pr_why field of a `struct prstatus' or
41 `struct lwpstatus'. */
0fda6bd2
JM
42
43static struct trans pr_why_table[] =
44{
0fda6bd2
JM
45 { PR_REQUESTED, "PR_REQUESTED",
46 "Directed to stop by debugger via P(IO)CSTOP or P(IO)CWSTOP" },
0fda6bd2 47 { PR_SIGNALLED, "PR_SIGNALLED", "Receipt of a traced signal" },
0fda6bd2 48 { PR_SYSENTRY, "PR_SYSENTRY", "Entry to a traced system call" },
0fda6bd2 49 { PR_SYSEXIT, "PR_SYSEXIT", "Exit from a traced system call" },
0fda6bd2 50 { PR_JOBCONTROL, "PR_JOBCONTROL", "Default job control stop signal action" },
0fda6bd2 51 { PR_FAULTED, "PR_FAULTED", "Incurred a traced hardware fault" },
0fda6bd2 52 { PR_SUSPENDED, "PR_SUSPENDED", "Process suspended" },
0fda6bd2 53 { PR_CHECKPOINT, "PR_CHECKPOINT", "Process stopped at checkpoint" },
0fda6bd2
JM
54};
55
7a952542
MK
56/* Pretty-print the pr_why field of a `struct prstatus' or `struct
57 lwpstatus'. */
58
0fda6bd2 59void
fba45db2
KB
60proc_prettyfprint_why (FILE *file, unsigned long why, unsigned long what,
61 int verbose)
0fda6bd2
JM
62{
63 int i;
64
65 if (why == 0)
66 return;
67
7a952542 68 for (i = 0; i < ARRAY_SIZE (pr_why_table); i++)
0fda6bd2
JM
69 if (why == pr_why_table[i].value)
70 {
71 fprintf (file, "%s ", pr_why_table[i].name);
72 if (verbose)
73 fprintf (file, ": %s ", pr_why_table[i].desc);
74
75 switch (why) {
0fda6bd2 76 case PR_REQUESTED:
7a952542 77 break; /* Nothing more to print. */
0fda6bd2
JM
78 case PR_SIGNALLED:
79 proc_prettyfprint_signal (file, what, verbose);
80 break;
0fda6bd2
JM
81 case PR_FAULTED:
82 proc_prettyfprint_fault (file, what, verbose);
83 break;
0fda6bd2
JM
84 case PR_SYSENTRY:
85 fprintf (file, "Entry to ");
86 proc_prettyfprint_syscall (file, what, verbose);
87 break;
0fda6bd2
JM
88 case PR_SYSEXIT:
89 fprintf (file, "Exit from ");
90 proc_prettyfprint_syscall (file, what, verbose);
91 break;
0fda6bd2
JM
92 case PR_JOBCONTROL:
93 proc_prettyfprint_signal (file, what, verbose);
94 break;
0fda6bd2
JM
95 default:
96 fprintf (file, "Unknown why %ld, what %ld\n", why, what);
97 break;
98 }
99 fprintf (file, "\n");
100
101 return;
102 }
7a952542 103
0fda6bd2
JM
104 fprintf (file, "Unknown pr_why.\n");
105}
106
107void
fba45db2 108proc_prettyprint_why (unsigned long why, unsigned long what, int verbose)
0fda6bd2
JM
109{
110 proc_prettyfprint_why (stdout, why, what, verbose);
111}