diff options
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/inferior.c | 10 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.c | 25 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.exp | 62 |
5 files changed, 108 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 298f44d..e983e30 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2015-08-15 Patrick Palka <patrick@parcs.ath.cx> + + * inferior.c (detach_inferior_command): Don't call + any_thread_of_process when pid is 0. + (kill_inferior_command): Likewise. + 2015-08-14 Doug Evans <xdje42@gmail.com> PR gdb/11833 diff --git a/gdb/inferior.c b/gdb/inferior.c index 5e98df5..2e44f17 100644 --- a/gdb/inferior.c +++ b/gdb/inferior.c @@ -625,6 +625,11 @@ detach_inferior_command (char *args, int from_tty) } pid = gdb_inferior_id_to_pid (num); + if (pid == 0) + { + warning (_("Inferior ID %d is not running."), num); + continue; + } tp = any_thread_of_process (pid); if (!tp) @@ -661,6 +666,11 @@ kill_inferior_command (char *args, int from_tty) } pid = gdb_inferior_id_to_pid (num); + if (pid == 0) + { + warning (_("Inferior ID %d is not running."), num); + continue; + } tp = any_thread_of_process (pid); if (!tp) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 5022fe2..37ed043 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-08-15 Patrick Palka <patrick@parcs.ath.cx> + + * gdb.base/kill-detach-inferiors-cmd.exp: New test file. + * gdb.base/kill-detach-inferiors-cmd.c: New test file. + 2015-08-14 Doug Evans <xdje42@gmail.com> * gdb.perf/lib/perftest/utils.py (select_file): Kill any existing diff --git a/gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.c b/gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.c new file mode 100644 index 0000000..2398f00 --- /dev/null +++ b/gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.c @@ -0,0 +1,25 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2015 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <unistd.h> + +int +main (void) +{ + sleep (600); + return 0; +} diff --git a/gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.exp b/gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.exp new file mode 100644 index 0000000..c6bb11b --- /dev/null +++ b/gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.exp @@ -0,0 +1,62 @@ +# This testcase is part of GDB, the GNU debugger. +# +# Copyright 2015 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test the basic operation of the "kill inferiors" and "detach inferiors" +# commands. + +if ![can_spawn_for_attach] { + return 0 +} + +standard_testfile +set executable $testfile + +if [prepare_for_testing $testfile.exp $executable] { + return -1 +} + +runto_main + +# Add another forked inferior process. +gdb_test "add-inferior" "Added inferior 2" "add inferior 2" +gdb_test "inferior 2" "Switching to inferior 2.*" +gdb_test "file $binfile" "Reading symbols from .*done.*" "load binary" +gdb_test "start" "Temporary breakpoint.*Starting program.*" + +# Add an attached inferior process. +set test_spawn_id [spawn_wait_for_attach $binfile] +set test_pid [spawn_id_get_pid $test_spawn_id] +gdb_test "add-inferior" "Added inferior 3" "add inferior 3" +gdb_test "inferior 3" "Switching to inferior 3.*" +gdb_test "attach $test_pid" "Attaching to process.*" "attach to pid" + +# Kill the first two inferiors, and detach the third. +gdb_test_no_output "kill inferiors 1 2" +gdb_test "inferior 1" "Switching to inferior 1.*" +gdb_test "kill" "The program is not being run.*" +gdb_test "detach inferiors 3" "Detaching from program.*process $test_pid.*" + +# No inferiors should be running anymore. +gdb_test "kill inferiors 1 2 3" \ + "ID 1 is not running.*ID 2 is not running.*ID 3 is not running.*" +gdb_test "detach inferiors 1 2 3" \ + "ID 1 is not running.*ID 2 is not running.*ID 3 is not running.*" + +gdb_test "kill inferiors 10" \ + "ID 10 not known.*" + +kill_wait_spawned_process $test_spawn_id |