aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
Diffstat (limited to 'gdb')
-rw-r--r--gdb/gdbserver/ChangeLog5
-rw-r--r--gdb/gdbserver/linux-low.c13
-rw-r--r--gdb/testsuite/ChangeLog5
-rw-r--r--gdb/testsuite/gdb.threads/leader-exit.c3
-rw-r--r--gdb/testsuite/gdb.threads/leader-exit.exp20
5 files changed, 35 insertions, 11 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index 0940fa0..dbb8ce5 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,3 +1,8 @@
+2014-11-12 Pedro Alves <palves@redhat.com>
+
+ * linux-low.c (linux_request_interrupt): Always send a SIGINT to
+ the process group instead of to a specific LWP.
+
2014-10-15 Pedro Alves <palves@redhat.com>
PR server/17487
diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c
index 8776670..d870f71 100644
--- a/gdb/gdbserver/linux-low.c
+++ b/gdb/gdbserver/linux-low.c
@@ -4848,16 +4848,9 @@ linux_request_interrupt (void)
{
extern unsigned long signal_pid;
- if (!ptid_equal (cont_thread, null_ptid)
- && !ptid_equal (cont_thread, minus_one_ptid))
- {
- int lwpid;
-
- lwpid = lwpid_of (current_thread);
- kill_lwp (lwpid, SIGINT);
- }
- else
- kill_lwp (signal_pid, SIGINT);
+ /* Send a SIGINT to the process group. This acts just like the user
+ typed a ^C on the controlling terminal. */
+ kill (-signal_pid, SIGINT);
}
/* Copy LEN bytes from inferior's auxiliary vector starting at OFFSET
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 37d8290..ae7c53c 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2014-11-12 Pedro Alves <palves@redhat.com>
+ * gdb.threads/leader-exit.exp: Test sending ctrl-c works after the
+ leader has exited.
+
+2014-11-12 Pedro Alves <palves@redhat.com>
+
* gdb.arch/i386-bp_permanent.c: New file.
* gdb.arch/i386-bp_permanent.exp: Don't skip on x86_64.
(srcfile): Set to i386-bp_permanent.c.
diff --git a/gdb/testsuite/gdb.threads/leader-exit.c b/gdb/testsuite/gdb.threads/leader-exit.c
index 287388a..0df1adc 100644
--- a/gdb/testsuite/gdb.threads/leader-exit.c
+++ b/gdb/testsuite/gdb.threads/leader-exit.c
@@ -29,7 +29,8 @@ start (void *arg)
i = pthread_join (main_thread, NULL);
assert (i == 0);
- return arg; /* break-here */
+ sleep (10); /* break-here */
+ return arg;
}
int
diff --git a/gdb/testsuite/gdb.threads/leader-exit.exp b/gdb/testsuite/gdb.threads/leader-exit.exp
index d213d55..2d6b723 100644
--- a/gdb/testsuite/gdb.threads/leader-exit.exp
+++ b/gdb/testsuite/gdb.threads/leader-exit.exp
@@ -34,3 +34,23 @@ gdb_continue_to_breakpoint "break-here" ".* break-here .*"
gdb_test "info threads" \
"\r\n\[ \t\]*Id\[ \t\]+Target\[ \t\]+Id\[ \t\]+Frame\[ \t\]*\r\n\\* 2 *Thread \[^\r\n\]* at \[^\r\n\]*" \
"Single thread has been left"
+
+# Test that ctrl-c works even if the leader has exited.
+
+set test "continue for ctrl-c"
+gdb_test_multiple "continue" $test {
+ -re "Continuing" {
+ pass $test
+ }
+}
+
+sleep 1
+
+send_gdb "\003"
+
+set test "caught interrupt"
+gdb_test_multiple "" $test {
+ -re "Program received signal SIGINT.*$gdb_prompt $" {
+ pass $test
+ }
+}