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 #10 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Pedro Alves <palves@sourceware.org>:

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

commit e379cee61f3890e535e995828e8846b020ef2a32
Author: Pedro Alves <palves@redhat.com>
Date:   Fri Jan 5 18:26:18 2018 +0000

    Fix regression: cannot start with LD_PRELOAD=libSegFault.so (PR
gdb/18653#c7)

    At https://sourceware.org/bugzilla/show_bug.cgi?id=18653#c7, Andrew
    reports that the fix for PR gdb/18653 made GDB useless if you preload
    libSegFault.so, because GDB internal-errors on startup:

     $ LD_PRELOAD=libSegFault.so gdb
     src/gdb/common/signals-state-save-restore.c:64: internal-error: unexpected
signal handler
     A problem internal to GDB has been detected,
     further debugging may prove unreliable.
     Aborted (core dumped)
     $

    The internal error comes from the code saving the signal dispositions
    inherited from gdb's parent:

     (top-gdb) bt
     #0  0x000000000056b001 in internal_error(char const*, int, char const*,
...) (file=0xaf5f38 "src/gdb/common/signals-state-save-restore.c", line=64,
fmt=0xaf5f18 "unexpected signal handler") at src/gdb/common/errors.c:54
     #1  0x00000000005752c9 in save_original_signals_state() () at
src/gdb/common/signals-state-save-restore.c:64
     #2  0x00000000007425de in captured_main_1(captured_main_args*)
(context=0x7fffffffd860)
         at src/gdb/main.c:509
     #3  0x0000000000743622 in captured_main(void*) (data=0x7fffffffd860) at
src/gdb/main.c:1145
     During symbol reading, cannot get low and high bounds for subprogram DIE
at 24065.
     #4  0x00000000007436f9 in gdb_main(captured_main_args*)
(args=0x7fffffffd860) at src/gdb/main.c:1171
     #5  0x0000000000413acd in main(int, char**) (argc=1, argv=0x7fffffffd968)
at src/gdb/gdb.c:32

    This commit downgrades the internal error to a warning.  You'll get
    instead:

    ~~~
     $ LD_PRELOAD=libSegFault.so gdb
     warning: Found custom handler for signal 11 (Segmentation fault)
preinstalled.
     Some signal dispositions inherited from the environment (SIG_DFL/SIG_IGN)
     won't be propagated to spawned programs.
     GNU gdb (GDB) 8.0.50.20171213-git
     Copyright (C) 2017 Free Software Foundation, Inc.
     License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
     This is free software: you are free to change and redistribute it.
     There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
     and "show warranty" for details.
     This GDB was configured as "x86_64-pc-linux-gnu".
     Type "show configuration" for configuration details.
     For bug reporting instructions, please see:
     <http://www.gnu.org/software/gdb/bugs/>.
     Find the GDB manual and other documentation resources online at:
     <http://www.gnu.org/software/gdb/documentation/>.
     For help, type "help".
     Type "apropos word" to search for commands related to "word"...
     (gdb)
    ~~~

    This also moves the location where save_original_signals_state is
    called a bit further below (to after option processing), so that "-q"
    disables the warning:

    ~~~
     $ LD_PRELOAD=libSegFault.so gdb -q
     (gdb)
    ~~~

    New testcase included.

    gdb/ChangeLog:
    2018-01-05  Pedro Alves  <palves@redhat.com>

        PR gdb/18653
        * common/signals-state-save-restore.c
        (save_original_signals_state): New parameter 'quiet'.  Warn if we
        find a custom handler preinstalled, instead of internal erroring.
        But only warn if !quiet.
        * common/signals-state-save-restore.h
        (save_original_signals_state): New parameter 'quiet'.
        * main.c (captured_main_1): Move save_original_signals_state call
        after option handling, and pass QUIET.

    gdb/gdbserver/ChangeLog:
    2018-01-05  Pedro Alves  <palves@redhat.com>

        PR gdb/18653
        * server.c (captured_main): Pass quiet=false to
        save_original_signals_state.

    gdb/testsuite/ChangeLog:
    2018-01-05  Pedro Alves  <palves@redhat.com>

        PR gdb/18653
        * gdb.base/libsegfault.exp: New.

-- 
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]