Remove ioctl-based procfs support on Solaris
This is the previously mentioned patch to get rid of
unstructured/ioctl-based procfs support in procfs.c. Given that support
for structured procfs was introduced in Solaris 2.6 back in 1997 and
we're just removing support for Solaris < 10, there's no point in
carrying that baggage (and tons of support for IRIX and OSF/1 as well)
around any longer.
Most of the patch should be straightforward (removing support for
!NEW_PROC_API, non-Solaris OSes and pre-Solaris 10 quirks).
Only a few points need explanations:
* <sys/syscall.h> was already included unconditionally in most places,
so there's no need to have guards in a few remaining ones.
* configure.host already obsoletes i?86-*-sysv4.2, i?86-*-sysv5, so
NEW_PROC_API detection for those in configure.ac can go.
* I'm still including <sys/procfs.h> with #define _STRUCTURED_PROC 1.
Theoretically, it would be better to include <procfs.h> on Solaris
(which includes that define), but that breaks the build over
<procfs.h> vs. gdb's "procfs.h", and doesn't exist on Linux.
* I've regenerated syscall_table[] in proc-events.c with a small script
from Solaris 10, 11.3, 11.4 <sys/syscall.h>, so there should be no
traces of older Solaris versions and other OSes left.
* prsysent_t and DYNAMIC_SYSCALLS was only used for AIX 5, but AIX
doesn't use procfs.c any longer, so all related code can go.
The patch was generated with diff -w so one can easier see changes
without being distracted by simple reindentations.
So far, it has only been compiled and smoke-tested on
amd64-pc-solaris2.1[01], sparcv9-sun-solaris2.1[01], and
x86_64-pc-linux-gnu. Certainly needs more testing (Solaris 11.3
vs. 11.4, 32-bit gdb, testsuite once I've figured out what's wrong on
Solaris 10 etc.), but it's enough to get a first impression how much
cleanup is possible here.
* configure.ac Don't check for sys/fault.h, sys/syscall.h,
sys/proc.h.
(NEW_PROC_API): Remove.
(prsysent_t, pr_sigset_t, pr_sigaction64_t, pr_siginfo64_t):
Likewise.
* common/common.m4 (GDB_AC_COMMON): Don't check for sys/syscall.h.
* configure: Regenerate.
* config.in: Regenerate.
* gdbserver/configure: Regenerate.
* gdbserver/config.in: Regenerate.
* i386-sol2-nat.c (_initialize_amd64_sol2_nat): Remove
NEW_PROC_API test.
* sparc-sol2-nat.c (_initialize_sparc_sol2_nat): Likewise.
* linux-btrace.c: Remove HAVE_SYS_SYSCALL_H test.
* proc-api.c: Remove !NEW_PROC_API support.
Remove HAVE_SYS_PROC_H and HAVE_SYS_USER_H tests.
Remove tests for macros always defined on Solaris.
* proc-events.c: Remove !NEW_PROC_API support.
Remove Remove HAVE_SYS_SYSCALL_H, HAVE_SYS_PROC_H and
HAVE_SYS_USER_H tests.
(init_syscall_table): Remove non-Solaris syscalls.
Remove tests for syscalls present on all Solaris versions.
Add missing Solaris 10+ syscalls.
(signal_table): Remove non-Solaris signals.
Remove tests for signals present on all Solaris versions.
(fault_table): Remove non-Solaris faults.
Remove tests for faults present on all Solaris versions.
* proc-flags.c: Remove !NEW_PROC_API support.
(pr_flag_table): Remove non-Solaris and pre-Solaris 7 comments.
Remove non-Solaris flags.
* proc-why.c: Remove !NEW_PROC_API support.
(pr_why_table): Remove meaningless comments.
Remove tests for reasons present on all Solaris versions.
Remove OSF/1 cases.
(proc_prettyfprint_why): Likewise.
* procfs.c: Remove !NEW_PROC_API and DYNAMIC_SYSCALLS support.
Remove HAVE_SYS_FAULT_H and HAVE_SYS_SYSCALL_H tests.
Remove WA_READ test, IRIX watchpoint support.
(gdb_sigset_t, gdb_sigaction_t, gdb_siginfo_t): Replace by base
types. Change users.
(gdb_praddset, gdb_prdelset, gdb_premptysysset, gdb_praddsysset)
(gdb_prdelset, gdb_pr_issyssetmember): Replace by base macros.
Change callers.
Remove CTL_PROC_NAME_FMT tests.
(gdb_prstatus_t, gdb_lwpstatus_t): Replace by base types. Change
users.
(sysset_t_size): Remove. Use sizeof (sysset_t) in callers.
Remove PROCFS_DONT_PIOCSSIG_CURSIG support.
(proc_modify_flag): Replace GDBRESET by PCUNSET.
Remove PR_ASYNC, PR_KLC tests.
(proc_unset_inherit_on_fork): Remove PR_ASYNC test.
(proc_parent_pid): Remove PCWATCH etc. tests.
(proc_set_watchpoint): Remove !PCWATCH && !PIOCSWATCH support.
Remove PCAGENT test.
(proc_get_nthreads) [PIOCNTHR && PIOCTLIST]: Remove.
Remove SYS_lwpcreate || SYS_lwp_create test.
(proc_get_current_thread): Likewise.
[PIOCNTHR && PIOCTLIST]: Remove.
[PIOCLSTATUS]: Remove.
(procfs_debug_inferior): Remove non-Solaris cases, conditionals.
[PRFS_STOPEXEC]: Remove.
(syscall_is_lwp_exit): Remove non-Solaris cases, conditionals.
(syscall_is_exit): Likewise.
(syscall_is_exec): Likewise.
(syscall_is_lwp_create): Likewise.
Remove SYS_syssgi support.
(procfs_wait): Remove PR_ASYNC, !PIOCSSPCACT tests.
[SYS_syssgi]: Remove.
Remove non-Solaris cases, conditionals.
(unconditionally_kill_inferior) [PROCFS_NEED_PIOCSSIG_FOR_KILL]:
Remove.
(procfs_init_inferior) [SYS_syssgi]: Remove.
(procfs_set_exec_trap) [PRFS_STOPEXEC]: Remove.
(procfs_inferior_created) [SYS_syssgi]: Remove.
(procfs_set_watchpoint): Remove !AIX5 test.
(procfs_stopped_by_watchpoint): Remove FLTWATCH test, FLTKWATCH
case.
(mappingflags) [MA_PHYS]: Remove.
(info_mappings_callback): Remove PCAGENT test.
Remove PIOCOPENLWP || PCAGENT test.
2017-11-30 16:05:30 +01:00
|
|
|
/* Machine-independent support for Solaris /proc (process file system)
|
2000-01-25 03:40:50 +01:00
|
|
|
|
2018-01-01 05:43:02 +01:00
|
|
|
Copyright (C) 1999-2018 Free Software Foundation, Inc.
|
2000-01-25 03:40:50 +01:00
|
|
|
|
2004-10-28 13:04:07 +02:00
|
|
|
Written by Michael Snyder at Cygnus Solutions.
|
|
|
|
Based on work by Fred Fish, Stu Grossman, Geoff Noer, and others.
|
2000-01-25 03:40:50 +01:00
|
|
|
|
2004-10-28 13:04:07 +02:00
|
|
|
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
|
2007-08-23 20:08:50 +02:00
|
|
|
the Free Software Foundation; either version 3 of the License, or
|
2004-10-28 13:04:07 +02:00
|
|
|
(at your option) any later version.
|
2000-01-25 03:40:50 +01:00
|
|
|
|
2004-10-28 13:04:07 +02:00
|
|
|
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.
|
2000-01-25 03:40:50 +01:00
|
|
|
|
2004-10-28 13:04:07 +02:00
|
|
|
You should have received a copy of the GNU General Public License
|
2007-08-23 20:08:50 +02:00
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
2000-01-25 03:40:50 +01:00
|
|
|
|
|
|
|
#include "defs.h"
|
|
|
|
|
|
|
|
#define _STRUCTURED_PROC 1
|
|
|
|
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <sys/procfs.h>
|
|
|
|
|
|
|
|
#include "proc-utils.h"
|
|
|
|
|
2004-10-28 13:04:07 +02:00
|
|
|
/* 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. */
|
2000-01-25 03:40:50 +01:00
|
|
|
|
2004-10-28 13:04:07 +02:00
|
|
|
struct trans
|
|
|
|
{
|
|
|
|
int value; /* The numeric value. */
|
2017-04-05 20:21:37 +02:00
|
|
|
const char *name; /* The equivalent symbolic value. */
|
|
|
|
const char *desc; /* Short description of value. */
|
2000-01-25 03:40:50 +01:00
|
|
|
};
|
|
|
|
|
2004-10-28 13:04:07 +02:00
|
|
|
/* Translate values in the pr_why field of a `struct prstatus' or
|
|
|
|
`struct lwpstatus'. */
|
2000-01-25 03:40:50 +01:00
|
|
|
|
|
|
|
static struct trans pr_why_table[] =
|
|
|
|
{
|
|
|
|
{ PR_REQUESTED, "PR_REQUESTED",
|
|
|
|
"Directed to stop by debugger via P(IO)CSTOP or P(IO)CWSTOP" },
|
|
|
|
{ PR_SIGNALLED, "PR_SIGNALLED", "Receipt of a traced signal" },
|
|
|
|
{ PR_SYSENTRY, "PR_SYSENTRY", "Entry to a traced system call" },
|
|
|
|
{ PR_SYSEXIT, "PR_SYSEXIT", "Exit from a traced system call" },
|
|
|
|
{ PR_JOBCONTROL, "PR_JOBCONTROL", "Default job control stop signal action" },
|
|
|
|
{ PR_FAULTED, "PR_FAULTED", "Incurred a traced hardware fault" },
|
|
|
|
{ PR_SUSPENDED, "PR_SUSPENDED", "Process suspended" },
|
|
|
|
{ PR_CHECKPOINT, "PR_CHECKPOINT", "Process stopped at checkpoint" },
|
|
|
|
};
|
|
|
|
|
2004-10-28 13:04:07 +02:00
|
|
|
/* Pretty-print the pr_why field of a `struct prstatus' or `struct
|
|
|
|
lwpstatus'. */
|
|
|
|
|
2000-01-25 03:40:50 +01:00
|
|
|
void
|
2000-07-30 03:48:28 +02:00
|
|
|
proc_prettyfprint_why (FILE *file, unsigned long why, unsigned long what,
|
|
|
|
int verbose)
|
2000-01-25 03:40:50 +01:00
|
|
|
{
|
|
|
|
int i;
|
|
|
|
|
|
|
|
if (why == 0)
|
|
|
|
return;
|
|
|
|
|
2004-10-28 13:04:07 +02:00
|
|
|
for (i = 0; i < ARRAY_SIZE (pr_why_table); i++)
|
2000-01-25 03:40:50 +01:00
|
|
|
if (why == pr_why_table[i].value)
|
|
|
|
{
|
|
|
|
fprintf (file, "%s ", pr_why_table[i].name);
|
|
|
|
if (verbose)
|
|
|
|
fprintf (file, ": %s ", pr_why_table[i].desc);
|
|
|
|
|
|
|
|
switch (why) {
|
|
|
|
case PR_REQUESTED:
|
2004-10-28 13:04:07 +02:00
|
|
|
break; /* Nothing more to print. */
|
2000-01-25 03:40:50 +01:00
|
|
|
case PR_SIGNALLED:
|
|
|
|
proc_prettyfprint_signal (file, what, verbose);
|
|
|
|
break;
|
|
|
|
case PR_FAULTED:
|
|
|
|
proc_prettyfprint_fault (file, what, verbose);
|
|
|
|
break;
|
|
|
|
case PR_SYSENTRY:
|
|
|
|
fprintf (file, "Entry to ");
|
|
|
|
proc_prettyfprint_syscall (file, what, verbose);
|
|
|
|
break;
|
|
|
|
case PR_SYSEXIT:
|
|
|
|
fprintf (file, "Exit from ");
|
|
|
|
proc_prettyfprint_syscall (file, what, verbose);
|
|
|
|
break;
|
|
|
|
case PR_JOBCONTROL:
|
|
|
|
proc_prettyfprint_signal (file, what, verbose);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
fprintf (file, "Unknown why %ld, what %ld\n", why, what);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
fprintf (file, "\n");
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
2004-10-28 13:04:07 +02:00
|
|
|
|
2000-01-25 03:40:50 +01:00
|
|
|
fprintf (file, "Unknown pr_why.\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
2000-07-30 03:48:28 +02:00
|
|
|
proc_prettyprint_why (unsigned long why, unsigned long what, int verbose)
|
2000-01-25 03:40:50 +01:00
|
|
|
{
|
|
|
|
proc_prettyfprint_why (stdout, why, what, verbose);
|
|
|
|
}
|