This is the mail archive of the gdb-prs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug gdb/18653] spawn changes SIGPIPE SIG_DFL to SIG_IGN


https://sourceware.org/bugzilla/show_bug.cgi?id=18653

--- Comment #4 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
The gdb-7.12-branch branch has been updated by Pedro Alves
<palves@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=35fcb4fc81e51295d14125785765e0ea3e132cd9

commit 35fcb4fc81e51295d14125785765e0ea3e132cd9
Author: Pedro Alves <palves@redhat.com>
Date:   Tue Aug 9 20:21:08 2016 +0100

    Fix PR gdb/18653: gdb disturbs inferior's inherited signal dispositions

    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.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]