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.
common/common.m4 still had checks for termio.h/sgtty.h that are stale
now. Remove them.
gdb/ChangeLog:
2017-11-06 Pedro Alves <palves@redhat.com>
* common/common.m4 (GDB_AC_COMMON): No longer check termio.h nor
sgtty.h.
* config.in, configure: Regenerate.
gdb/gdbserver/ChangeLog:
2017-11-06 Pedro Alves <palves@redhat.com>
* config.in, configure: Regenerate.
As requested, I'm sending this as a separate patch because it is ready
to be included as-is.
The idea here is that both gdb/terminal.h and gdb/gdbserver/terminal.h
share the same code, which is responsible for setting a bunch of
defines on based on the presence of termios.h and a few other headers.
This simple patch just moves this common code to common/gdb_termios.h
and makes the necessary adjustments on both GDB and gdbserver so that
they can use this new header. It also implements the some header
checks on common/common.m4.
As a bonus, gdb/gdbserver/terminal.h can be removed because it's now
empty.
Built on x86_64, no regressions found.
gdb/ChangeLog:
2017-04-12 Sergio Durigan Junior <sergiodj@redhat.com>
* Makefile.in (HFILES_NO_SRCDIR): Add "common/gdb_termios.h".
* common/common.m4: Check headers 'termios.h', 'termio.h' and
'sgtty.h'.
* common/gdb_termios.h: New file, with parts of "terminal.h".
* inflow.c: Include "gdb_termios.h".
* ser-unix.c: Include "gdb_termios.h".
* terminal.h: Move terminal-related defines to
"common/gdb_termios.h".
gdb/gdbserver/ChangeLog:
2017-04-12 Sergio Durigan Junior <sergiodj@redhat.com>
* remote-utils.c: Include "gdb_termios.h" instead of
"terminal.h".
* terminal.h: Delete file.
This applies the second part of GDB's End of Year Procedure, which
updates the copyright year range in all of GDB's files.
gdb/ChangeLog:
Update copyright year range in all GDB files.
gdb's (or gdbserver's) own signal handling should not interfere with
the signal dispositions their spawned children inherit. However, it
currently does. For example, some paths in gdb cause SIGPIPE to be
set to SIG_IGN, and as consequence, the child starts with SIGPIPE to
set to SIG_IGN too, even though gdb was started with SIGPIPE set to
SIG_DFL.
This is because the exec family of functions does not reset the signal
disposition of signals that are set to SIG_IGN:
http://pubs.opengroup.org/onlinepubs/7908799/xsh/execve.html
Signals set to the default action (SIG_DFL) in the calling process
image are set to the default action in the new process
image. Signals set to be ignored (SIG_IGN) by the calling process
image are set to be ignored by the new process image. Signals set to
be caught by the calling process image are set to the default action
in the new process image (see <signal.h>).
And neither does it reset signal masks or flags.
In order to be transparent, when spawning new child processes to debug
(with "run", etc.), reset signal actions and mask back to what was
originally inherited from gdb/gdbserver's parent, just before execing
the target program to debug.
gdb/ChangeLog:
2016-08-09 Pedro Alves <palves@redhat.com>
PR gdb/18653
* Makefile.in (SFILES): Add
common/signals-state-save-restore.c.
(HFILES_NO_SRCDIR): Add common/signals-state-save-restore.h.
(COMMON_OBS): Add signals-state-save-restore.o.
(signals-state-save-restore.o): New rule.
* configure: Regenerate.
* fork-child.c: Include "signals-state-save-restore.h".
(fork_inferior): Call restore_original_signals_state.
* main.c: Include "signals-state-save-restore.h".
(captured_main): Call save_original_signals_state.
* common/common.m4: Add sigaction to AC_CHECK_FUNCS checks.
* common/signals-state-save-restore.c: New file.
* common/signals-state-save-restore.h: New file.
gdb/gdbserver/ChangeLog:
2016-08-09 Pedro Alves <palves@redhat.com>
PR gdb/18653
* Makefile.in (OBS): Add signals-state-save-restore.o.
(signals-state-save-restore.o): New rule.
* config.in: Regenerate.
* configure: Regenerate.
* linux-low.c: Include "signals-state-save-restore.h".
(linux_create_inferior): Call
restore_original_signals_state.
* server.c: Include "dispositions-save-restore.h".
(captured_main): Call save_original_signals_state.
gdb/testsuite/ChangeLog:
2016-08-09 Pedro Alves <palves@redhat.com>
PR gdb/18653
* gdb.base/signals-state-child.c: New file.
* gdb.base/signals-state-child.exp: New file.
* gdb.gdb/selftest.exp (do_steps_and_nexts): Add new pattern.
Later patches need regex support also in gdbserver.
gdb/ChangeLog
2015-07-15 Jan Kratochvil <jan.kratochvil@redhat.com>
* Makefile.in (HFILES_NO_SRCDIR): Change gdb_regex.h to
common/gdb_regex.h.
(COMMON_OBS): Add gdb_regex.o.
(gdb_regex.o): New.
* common/common.m4 (GDB_AC_COMMON): Add gdb_use_included_regex,
--without-included-regex and USE_INCLUDED_REGEX.
* common/gdb_regex.c: New file from utils.c functions.
* common/gdb_regex.h: Move it here from gdb_regex.h, update include
file wrapping define name.
* configure: Rebuilt.
* configure.ac (gdb_use_included_regex, --without-included-regex)
(USE_INCLUDED_REGEX): Move them to common/common.m4.
* gdb_regex.h: Move it to common/gdb_regex.h.
* utils.c: Remove include gdb_regex.h.
(do_regfree_cleanup, make_regfree_cleanup, get_regcomp_error)
(compile_rx_or_error): Move them to common/gdb_regex.c.
gdb/gdbserver/ChangeLog
2015-07-15 Jan Kratochvil <jan.kratochvil@redhat.com>
* Makefile.in (OBS): Add gdb_regex.o.
(gdb_regex.o): New.
* config.in: Rebuilt.
* configure: Rebuilt.
This commit creates a new file, common/gdb_setjmp.h, to hold some
portability macros for setjmp/longjmp et al. that are used by the
exceptions subsystem and by the demangler crash catcher.
gdb/ChangeLog:
* common/gdb_setjmp.h: New file.
* Makefile.in (HFILES_NO_SRCDIR): Add common/gdb_setjmp.h.
* configure.ac: Move sigsetjmp check...
* common/common.m4: ...here.
* configure: Regenerate.
* cp-support.c (SIGJMP_BUF): Delete.
(SIGSETJMP): Likewise.
(SIGLONGJMP): Likewise.
* exceptions.h (gdb_setjmp.h): Include.
(setjmp.h): Do not include.
(EXCEPTIONS_SIGJMP_BUF): Delete.
(EXCEPTIONS_SIGSETJMP): Likewise.
(EXCEPTIONS_SIGLONGJMP): Likewise.
Replace all uses of EXCEPTIONS_SIG* macros with SIG* macros
from gdb_setjmp.h.
* exceptions.c: Likewise.
gdb/gdbserver/ChangeLog:
* config.in: Regenerate.
* configure: Likewise.
This removes gdb_dirent.h and updates the code to use dirent.h
instead. It also removes the now-useless configure checks.
2013-11-18 Tom Tromey <tromey@redhat.com>
* common/common.m4 (GDB_AC_COMMON): Don't use AC_HEADER_DIRENT.
* common/gdb_dirent.h: Remove.
* common/filestuff.c: Use dirent.h.
* common/linux-osdata.c: Use dirent.h.
(NAMELEN): Define.
* config.in: Rebuild.
* configure: Rebuild.
* configure.ac: Don't use AC_HEADER_DIRENT.
* linux-fork.c: Use dirent.h
* linux-nat.c: Use dirent.h.
* nto-procfs.c: Use dirent.h.
* procfs.c: Use dirent.h.
2013-11-18 Tom Tromey <tromey@redhat.com>
* config.in: Rebuild.
* configure: Rebuild.
* configure.ac: Don't use AC_HEADER_DIRENT.
Now that we are using the gnulib string.h module, we don't need to
check for string.h or strings.h. This removes the last few checks
from the source and from the configure scripts.
2013-11-18 Tom Tromey <tromey@redhat.com>
* configure: Rebuild.
* common/common.m4 (GDB_AC_COMMON): Don't check for string.h or
strings.h.
2013-11-18 Tom Tromey <tromey@redhat.com>
* server.h: Don't check HAVE_STRING_H.
* gdbreplay.c: Don't check HAVE_STRING_H.
* configure: Rebuild.
It has bothered me for a while that files in common/ use macros
defined via autoconf checks, but rely on each configure.ac doing the
proper checks independently.
This patch introduces common/common.m4 which consolidates the checks
assumed by code in common.
The rule I propose is that if something is needed or used by common,
it should be checked for by common.m4. However, if the check is also
needed by gdb or gdbserver, then it should be duplicated there.
Built and regtested on x86-64 Fedora 18 (though this is hardly the
most strenuous case) and using the Fedora 18 mingw cross compilers. I
also examined the config.in diffs to ensure that symbols did not go
missing.
2013-11-08 Tom Tromey <tromey@redhat.com>
* acinclude.m4: Include common.m4.
* common/common.m4: New file.
* configure, config.in: Rebuild.
* configure.ac: Use GDB_AC_COMMON.
2013-11-08 Tom Tromey <tromey@redhat.com>
* acinclude.m4: Include common.m4, codeset.m4.
* configure, config.in: Rebuild.
* configure.ac: Use GDB_AC_COMMON.