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

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gdb/] [gdb-6.8/] [gdb/] [proc-why.c] - Blame information for rev 25

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 25 jlechner
/* Machine-independent support for SVR4 /proc (process file system)
2
 
3
   Copyright (C) 1999, 2000, 2004, 2007, 2008 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
#include "defs.h"
22
 
23
#ifdef NEW_PROC_API
24
#define _STRUCTURED_PROC 1
25
#endif
26
 
27
#include <stdio.h>
28
#include <sys/types.h>
29
#include <sys/procfs.h>
30
 
31
#include "proc-utils.h"
32
 
33
/* Much of the information used in the /proc interface, particularly
34
   for printing status information, is kept as tables of structures of
35
   the following form.  These tables can be used to map numeric values
36
   to their symbolic names and to a string that describes their
37
   specific use.  */
38
 
39
struct trans
40
{
41
  int value;                    /* The numeric value.  */
42
  char *name;                   /* The equivalent symbolic value.  */
43
  char *desc;                   /* Short description of value.  */
44
};
45
 
46
/* Translate values in the pr_why field of a `struct prstatus' or
47
   `struct lwpstatus'.  */
48
 
49
static struct trans pr_why_table[] =
50
{
51
#if defined (PR_REQUESTED)
52
  /* All platforms.  */
53
  { PR_REQUESTED, "PR_REQUESTED",
54
    "Directed to stop by debugger via P(IO)CSTOP or P(IO)CWSTOP" },
55
#endif
56
#if defined (PR_SIGNALLED)
57
  /* All platforms.  */
58
  { PR_SIGNALLED, "PR_SIGNALLED", "Receipt of a traced signal" },
59
#endif
60
#if defined (PR_SYSENTRY)
61
  /* All platforms.  */
62
  { PR_SYSENTRY, "PR_SYSENTRY", "Entry to a traced system call" },
63
#endif
64
#if defined (PR_SYSEXIT)
65
  /* All platforms.  */
66
  { PR_SYSEXIT, "PR_SYSEXIT", "Exit from a traced system call" },
67
#endif
68
#if defined (PR_JOBCONTROL)
69
  /* All platforms.  */
70
  { PR_JOBCONTROL, "PR_JOBCONTROL", "Default job control stop signal action" },
71
#endif
72
#if defined (PR_FAULTED)
73
  /* All platforms.  */
74
  { PR_FAULTED, "PR_FAULTED", "Incurred a traced hardware fault" },
75
#endif
76
#if defined (PR_SUSPENDED)
77
  /* Solaris and UnixWare.  */
78
  { PR_SUSPENDED, "PR_SUSPENDED", "Process suspended" },
79
#endif
80
#if defined (PR_CHECKPOINT)
81
  /* Solaris only.  */
82
  { PR_CHECKPOINT, "PR_CHECKPOINT", "Process stopped at checkpoint" },
83
#endif
84
#if defined (PR_FORKSTOP)
85
  /* OSF/1 only.  */
86
  { PR_FORKSTOP, "PR_FORKSTOP", "Process stopped at end of fork call" },
87
#endif
88
#if defined (PR_TCRSTOP)
89
  /* OSF/1 only.  */
90
  { PR_TCRSTOP, "PR_TCRSTOP", "Process stopped on thread creation" },
91
#endif
92
#if defined (PR_TTSTOP)
93
  /* OSF/1 only.  */
94
  { PR_TTSTOP, "PR_TTSTOP", "Process stopped on thread termination" },
95
#endif
96
#if defined (PR_DEAD)
97
  /* OSF/1 only.  */
98
  { PR_DEAD, "PR_DEAD", "Process stopped in exit system call" },
99
#endif
100
};
101
 
102
/* Pretty-print the pr_why field of a `struct prstatus' or `struct
103
   lwpstatus'.  */
104
 
105
void
106
proc_prettyfprint_why (FILE *file, unsigned long why, unsigned long what,
107
                       int verbose)
108
{
109
  int i;
110
 
111
  if (why == 0)
112
    return;
113
 
114
  for (i = 0; i < ARRAY_SIZE (pr_why_table); i++)
115
    if (why == pr_why_table[i].value)
116
      {
117
        fprintf (file, "%s ", pr_why_table[i].name);
118
        if (verbose)
119
          fprintf (file, ": %s ", pr_why_table[i].desc);
120
 
121
        switch (why) {
122
#ifdef PR_REQUESTED
123
        case PR_REQUESTED:
124
          break;                /* Nothing more to print.  */
125
#endif
126
#ifdef PR_SIGNALLED
127
        case PR_SIGNALLED:
128
          proc_prettyfprint_signal (file, what, verbose);
129
          break;
130
#endif
131
#ifdef PR_FAULTED
132
        case PR_FAULTED:
133
          proc_prettyfprint_fault (file, what, verbose);
134
          break;
135
#endif
136
#ifdef PR_SYSENTRY
137
        case PR_SYSENTRY:
138
          fprintf (file, "Entry to ");
139
          proc_prettyfprint_syscall (file, what, verbose);
140
          break;
141
#endif
142
#ifdef PR_SYSEXIT
143
        case PR_SYSEXIT:
144
          fprintf (file, "Exit from ");
145
          proc_prettyfprint_syscall (file, what, verbose);
146
          break;
147
#endif
148
#ifdef PR_JOBCONTROL
149
        case PR_JOBCONTROL:
150
          proc_prettyfprint_signal (file, what, verbose);
151
          break;
152
#endif
153
#ifdef PR_DEAD
154
        case PR_DEAD:
155
          fprintf (file, "Exit status: %ld\n", what);
156
          break;
157
#endif
158
        default:
159
          fprintf (file, "Unknown why %ld, what %ld\n", why, what);
160
          break;
161
        }
162
        fprintf (file, "\n");
163
 
164
        return;
165
      }
166
 
167
  fprintf (file, "Unknown pr_why.\n");
168
}
169
 
170
void
171
proc_prettyprint_why (unsigned long why, unsigned long what, int verbose)
172
{
173
  proc_prettyfprint_why (stdout, why, what, verbose);
174
}

powered by: WebSVN 2.1.0

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