gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / gdb / proc-why.c
CommitLineData
44122162 1/* Machine-independent support for Solaris /proc (process file system)
0fda6bd2 2
b811d2c2 3 Copyright (C) 1999-2020 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
JM
20
21#include "defs.h"
22
0fda6bd2 23#define _STRUCTURED_PROC 1
0fda6bd2 24
0fda6bd2
JM
25#include <sys/types.h>
26#include <sys/procfs.h>
27
28#include "proc-utils.h"
29
7a952542
MK
30/* Much of the information used in the /proc interface, particularly
31 for printing status information, is kept as tables of structures of
32 the following form. These tables can be used to map numeric values
33 to their symbolic names and to a string that describes their
34 specific use. */
0fda6bd2 35
7a952542
MK
36struct trans
37{
38 int value; /* The numeric value. */
995816ba
PA
39 const char *name; /* The equivalent symbolic value. */
40 const char *desc; /* Short description of value. */
0fda6bd2
JM
41};
42
7a952542
MK
43/* Translate values in the pr_why field of a `struct prstatus' or
44 `struct lwpstatus'. */
0fda6bd2
JM
45
46static struct trans pr_why_table[] =
47{
0fda6bd2
JM
48 { PR_REQUESTED, "PR_REQUESTED",
49 "Directed to stop by debugger via P(IO)CSTOP or P(IO)CWSTOP" },
0fda6bd2 50 { PR_SIGNALLED, "PR_SIGNALLED", "Receipt of a traced signal" },
0fda6bd2 51 { PR_SYSENTRY, "PR_SYSENTRY", "Entry to a traced system call" },
0fda6bd2 52 { PR_SYSEXIT, "PR_SYSEXIT", "Exit from a traced system call" },
0fda6bd2 53 { PR_JOBCONTROL, "PR_JOBCONTROL", "Default job control stop signal action" },
0fda6bd2 54 { PR_FAULTED, "PR_FAULTED", "Incurred a traced hardware fault" },
0fda6bd2 55 { PR_SUSPENDED, "PR_SUSPENDED", "Process suspended" },
0fda6bd2 56 { PR_CHECKPOINT, "PR_CHECKPOINT", "Process stopped at checkpoint" },
0fda6bd2
JM
57};
58
7a952542
MK
59/* Pretty-print the pr_why field of a `struct prstatus' or `struct
60 lwpstatus'. */
61
0fda6bd2 62void
fba45db2
KB
63proc_prettyfprint_why (FILE *file, unsigned long why, unsigned long what,
64 int verbose)
0fda6bd2
JM
65{
66 int i;
67
68 if (why == 0)
69 return;
70
7a952542 71 for (i = 0; i < ARRAY_SIZE (pr_why_table); i++)
0fda6bd2
JM
72 if (why == pr_why_table[i].value)
73 {
74 fprintf (file, "%s ", pr_why_table[i].name);
75 if (verbose)
76 fprintf (file, ": %s ", pr_why_table[i].desc);
77
78 switch (why) {
0fda6bd2 79 case PR_REQUESTED:
7a952542 80 break; /* Nothing more to print. */
0fda6bd2
JM
81 case PR_SIGNALLED:
82 proc_prettyfprint_signal (file, what, verbose);
83 break;
0fda6bd2
JM
84 case PR_FAULTED:
85 proc_prettyfprint_fault (file, what, verbose);
86 break;
0fda6bd2
JM
87 case PR_SYSENTRY:
88 fprintf (file, "Entry to ");
89 proc_prettyfprint_syscall (file, what, verbose);
90 break;
0fda6bd2
JM
91 case PR_SYSEXIT:
92 fprintf (file, "Exit from ");
93 proc_prettyfprint_syscall (file, what, verbose);
94 break;
0fda6bd2
JM
95 case PR_JOBCONTROL:
96 proc_prettyfprint_signal (file, what, verbose);
97 break;
0fda6bd2
JM
98 default:
99 fprintf (file, "Unknown why %ld, what %ld\n", why, what);
100 break;
101 }
102 fprintf (file, "\n");
103
104 return;
105 }
7a952542 106
0fda6bd2
JM
107 fprintf (file, "Unknown pr_why.\n");
108}
109
110void
fba45db2 111proc_prettyprint_why (unsigned long why, unsigned long what, int verbose)
0fda6bd2
JM
112{
113 proc_prettyfprint_why (stdout, why, what, verbose);
114}
This page took 1.920099 seconds and 4 git commands to generate.