OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [gdb-7.2/] [gdb/] [proc-why.c] - Blame information for rev 835

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 330 jeremybenn
/* Machine-independent support for SVR4 /proc (process file system)
2
 
3
   Copyright (C) 1999, 2000, 2004, 2007, 2008, 2009, 2010
4
   Free Software Foundation, Inc.
5
 
6
   Written by Michael Snyder at Cygnus Solutions.
7
   Based on work by Fred Fish, Stu Grossman, Geoff Noer, and others.
8
 
9
   This program is free software; you can redistribute it and/or modify
10
   it under the terms of the GNU General Public License as published by
11
   the Free Software Foundation; either version 3 of the License, or
12
   (at your option) any later version.
13
 
14
   This program is distributed in the hope that it will be useful,
15
   but WITHOUT ANY WARRANTY; without even the implied warranty of
16
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
   GNU General Public License for more details.
18
 
19
   You should have received a copy of the GNU General Public License
20
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
 
22
#include "defs.h"
23
 
24
#ifdef NEW_PROC_API
25
#define _STRUCTURED_PROC 1
26
#endif
27
 
28
#include <stdio.h>
29
#include <sys/types.h>
30
#include <sys/procfs.h>
31
 
32
#include "proc-utils.h"
33
 
34
/* Much of the information used in the /proc interface, particularly
35
   for printing status information, is kept as tables of structures of
36
   the following form.  These tables can be used to map numeric values
37
   to their symbolic names and to a string that describes their
38
   specific use.  */
39
 
40
struct trans
41
{
42
  int value;                    /* The numeric value.  */
43
  char *name;                   /* The equivalent symbolic value.  */
44
  char *desc;                   /* Short description of value.  */
45
};
46
 
47
/* Translate values in the pr_why field of a `struct prstatus' or
48
   `struct lwpstatus'.  */
49
 
50
static struct trans pr_why_table[] =
51
{
52
#if defined (PR_REQUESTED)
53
  /* All platforms.  */
54
  { PR_REQUESTED, "PR_REQUESTED",
55
    "Directed to stop by debugger via P(IO)CSTOP or P(IO)CWSTOP" },
56
#endif
57
#if defined (PR_SIGNALLED)
58
  /* All platforms.  */
59
  { PR_SIGNALLED, "PR_SIGNALLED", "Receipt of a traced signal" },
60
#endif
61
#if defined (PR_SYSENTRY)
62
  /* All platforms.  */
63
  { PR_SYSENTRY, "PR_SYSENTRY", "Entry to a traced system call" },
64
#endif
65
#if defined (PR_SYSEXIT)
66
  /* All platforms.  */
67
  { PR_SYSEXIT, "PR_SYSEXIT", "Exit from a traced system call" },
68
#endif
69
#if defined (PR_JOBCONTROL)
70
  /* All platforms.  */
71
  { PR_JOBCONTROL, "PR_JOBCONTROL", "Default job control stop signal action" },
72
#endif
73
#if defined (PR_FAULTED)
74
  /* All platforms.  */
75
  { PR_FAULTED, "PR_FAULTED", "Incurred a traced hardware fault" },
76
#endif
77
#if defined (PR_SUSPENDED)
78
  /* Solaris and UnixWare.  */
79
  { PR_SUSPENDED, "PR_SUSPENDED", "Process suspended" },
80
#endif
81
#if defined (PR_CHECKPOINT)
82
  /* Solaris only.  */
83
  { PR_CHECKPOINT, "PR_CHECKPOINT", "Process stopped at checkpoint" },
84
#endif
85
#if defined (PR_FORKSTOP)
86
  /* OSF/1 only.  */
87
  { PR_FORKSTOP, "PR_FORKSTOP", "Process stopped at end of fork call" },
88
#endif
89
#if defined (PR_TCRSTOP)
90
  /* OSF/1 only.  */
91
  { PR_TCRSTOP, "PR_TCRSTOP", "Process stopped on thread creation" },
92
#endif
93
#if defined (PR_TTSTOP)
94
  /* OSF/1 only.  */
95
  { PR_TTSTOP, "PR_TTSTOP", "Process stopped on thread termination" },
96
#endif
97
#if defined (PR_DEAD)
98
  /* OSF/1 only.  */
99
  { PR_DEAD, "PR_DEAD", "Process stopped in exit system call" },
100
#endif
101
};
102
 
103
/* Pretty-print the pr_why field of a `struct prstatus' or `struct
104
   lwpstatus'.  */
105
 
106
void
107
proc_prettyfprint_why (FILE *file, unsigned long why, unsigned long what,
108
                       int verbose)
109
{
110
  int i;
111
 
112
  if (why == 0)
113
    return;
114
 
115
  for (i = 0; i < ARRAY_SIZE (pr_why_table); i++)
116
    if (why == pr_why_table[i].value)
117
      {
118
        fprintf (file, "%s ", pr_why_table[i].name);
119
        if (verbose)
120
          fprintf (file, ": %s ", pr_why_table[i].desc);
121
 
122
        switch (why) {
123
#ifdef PR_REQUESTED
124
        case PR_REQUESTED:
125
          break;                /* Nothing more to print.  */
126
#endif
127
#ifdef PR_SIGNALLED
128
        case PR_SIGNALLED:
129
          proc_prettyfprint_signal (file, what, verbose);
130
          break;
131
#endif
132
#ifdef PR_FAULTED
133
        case PR_FAULTED:
134
          proc_prettyfprint_fault (file, what, verbose);
135
          break;
136
#endif
137
#ifdef PR_SYSENTRY
138
        case PR_SYSENTRY:
139
          fprintf (file, "Entry to ");
140
          proc_prettyfprint_syscall (file, what, verbose);
141
          break;
142
#endif
143
#ifdef PR_SYSEXIT
144
        case PR_SYSEXIT:
145
          fprintf (file, "Exit from ");
146
          proc_prettyfprint_syscall (file, what, verbose);
147
          break;
148
#endif
149
#ifdef PR_JOBCONTROL
150
        case PR_JOBCONTROL:
151
          proc_prettyfprint_signal (file, what, verbose);
152
          break;
153
#endif
154
#ifdef PR_DEAD
155
        case PR_DEAD:
156
          fprintf (file, "Exit status: %ld\n", what);
157
          break;
158
#endif
159
        default:
160
          fprintf (file, "Unknown why %ld, what %ld\n", why, what);
161
          break;
162
        }
163
        fprintf (file, "\n");
164
 
165
        return;
166
      }
167
 
168
  fprintf (file, "Unknown pr_why.\n");
169
}
170
 
171
void
172
proc_prettyprint_why (unsigned long why, unsigned long what, int verbose)
173
{
174
  proc_prettyfprint_why (stdout, why, what, verbose);
175
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.