aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2009-01-20 15:33:14 +0000
committerDaniel Jacobowitz <drow@false.org>2009-01-20 15:33:14 +0000
commita12cc160ab21c29ef00ab4e2377e01ae85b9de35 (patch)
tree45b01b887cd8f98b667a2efc7e5defa8452fb2a4 /gdb
parent6f3b91a62110eaea42cd7df18d6f9293f5d60fa2 (diff)
downloadgdb-a12cc160ab21c29ef00ab4e2377e01ae85b9de35.zip
gdb-a12cc160ab21c29ef00ab4e2377e01ae85b9de35.tar.gz
gdb-a12cc160ab21c29ef00ab4e2377e01ae85b9de35.tar.bz2
PR gdb/9346
* infcmd.c (signal_command): Do not specify a resume PC. testsuite/ PR gdb/9346 * gdb.base/interrupt.c (sigint_handler): New. (main): Install a SIGINT handler if SIGNALS is defined. Exit on error. * gdb.base/interrupt.exp: Define SIGNALS unless gdb,nosignals. Test "signal SIGINT".
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/infcmd.c6
-rw-r--r--gdb/testsuite/ChangeLog9
-rw-r--r--gdb/testsuite/gdb.base/interrupt.c18
-rw-r--r--gdb/testsuite/gdb.base/interrupt.exp38
5 files changed, 68 insertions, 8 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 03c1159..a474390 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2008-01-20 Daniel Jacobowitz <dan@codesourcery.com>
+
+ PR gdb/9346
+ * infcmd.c (signal_command): Do not specify a resume PC.
+
2009-01-19 Doug Evans <dje@google.com>
* dummy-frame.c (dummy_frame): Replace regcache member with
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index 2cd583c..3696f79 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -1145,11 +1145,7 @@ signal_command (char *signum_exp, int from_tty)
}
clear_proceed_status ();
- /* "signal 0" should not get stuck if we are stopped at a breakpoint.
- FIXME: Neither should "signal foo" but when I tried passing
- (CORE_ADDR)-1 unconditionally I got a testsuite failure which I haven't
- tried to track down yet. */
- proceed (oursig == TARGET_SIGNAL_0 ? (CORE_ADDR) -1 : stop_pc, oursig, 0);
+ proceed ((CORE_ADDR) -1, oursig, 0);
}
/* Proceed until we reach a different source line with pc greater than
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 052c500..2eb1ee0 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,12 @@
+2009-01-20 Daniel Jacobowitz <dan@codesourcery.com>
+
+ PR gdb/9346
+ * gdb.base/interrupt.c (sigint_handler): New.
+ (main): Install a SIGINT handler if SIGNALS is defined. Exit
+ on error.
+ * gdb.base/interrupt.exp: Define SIGNALS unless gdb,nosignals.
+ Test "signal SIGINT".
+
2009-01-19 Doug Evans <dje@google.com>
* gdb.base/break.exp: Update expected gdb output.
diff --git a/gdb/testsuite/gdb.base/interrupt.c b/gdb/testsuite/gdb.base/interrupt.c
index a895d4b..80b9060 100644
--- a/gdb/testsuite/gdb.base/interrupt.c
+++ b/gdb/testsuite/gdb.base/interrupt.c
@@ -2,6 +2,16 @@
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
+
+#ifdef SIGNALS
+#include <signal.h>
+
+static void
+sigint_handler (int signo)
+{
+}
+#endif
+
int
main ()
{
@@ -11,6 +21,9 @@ main ()
set_debug_traps();
breakpoint();
#endif
+#ifdef SIGNALS
+ signal (SIGINT, sigint_handler);
+#endif
printf ("talk to me baby\n");
while (1)
{
@@ -20,7 +33,10 @@ main ()
#ifdef EINTR
if (errno != EINTR)
#endif
- perror ("");
+ {
+ perror ("");
+ return 1;
+ }
}
else if (nbytes == 0)
{
diff --git a/gdb/testsuite/gdb.base/interrupt.exp b/gdb/testsuite/gdb.base/interrupt.exp
index 037902b..beee0cf 100644
--- a/gdb/testsuite/gdb.base/interrupt.exp
+++ b/gdb/testsuite/gdb.base/interrupt.exp
@@ -34,7 +34,13 @@ set bug_id 0
set testfile interrupt
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
+
+set options { debug }
+if { ! [target_info exists gdb,nosignals] } {
+ lappend options "additional_flags=-DSIGNALS"
+}
+
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable $options] != "" } {
untested interrupt.exp
return -1
}
@@ -165,7 +171,35 @@ if ![file exists $binfile] then {
eof { fail "echo data (eof)" }
}
- setup_xfail "i*86-pc-linux*-gnu*"
+ if { ! [target_info exists gdb,nosignals] } {
+ # Wait until the program is in the read system call again.
+ sleep 2
+
+ # Stop the program for another test.
+ set msg "Send Control-C, second time"
+ send_gdb "\003"
+ gdb_test_multiple "" "$msg" {
+ -re "Program received signal SIGINT.*$gdb_prompt $" {
+ pass "$msg"
+ }
+ }
+
+ # The "signal" command should deliver the correct signal and
+ # return to the loop.
+ set msg "signal SIGINT"
+ gdb_test_multiple "signal SIGINT" "$msg" {
+ -re "^signal SIGINT\r\nContinuing with signal SIGINT.\r\n(\r\n|)$" { pass "$msg" }
+ }
+
+ # We should be back in the loop.
+ send_gdb "more data\n"
+ gdb_expect {
+ -re "^(\r\n|)more data\r\n(|more data\r\n)$" { pass "echo more data" }
+ timeout { fail "echo more data (timeout)" }
+ eof { fail "echo more data (eof)" }
+ }
+ }
+
send_gdb "\004"
gdb_expect {
-re "end of file.*Program exited normally.*$gdb_prompt $" {