|
|
|
@ -1,34 +1,28 @@ |
|
|
|
/* Machine independent support for SVR4 /proc (process file system) for GDB.
|
|
|
|
Copyright 1999, 2000 Free Software Foundation, Inc. |
|
|
|
Written by Michael Snyder at Cygnus Solutions. |
|
|
|
Based on work by Fred Fish, Stu Grossman, Geoff Noer, and others. |
|
|
|
/* Machine-independent support for SVR4 /proc (process file system)
|
|
|
|
|
|
|
|
This file is part of GDB. |
|
|
|
Copyright 1999, 2000, 2004 Free Software Foundation, Inc. |
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify |
|
|
|
it under the terms of the GNU General Public License as published by |
|
|
|
the Free Software Foundation; either version 2 of the License, or |
|
|
|
(at your option) any later version. |
|
|
|
Written by Michael Snyder at Cygnus Solutions. |
|
|
|
Based on work by Fred Fish, Stu Grossman, Geoff Noer, and others. |
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful, |
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
|
|
GNU General Public License for more details. |
|
|
|
This program is free software; you can redistribute it and/or modify |
|
|
|
it under the terms of the GNU General Public License as published by |
|
|
|
the Free Software Foundation; either version 2 of the License, or |
|
|
|
(at your option) any later version. |
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License |
|
|
|
along with this program; if not, write to the Free Software Foundation, |
|
|
|
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ |
|
|
|
This program is distributed in the hope that it will be useful, |
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
|
|
GNU General Public License for more details. |
|
|
|
|
|
|
|
/*
|
|
|
|
* Pretty-print the pr_why value. |
|
|
|
* |
|
|
|
* Arguments: unsigned long flags, int verbose |
|
|
|
* |
|
|
|
*/ |
|
|
|
You should have received a copy of the GNU General Public License |
|
|
|
along with this program; if not, write to the Free Software |
|
|
|
Foundation, Inc., 59 Temple Place - Suite 330, |
|
|
|
Boston, MA 02111-1307, USA. */ |
|
|
|
|
|
|
|
#include "defs.h" |
|
|
|
|
|
|
|
#if defined(NEW_PROC_API) |
|
|
|
#ifdef NEW_PROC_API |
|
|
|
#define _STRUCTURED_PROC 1 |
|
|
|
#endif |
|
|
|
|
|
|
|
@ -38,72 +32,78 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ |
|
|
|
|
|
|
|
#include "proc-utils.h" |
|
|
|
|
|
|
|
/* Much of the information used in the /proc interface, particularly for
|
|
|
|
printing status information, is kept as tables of structures of the |
|
|
|
following form. These tables can be used to map numeric values to |
|
|
|
their symbolic names and to a string that describes their specific use. */ |
|
|
|
/* Much of the information used in the /proc interface, particularly
|
|
|
|
for printing status information, is kept as tables of structures of |
|
|
|
the following form. These tables can be used to map numeric values |
|
|
|
to their symbolic names and to a string that describes their |
|
|
|
specific use. */ |
|
|
|
|
|
|
|
struct trans { |
|
|
|
int value; /* The numeric value */ |
|
|
|
char *name; /* The equivalent symbolic value */ |
|
|
|
char *desc; /* Short description of value */ |
|
|
|
struct trans |
|
|
|
{ |
|
|
|
int value; /* The numeric value. */ |
|
|
|
char *name; /* The equivalent symbolic value. */ |
|
|
|
char *desc; /* Short description of value. */ |
|
|
|
}; |
|
|
|
|
|
|
|
/* Translate values in the pr_why field of the prstatus struct. */ |
|
|
|
/* Translate values in the pr_why field of a `struct prstatus' or
|
|
|
|
`struct lwpstatus'. */ |
|
|
|
|
|
|
|
static struct trans pr_why_table[] = |
|
|
|
{ |
|
|
|
#if defined (PR_REQUESTED) |
|
|
|
/* All platforms */ |
|
|
|
/* All platforms. */ |
|
|
|
{ PR_REQUESTED, "PR_REQUESTED", |
|
|
|
"Directed to stop by debugger via P(IO)CSTOP or P(IO)CWSTOP" }, |
|
|
|
#endif |
|
|
|
#if defined (PR_SIGNALLED) |
|
|
|
/* All platforms */ |
|
|
|
/* All platforms. */ |
|
|
|
{ PR_SIGNALLED, "PR_SIGNALLED", "Receipt of a traced signal" }, |
|
|
|
#endif |
|
|
|
#if defined (PR_SYSENTRY) |
|
|
|
/* All platforms */ |
|
|
|
/* All platforms. */ |
|
|
|
{ PR_SYSENTRY, "PR_SYSENTRY", "Entry to a traced system call" }, |
|
|
|
#endif |
|
|
|
#if defined (PR_SYSEXIT) |
|
|
|
/* All platforms */ |
|
|
|
/* All platforms. */ |
|
|
|
{ PR_SYSEXIT, "PR_SYSEXIT", "Exit from a traced system call" }, |
|
|
|
#endif |
|
|
|
#if defined (PR_JOBCONTROL) |
|
|
|
/* All platforms */ |
|
|
|
/* All platforms. */ |
|
|
|
{ PR_JOBCONTROL, "PR_JOBCONTROL", "Default job control stop signal action" }, |
|
|
|
#endif |
|
|
|
#if defined (PR_FAULTED) |
|
|
|
/* All platforms */ |
|
|
|
/* All platforms. */ |
|
|
|
{ PR_FAULTED, "PR_FAULTED", "Incurred a traced hardware fault" }, |
|
|
|
#endif |
|
|
|
#if defined (PR_SUSPENDED) |
|
|
|
/* Solaris and UnixWare */ |
|
|
|
/* Solaris and UnixWare. */ |
|
|
|
{ PR_SUSPENDED, "PR_SUSPENDED", "Process suspended" }, |
|
|
|
#endif |
|
|
|
#if defined (PR_CHECKPOINT) |
|
|
|
/* Solaris only */ |
|
|
|
/* Solaris only. */ |
|
|
|
{ PR_CHECKPOINT, "PR_CHECKPOINT", "Process stopped at checkpoint" }, |
|
|
|
#endif |
|
|
|
#if defined (PR_FORKSTOP) |
|
|
|
/* OSF only */ |
|
|
|
/* OSF/1 only. */ |
|
|
|
{ PR_FORKSTOP, "PR_FORKSTOP", "Process stopped at end of fork call" }, |
|
|
|
#endif |
|
|
|
#if defined (PR_TCRSTOP) |
|
|
|
/* OSF only */ |
|
|
|
/* OSF/1 only. */ |
|
|
|
{ PR_TCRSTOP, "PR_TCRSTOP", "Process stopped on thread creation" }, |
|
|
|
#endif |
|
|
|
#if defined (PR_TTSTOP) |
|
|
|
/* OSF only */ |
|
|
|
/* OSF/1 only. */ |
|
|
|
{ PR_TTSTOP, "PR_TTSTOP", "Process stopped on thread termination" }, |
|
|
|
#endif |
|
|
|
#if defined (PR_DEAD) |
|
|
|
/* OSF only */ |
|
|
|
/* OSF/1 only. */ |
|
|
|
{ PR_DEAD, "PR_DEAD", "Process stopped in exit system call" }, |
|
|
|
#endif |
|
|
|
}; |
|
|
|
|
|
|
|
/* Pretty-print the pr_why field of a `struct prstatus' or `struct
|
|
|
|
lwpstatus'. */ |
|
|
|
|
|
|
|
void |
|
|
|
proc_prettyfprint_why (FILE *file, unsigned long why, unsigned long what, |
|
|
|
int verbose) |
|
|
|
@ -113,7 +113,7 @@ proc_prettyfprint_why (FILE *file, unsigned long why, unsigned long what, |
|
|
|
if (why == 0) |
|
|
|
return; |
|
|
|
|
|
|
|
for (i = 0; i < sizeof (pr_why_table) / sizeof (pr_why_table[0]); i++) |
|
|
|
for (i = 0; i < ARRAY_SIZE (pr_why_table); i++) |
|
|
|
if (why == pr_why_table[i].value) |
|
|
|
{ |
|
|
|
fprintf (file, "%s ", pr_why_table[i].name); |
|
|
|
@ -123,7 +123,7 @@ proc_prettyfprint_why (FILE *file, unsigned long why, unsigned long what, |
|
|
|
switch (why) { |
|
|
|
#ifdef PR_REQUESTED |
|
|
|
case PR_REQUESTED: |
|
|
|
break; /* Nothing more to print. */ |
|
|
|
break; /* Nothing more to print. */ |
|
|
|
#endif |
|
|
|
#ifdef PR_SIGNALLED |
|
|
|
case PR_SIGNALLED: |
|
|
|
@ -165,6 +165,7 @@ proc_prettyfprint_why (FILE *file, unsigned long why, unsigned long what, |
|
|
|
|
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
fprintf (file, "Unknown pr_why.\n"); |
|
|
|
} |
|
|
|
|
|
|
|
|