aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilippe Waroquiers <philippe@sourceware.org>2013-05-03 19:16:56 +0000
committerPhilippe Waroquiers <philippe@sourceware.org>2013-05-03 19:16:56 +0000
commit96f7d3f1666830257f8942c168640ad8cc8b0ea0 (patch)
tree35e928066a65da99419fc053b3da25622d0dadd3
parent1ebff1fdfdbf851157c55915a6a87ba3b3902823 (diff)
downloadgdb-96f7d3f1666830257f8942c168640ad8cc8b0ea0.zip
gdb-96f7d3f1666830257f8942c168640ad8cc8b0ea0.tar.gz
gdb-96f7d3f1666830257f8942c168640ad8cc8b0ea0.tar.bz2
Fix to handle properly 'catch signal SIGINT' and SIGTRAP
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/break-catch-sig.c10
-rw-r--r--gdb/testsuite/ChangeLog5
-rw-r--r--gdb/testsuite/gdb.base/catch-signal.c2
-rw-r--r--gdb/testsuite/gdb.base/catch-signal.exp13
5 files changed, 31 insertions, 5 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 654e4fc..4469076 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2013-05-03 Philippe Waroquiers <philippe.waroquiers@skynet.be>
+
+ * break-catch-sig.c (signal_catchpoint_breakpoint_hit): Do not
+ ignore SIGINT and SIGTRAP in case these internal signals are
+ caught explicitely.
+
2013-05-01 Joel Brobecker <brobecker@adacore.com>
* darwin-nat.c (darwin_read_write_inferior): Change types
diff --git a/gdb/break-catch-sig.c b/gdb/break-catch-sig.c
index 4b5ffae..c162cc2 100644
--- a/gdb/break-catch-sig.c
+++ b/gdb/break-catch-sig.c
@@ -199,13 +199,13 @@ signal_catchpoint_breakpoint_hit (const struct bp_location *bl,
VEC_iterate (gdb_signal_type, c->signals_to_be_caught, i, iter);
i++)
if (signal_number == iter)
- break;
+ return 1;
/* Not the same. */
- if (!iter)
- return 0;
+ gdb_assert (!iter);
+ return 0;
}
-
- return c->catch_all || !INTERNAL_SIGNAL (signal_number);
+ else
+ return c->catch_all || !INTERNAL_SIGNAL (signal_number);
}
/* Implement the "print_it" breakpoint_ops method for signal
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index ca1e0fb..7100b34 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2013-05-03 Philippe Waroquiers <philippe.waroquiers@skynet.be>
+
+ * gdb.base/catch-sig.c (main): Raise SIGINT.
+ * gdb.base/catch-sig.exp: Test "catch signal SIGINT".
+
2013-05-03 Hafiz Abid Qadeer <abidh@codesourcery.com>
* status-stop.exp (test_tstart_tstart): Check for error
diff --git a/gdb/testsuite/gdb.base/catch-signal.c b/gdb/testsuite/gdb.base/catch-signal.c
index d128958..36d34d2 100644
--- a/gdb/testsuite/gdb.base/catch-signal.c
+++ b/gdb/testsuite/gdb.base/catch-signal.c
@@ -42,5 +42,7 @@ main ()
raise (SIGHUP); /* third HUP */
raise (SIGHUP); /* fourth HUP */
+
+ raise (SIGINT); /* first INT */
}
diff --git a/gdb/testsuite/gdb.base/catch-signal.exp b/gdb/testsuite/gdb.base/catch-signal.exp
index 2ca4dff..e7179a0 100644
--- a/gdb/testsuite/gdb.base/catch-signal.exp
+++ b/gdb/testsuite/gdb.base/catch-signal.exp
@@ -71,6 +71,19 @@ proc test_catch_signal {signame} {
gdb_breakpoint ${srcfile}:[gdb_get_line_number "fourth HUP"]
gdb_continue_to_breakpoint "fourth HUP"
delete_breakpoints
+
+ # Verify an internal signal used by gdb is properly caught.
+ gdb_breakpoint ${srcfile}:[gdb_get_line_number "first INT"]
+ gdb_continue_to_breakpoint "first INT"
+ set test "override SIGINT to catch"
+ gdb_test "handle SIGINT nostop print nopass" \
+ "SIGINT.*No.*Yes.*No.*" \
+ "$test" \
+ "SIGINT is used by the debugger.*Are you sure you want to change it.*y or n.*" \
+ y
+ gdb_test "catch signal SIGINT" "Catchpoint .*"
+ gdb_test "continue" "Catchpoint .* SIGINT.*"
+
}
}