echo 'int v;main(){for(;;);}'|cc -x c -;gdb ./a.out -ex start -ex 'set can-use-hw-watchpoints 0' -ex 'watch v' -ex c Temporary breakpoint 1, 0x00000000004004f0 in main () Watchpoint 2: v Continuing. CTRL-C 7.5 PASS: Program received signal SIGINT, Interrupt. 0x00000000004004f0 in main () (gdb) _ 7.6 FAIL: <nothing, hanging> 3b0f7442800817f8a19b8eebd3b897a75328af14 is the first bad commit commit 3b0f7442800817f8a19b8eebd3b897a75328af14 Author: Tom Tromey <tromey@redhat.com> Date: Wed Jan 16 17:31:35 2013 +0000 PR cli/7221: RFC: implement "catch signal" http://sourceware.org/bugzilla/show_bug.cgi?id=7221 Message-ID: <874nkpv03j.fsf@fleche.redhat.com> http://sourceware.org/ml/gdb-patches/2012-11/msg00470.html http://sourceware.org/ml/gdb-patches/2012-12/msg00009.html http://sourceware.org/ml/gdb-patches/2013-01/msg00049.html RFA: [2/2] catch signal http://sourceware.org/ml/gdb-patches/2013-01/msg00051.html
This commit is wrongly found, looking for the right one.
Comment 1 was a mistake, it is really the commit in Comment 0.
The basic problem is that the patch removed some code that used to set random_signal. Instead the new code now always relies on the bpstat. However, software watchpoints are always put on the bpstat list, so bpstat_explains_signal always returns at least BPSTAT_SIGNAL_HIDE. This hides the SIGINT.
CVSROOT: /cvs/src Module name: src Changes by: tromey@sourceware.org 2013-06-18 19:57:49 Modified files: gdb : ChangeLog break-catch-sig.c breakpoint.c breakpoint.h infrun.c gdb/testsuite : ChangeLog Added files: gdb/testsuite/gdb.base: random-signal.c random-signal.exp Log message: Fix PR cli/15603 This fixes PR cli/15603. The bug here is that when a software watchpoint is being used, gdb will stop responding to C-c. This is a regression caused by the "catch signal" patch. The problem is that software watchpoints always end up on the bpstat list. However, this makes bpstat_explains_signal return BPSTAT_SIGNAL_HIDE, causing infrun to think that the signal is not a "random signal". The fix is to change bpstat_explains_signal to handle this better. I chose to do it in a "clean API" way, by passing the signal value to bpstat_explains_signal and then adding an explains_signal method for watchpoints, which handles the specifics. Built and regtested on x86-64 Fedora 18. New test case included. * break-catch-sig.c (signal_catchpoint_explains_signal): Add 'sig' argument. * breakpoint.c (bpstat_explains_signal): Add 'sig' argument. Special case signals other than GDB_SIGNAL_TRAP. (explains_signal_watchpoint): New function. (base_breakpoint_explains_signal): Add 'sig' argument. (initialize_breakpoint_ops): Set 'explains_signal' method for watchpoints. * breakpoint.h (struct breakpoint_ops) <explains_signal>: Add signal argument. (bpstat_explains_signal): Likewise. * infrun.c (handle_syscall_event, handle_inferior_event): Update. * gdb.base/random-signal.c: New file. * gdb.base/random-signal.exp: New file. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/ChangeLog.diff?cvsroot=src&r1=1.15711&r2=1.15712 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/break-catch-sig.c.diff?cvsroot=src&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/breakpoint.c.diff?cvsroot=src&r1=1.765&r2=1.766 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/breakpoint.h.diff?cvsroot=src&r1=1.198&r2=1.199 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/infrun.c.diff?cvsroot=src&r1=1.583&r2=1.584 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/ChangeLog.diff?cvsroot=src&r1=1.3698&r2=1.3699 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.base/random-signal.c.diff?cvsroot=src&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.base/random-signal.exp.diff?cvsroot=src&r1=NONE&r2=1.1
Fixed.
This should be fixed in 7.6.1, it was a real regression I faced as a user.
CVSROOT: /cvs/src Module name: src Branch: gdb_7_6-branch Changes by: tromey@sourceware.org 2013-08-30 15:58:55 Modified files: gdb : ChangeLog break-catch-sig.c breakpoint.c breakpoint.h infrun.c gdb/testsuite : ChangeLog Added files: gdb/testsuite/gdb.base: random-signal.c random-signal.exp Log message: This fixes PR cli/15603. The bug here is that when a software watchpoint is being used, gdb will stop responding to C-c. This is a regression caused by the "catch signal" patch. The problem is that software watchpoints always end up on the bpstat list. However, this makes bpstat_explains_signal return BPSTAT_SIGNAL_HIDE, causing infrun to think that the signal is not a "random signal". The fix is to change bpstat_explains_signal to handle this better. I chose to do it in a "clean API" way, by passing the signal value to bpstat_explains_signal and then adding an explains_signal method for watchpoints, which handles the specifics. Built and regtested on x86-64 Fedora 18. New test case included. * break-catch-sig.c (signal_catchpoint_explains_signal): Add 'sig' argument. * breakpoint.c (bpstat_explains_signal): Add 'sig' argument. Special case signals other than GDB_SIGNAL_TRAP. (explains_signal_watchpoint): New function. (base_breakpoint_explains_signal): Add 'sig' argument. (initialize_breakpoint_ops): Set 'explains_signal' method for watchpoints. * breakpoint.h (struct breakpoint_ops) <explains_signal>: Add signal argument. (bpstat_explains_signal): Likewise. * infrun.c (handle_syscall_event, handle_inferior_event): Update. * gdb.base/random-signal.c: New file. * gdb.base/random-signal.exp: New file. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/ChangeLog.diff?cvsroot=src&only_with_tag=gdb_7_6-branch&r1=1.15260.2.59&r2=1.15260.2.60 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/break-catch-sig.c.diff?cvsroot=src&only_with_tag=gdb_7_6-branch&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/breakpoint.c.diff?cvsroot=src&only_with_tag=gdb_7_6-branch&r1=1.745.2.7&r2=1.745.2.8 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/breakpoint.h.diff?cvsroot=src&only_with_tag=gdb_7_6-branch&r1=1.193.2.1&r2=1.193.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/infrun.c.diff?cvsroot=src&only_with_tag=gdb_7_6-branch&r1=1.576&r2=1.576.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/ChangeLog.diff?cvsroot=src&only_with_tag=gdb_7_6-branch&r1=1.3580.2.24&r2=1.3580.2.25 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.base/random-signal.c.diff?cvsroot=src&only_with_tag=gdb_7_6-branch&r1=NONE&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.base/random-signal.exp.diff?cvsroot=src&only_with_tag=gdb_7_6-branch&r1=NONE&r2=1.1.2.2