summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog30
-rw-r--r--gdb/infcmd.c8
-rw-r--r--gdb/inferior.c18
-rw-r--r--gdb/inferior.h4
-rw-r--r--gdb/infrun.c42
-rw-r--r--gdb/remote.c9
-rw-r--r--gdb/testsuite/ChangeLog26
-rw-r--r--gdb/testsuite/gdb.base/attach-non-pgrp-leader.exp5
-rw-r--r--gdb/testsuite/gdb.base/attach.exp3
-rw-r--r--gdb/testsuite/gdb.base/catch-syscall.exp4
-rw-r--r--gdb/testsuite/gdb.base/foll-fork.exp14
-rw-r--r--gdb/testsuite/gdb.base/foll-vfork.exp16
-rw-r--r--gdb/testsuite/gdb.base/fork-print-inferior-events.c37
-rw-r--r--gdb/testsuite/gdb.base/fork-print-inferior-events.exp85
-rw-r--r--gdb/testsuite/gdb.base/hook-stop.exp3
-rw-r--r--gdb/testsuite/gdb.base/kill-after-signal.exp6
-rw-r--r--gdb/testsuite/gdb.base/solib-overlap.exp2
-rw-r--r--gdb/testsuite/gdb.threads/clone-attach-detach.exp4
-rw-r--r--gdb/testsuite/gdb.threads/kill.exp8
-rw-r--r--gdb/testsuite/gdb.threads/process-dies-while-detaching.exp4
20 files changed, 266 insertions, 62 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 33e4da7c792..2cd21edc12b 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,33 @@
+2018-04-24 Jan Kratochvil <jan.kratochvil@redhat.com>
+ Sergio Durigan Junior <sergiodj@redhat.com>
+ Pedro Alves <palves@redhat.com>
+
+ * infcmd.c (kill_command): Print message when inferior has
+ been killed.
+ * inferior.c (print_inferior_events): Remove 'static'. Set as
+ '1'.
+ (add_inferior): Improve message printed when
+ 'print_inferior_events' is on.
+ (exit_inferior): Remove message printed when
+ 'print_inferior_events' is on.
+ (detach_inferior): Improve message printed when
+ 'print_inferior_events' is on.
+ (initialize_inferiors): Use 'add_inferior_silent' to set
+ 'current_inferior_'.
+ * inferior.h (print_inferior_events): Declare here as
+ 'extern'.
+ * infrun.c (follow_fork_inferior): Print '[Attaching...]' or
+ '[Detaching...]' messages when 'print_inferior_events' is on.
+ Use 'add_thread_silent' instead of 'add_thread'. Add '[' and ']'
+ as prefix/suffix for messages. Remove periods. Fix erroneous
+ 'Detaching after fork from child...', replace it by '... from
+ parent...'.
+ (handle_vfork_child_exec_or_exit): Add '[' and ']' as
+ prefix/suffix when printing 'Detaching...' messages. Print
+ them when 'print_inferior_events' is on.
+ * remote.c (remote_detach_1): Print message when detaching
+ from inferior and '!is_fork_parent'.
+
2018-04-24 Tom Tromey <tom@tromey.com>
* cli-out.h: Reindent.
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index d43e7f202d3..6c9f885badd 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -2595,8 +2595,16 @@ kill_command (const char *arg, int from_tty)
error (_("The program is not being run."));
if (!query (_("Kill the program being debugged? ")))
error (_("Not confirmed."));
+
+ std::string pid_str = target_pid_to_str (inferior_ptid);
+ int infnum = current_inferior ()->num;
+
target_kill ();
+ if (print_inferior_events)
+ printf_unfiltered (_("[Inferior %d (%s) has been killed]\n"),
+ infnum, pid_str.c_str ());
+
/* If we still have other inferiors to debug, then don't mess with
with their threads. */
if (!have_inferiors ())
diff --git a/gdb/inferior.c b/gdb/inferior.c
index 4ff5712d757..d7122fcfad8 100644
--- a/gdb/inferior.c
+++ b/gdb/inferior.c
@@ -45,9 +45,8 @@ DEFINE_REGISTRY (inferior, REGISTRY_ACCESS_FIELD)
struct inferior *inferior_list = NULL;
static int highest_inferior_num;
-/* Print notices on inferior events (attach, detach, etc.), set with
- `set print inferior-events'. */
-static int print_inferior_events = 0;
+/* See inferior.h. */
+int print_inferior_events = 1;
/* The Current Inferior. This is a strong reference. I.e., whenever
an inferior is the current inferior, its refcount is
@@ -123,7 +122,9 @@ add_inferior (int pid)
struct inferior *inf = add_inferior_silent (pid);
if (print_inferior_events)
- printf_unfiltered (_("[New inferior %d]\n"), pid);
+ printf_unfiltered (_("[New inferior %d (%s)]\n"),
+ inf->num,
+ target_pid_to_str (pid_to_ptid (pid)));
return inf;
}
@@ -234,9 +235,6 @@ exit_inferior (int pid)
struct inferior *inf = find_inferior_pid (pid);
exit_inferior_1 (inf, 0);
-
- if (print_inferior_events)
- printf_unfiltered (_("[Inferior %d exited]\n"), pid);
}
void
@@ -266,7 +264,9 @@ detach_inferior (inferior *inf)
exit_inferior_1 (inf, 0);
if (print_inferior_events)
- printf_unfiltered (_("[Inferior %d detached]\n"), pid);
+ printf_unfiltered (_("[Inferior %d (%s) detached]\n"),
+ inf->num,
+ target_pid_to_str (pid_to_ptid (pid)));
}
/* See inferior.h. */
@@ -989,7 +989,7 @@ initialize_inferiors (void)
can only allocate an inferior when all those modules have done
that. Do this after initialize_progspace, due to the
current_program_space reference. */
- current_inferior_ = add_inferior (0);
+ current_inferior_ = add_inferior_silent (0);
current_inferior_->incref ();
current_inferior_->pspace = current_program_space;
current_inferior_->aspace = current_program_space->aspace;
diff --git a/gdb/inferior.h b/gdb/inferior.h
index 391a5fdaa5c..bd26c8a86d2 100644
--- a/gdb/inferior.h
+++ b/gdb/inferior.h
@@ -220,6 +220,10 @@ extern enum stop_stack_kind stop_stack_dummy;
extern int stopped_by_random_signal;
+/* Print notices on inferior events (attach, detach, etc.), set with
+ `set print inferior-events'. */
+extern int print_inferior_events;
+
/* STEP_OVER_ALL means step over all subroutine calls.
STEP_OVER_UNDEBUGGABLE means step over calls to undebuggable functions.
STEP_OVER_NONE means don't step over any subroutine calls. */
diff --git a/gdb/infrun.c b/gdb/infrun.c
index 9e5e0639ceb..223e836eded 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -461,14 +461,14 @@ holding the child stopped. Try \"set detach-on-fork\" or \
remove_breakpoints_pid (ptid_get_pid (inferior_ptid));
}
- if (info_verbose || debug_infrun)
+ if (print_inferior_events)
{
/* Ensure that we have a process ptid. */
ptid_t process_ptid = pid_to_ptid (ptid_get_pid (child_ptid));
target_terminal::ours_for_output ();
fprintf_filtered (gdb_stdlog,
- _("Detaching after %s from child %s.\n"),
+ _("[Detaching after %s from child %s]\n"),
has_vforked ? "vfork" : "fork",
target_pid_to_str (process_ptid));
}
@@ -489,7 +489,7 @@ holding the child stopped. Try \"set detach-on-fork\" or \
scoped_restore_current_pspace_and_thread restore_pspace_thread;
inferior_ptid = child_ptid;
- add_thread (inferior_ptid);
+ add_thread_silent (inferior_ptid);
set_current_inferior (child_inf);
child_inf->symfile_flags = SYMFILE_NO_READ;
@@ -549,14 +549,17 @@ holding the child stopped. Try \"set detach-on-fork\" or \
struct inferior *parent_inf, *child_inf;
struct program_space *parent_pspace;
- if (info_verbose || debug_infrun)
+ if (print_inferior_events)
{
+ std::string parent_pid = target_pid_to_str (parent_ptid);
+ std::string child_pid = target_pid_to_str (child_ptid);
+
target_terminal::ours_for_output ();
fprintf_filtered (gdb_stdlog,
- _("Attaching after %s %s to child %s.\n"),
- target_pid_to_str (parent_ptid),
+ _("[Attaching after %s %s to child %s]\n"),
+ parent_pid.c_str (),
has_vforked ? "vfork" : "fork",
- target_pid_to_str (child_ptid));
+ child_pid.c_str ());
}
/* Add the new inferior first, so that the target_detach below
@@ -594,15 +597,15 @@ holding the child stopped. Try \"set detach-on-fork\" or \
}
else if (detach_fork)
{
- if (info_verbose || debug_infrun)
+ if (print_inferior_events)
{
/* Ensure that we have a process ptid. */
- ptid_t process_ptid = pid_to_ptid (ptid_get_pid (child_ptid));
+ ptid_t process_ptid = pid_to_ptid (ptid_get_pid (parent_ptid));
target_terminal::ours_for_output ();
fprintf_filtered (gdb_stdlog,
- _("Detaching after fork from "
- "child %s.\n"),
+ _("[Detaching after fork from "
+ "parent %s]\n"),
target_pid_to_str (process_ptid));
}
@@ -616,7 +619,7 @@ holding the child stopped. Try \"set detach-on-fork\" or \
informing the solib layer about this new process. */
inferior_ptid = child_ptid;
- add_thread (inferior_ptid);
+ add_thread_silent (inferior_ptid);
set_current_inferior (child_inf);
/* If this is a vfork child, then the address-space is shared
@@ -956,23 +959,24 @@ handle_vfork_child_exec_or_exit (int exec)
inf->aspace = NULL;
inf->pspace = NULL;
- if (debug_infrun || info_verbose)
+ if (print_inferior_events)
{
+ const char *pidstr
+ = target_pid_to_str (pid_to_ptid (inf->vfork_parent->pid));
+
target_terminal::ours_for_output ();
if (exec)
{
fprintf_filtered (gdb_stdlog,
- _("Detaching vfork parent process "
- "%d after child exec.\n"),
- inf->vfork_parent->pid);
+ _("[Detaching vfork parent %s "
+ "after child exec]\n"), pidstr);
}
else
{
fprintf_filtered (gdb_stdlog,
- _("Detaching vfork parent process "
- "%d after child exit.\n"),
- inf->vfork_parent->pid);
+ _("[Detaching vfork parent %s "
+ "after child exit]\n"), pidstr);
}
}
diff --git a/gdb/remote.c b/gdb/remote.c
index 49013848d55..61d1dcb5738 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -5137,7 +5137,14 @@ remote_detach_1 (int from_tty, inferior *inf)
/* If doing detach-on-fork, we don't mourn, because that will delete
breakpoints that should be available for the followed inferior. */
if (!is_fork_parent)
- target_mourn_inferior (inferior_ptid);
+ {
+ std::string infpid = target_pid_to_str (inferior_ptid);
+
+ target_mourn_inferior (inferior_ptid);
+ if (print_inferior_events)
+ printf_unfiltered (_("[Inferior %d (%s) detached]\n"),
+ inf->num, infpid.c_str ());
+ }
else
{
inferior_ptid = null_ptid;
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index cb8dd8012f3..19735fce213 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,29 @@
+2018-04-24 Jan Kratochvil <jan.kratochvil@redhat.com>
+ Sergio Durigan Junior <sergiodj@redhat.com>
+ Pedro Alves <palves@redhat.com>
+
+ * gdb.base/attach-non-pgrp-leader.exp: Adjust 'Detaching...'
+ regexps to expect for '[Inferior ... detached]' as well.
+ * gdb.base/attach.exp: Likewise.
+ * gdb.base/catch-syscall.exp (check_for_program_end): Adjust
+ "gdb_continue_to_end".
+ (test_catch_syscall_with_wrong_args): Likewise.
+ * gdb.base/foll-fork.exp: Adjust regexps to match '[' and
+ ']'. Don't set 'verbose' on.
+ * gdb.base/foll-vfork.exp: Likewise.
+ * gdb.base/fork-print-inferior-events.c: New file.
+ * gdb.base/fork-print-inferior-events.exp: New file.
+ * gdb.base/hook-stop.exp: Adjust regexps to expect for new
+ '[Inferior ... has been killed]' message.
+ * gdb.base/kill-after-signal.exp: Likewise.
+ * gdb.base/solib-overlap.exp: Adjust regexps to expect for new
+ detach message.
+ * gdb.threads/kill.exp: Adjust regexps to expect for new kill
+ message.
+ * gdb.threads/clone-attach-detach.exp: Adjust 'Detaching...'
+ regexps to expect for '[Inferior ... detached]' as well.
+ * gdb.threads/process-dies-while-detaching.exp: Likewise.
+
2018-04-24 Simon Marchi <simon.marchi@ericsson.com>
PR gdb/23104
diff --git a/gdb/testsuite/gdb.base/attach-non-pgrp-leader.exp b/gdb/testsuite/gdb.base/attach-non-pgrp-leader.exp
index dbe554eff31..60345f3894b 100644
--- a/gdb/testsuite/gdb.base/attach-non-pgrp-leader.exp
+++ b/gdb/testsuite/gdb.base/attach-non-pgrp-leader.exp
@@ -30,6 +30,7 @@ if { [build_executable ${testfile}.exp ${testfile} $srcfile {debug}] == -1 } {
proc do_test {} {
global binfile
+ global decimal
set test_spawn_id [spawn_wait_for_attach $binfile]
set parent_pid [spawn_id_get_pid $test_spawn_id]
@@ -52,7 +53,7 @@ proc do_test {} {
}
gdb_test "detach" \
- "Detaching from program: .*process $parent_pid"
+ "Detaching from program: .*process $parent_pid\r\n\\\[Inferior $decimal \\(.*\\) detached\\\]"
}
# Start over, and attach to the child this time.
@@ -67,7 +68,7 @@ proc do_test {} {
gdb_continue_to_breakpoint "marker"
gdb_test "detach" \
- "Detaching from program: .*process $child_pid"
+ "Detaching from program: .*process $child_pid\r\n\\\[Inferior $decimal \\(.*\\) detached\\\]"
}
kill_wait_spawned_process $test_spawn_id
diff --git a/gdb/testsuite/gdb.base/attach.exp b/gdb/testsuite/gdb.base/attach.exp
index efec49e3858..8199a80c6b9 100644
--- a/gdb/testsuite/gdb.base/attach.exp
+++ b/gdb/testsuite/gdb.base/attach.exp
@@ -53,6 +53,7 @@ proc do_attach_tests {} {
global testfile
global subdir
global timeout
+ global decimal
# Figure out a regular expression that will match the sysroot,
# noting that the default sysroot is "target:", and also noting
@@ -191,7 +192,7 @@ proc do_attach_tests {} {
# Detach the process.
gdb_test "detach" \
- "Detaching from program: .*$escapedbinfile, process $testpid" \
+ "Detaching from program: .*$escapedbinfile, process $testpid\r\n\\\[Inferior $decimal \\(.*\\) detached\\\]" \
"attach1 detach"
# Wait a bit for gdb to finish detaching
diff --git a/gdb/testsuite/gdb.base/catch-syscall.exp b/gdb/testsuite/gdb.base/catch-syscall.exp
index 2a8bf27e5c4..20fa041155e 100644
--- a/gdb/testsuite/gdb.base/catch-syscall.exp
+++ b/gdb/testsuite/gdb.base/catch-syscall.exp
@@ -179,7 +179,7 @@ proc check_for_program_end {} {
# Deleting the catchpoints
delete_breakpoints
- gdb_continue_to_end
+ gdb_continue_to_end "" continue 1
}
proc test_catch_syscall_without_args {} {
@@ -250,7 +250,7 @@ proc test_catch_syscall_with_wrong_args {} {
# If it doesn't, everything is right (since we don't have
# a syscall named "mlock" in it). Otherwise, this is a failure.
set thistest "catch syscall with unused syscall ($syscall_name)"
- gdb_continue_to_end $thistest
+ gdb_continue_to_end $thistest continue 1
}
}
diff --git a/gdb/testsuite/gdb.base/foll-fork.exp b/gdb/testsuite/gdb.base/foll-fork.exp
index a715b7fa9d3..9e8fe995421 100644
--- a/gdb/testsuite/gdb.base/foll-fork.exp
+++ b/gdb/testsuite/gdb.base/foll-fork.exp
@@ -110,13 +110,13 @@ proc test_follow_fork { who detach cmd } {
# Set up the output we expect to see after we run.
set expected_re ""
if {$who == "child"} {
- set expected_re "Attaching after.* fork to.*"
+ set expected_re "\\\[Attaching after.* fork to.*"
if {$detach == "on"} {
- append expected_re "Detaching after fork from .*"
+ append expected_re "\\\[Detaching after fork from .*"
}
append expected_re "set breakpoint here.*"
} elseif {$who == "parent" && $detach == "on"} {
- set expected_re "Detaching after fork from .*set breakpoint here.*"
+ set expected_re "\\\[Detaching after fork from .*set breakpoint here.*"
} else {
set expected_re ".*set breakpoint here.*"
}
@@ -217,7 +217,7 @@ proc catch_fork_child_follow {} {
"Temporary breakpoint.*, line $bp_after_fork.*" \
"set follow-fork child, tbreak"
- set expected_re "Attaching after.* fork to.*Detaching after fork from"
+ set expected_re "\\\[Attaching after.* fork to.*\\\[Detaching after fork from"
append expected_re ".* at .*$bp_after_fork.*"
gdb_test "continue" $expected_re "set follow-fork child, hit tbreak"
@@ -305,7 +305,7 @@ proc tcatch_fork_parent_follow {} {
"set follow-fork parent, tbreak"
gdb_test "continue" \
- "Detaching after fork from.* at .*$bp_after_fork.*" \
+ "\\\[Detaching after fork from.* at .*$bp_after_fork.*" \
"set follow-fork parent, hit tbreak"
# The child has been detached; allow time for any output it might
@@ -398,10 +398,6 @@ By default, the debugger will follow the parent process..*" \
if [runto_main] then { tcatch_fork_parent_follow }
}
-# The "Detaching..." and "Attaching..." messages may be hidden by
-# default.
-gdb_test_no_output "set verbose"
-
# This is a test of gdb's ability to follow the parent, child or both
# parent and child of a Unix fork() system call.
#
diff --git a/gdb/testsuite/gdb.base/foll-vfork.exp b/gdb/testsuite/gdb.base/foll-vfork.exp
index 6aa4edd9feb..ddda2d61433 100644
--- a/gdb/testsuite/gdb.base/foll-vfork.exp
+++ b/gdb/testsuite/gdb.base/foll-vfork.exp
@@ -55,10 +55,6 @@ proc setup_gdb {} {
clean_restart $testfile
- # The "Detaching..." and "Attaching..." messages may be hidden by
- # default.
- gdb_test_no_output "set verbose"
-
if ![runto_main] {
return -code return
}
@@ -103,7 +99,7 @@ proc vfork_parent_follow_through_step {} {
set test "step"
gdb_test_multiple "next" $test {
- -re "Detaching after vfork from.*if \\(pid == 0\\).*$gdb_prompt " {
+ -re "\\\[Detaching after vfork from.*if \\(pid == 0\\).*$gdb_prompt " {
pass $test
}
}
@@ -128,7 +124,7 @@ proc vfork_parent_follow_to_bp {} {
set test "continue to bp"
gdb_test_multiple "continue" $test {
- -re ".*Detaching after vfork from child process.*Breakpoint.*${bp_location}.*$gdb_prompt " {
+ -re ".*\\\[Detaching after vfork from child process.*Breakpoint.*${bp_location}.*$gdb_prompt " {
pass $test
}
}
@@ -153,7 +149,7 @@ proc vfork_child_follow_to_exit {} {
# PR gdb/14766
fail "$test"
}
- -re "Attaching after.* vfork to.*Detaching vfork parent .* after child exit.*$gdb_prompt " {
+ -re "\\\[Attaching after.* vfork to.*\\\[Detaching vfork parent .* after child exit.*$gdb_prompt " {
pass $test
}
}
@@ -177,7 +173,7 @@ proc vfork_and_exec_child_follow_to_main_bp {} {
set test "continue to bp"
gdb_test_multiple "continue" $test {
- -re "Attaching after.* vfork to.*Detaching vfork parent.*xecuting new program.*Breakpoint.*vforked-prog.c:${linenum}.*$gdb_prompt " {
+ -re "\\\[Attaching after.* vfork to.*\\\[Detaching vfork parent.*xecuting new program.*Breakpoint.*vforked-prog.c:${linenum}.*$gdb_prompt " {
pass $test
}
}
@@ -203,7 +199,7 @@ proc vfork_and_exec_child_follow_through_step {} {
# before it execs. Thus, "next" lands on the next line after
# the vfork.
gdb_test_multiple "next" $test {
- -re "Attaching after .* vfork to child.*if \\(pid == 0\\).*$gdb_prompt " {
+ -re "\\\[Attaching after .* vfork to child.*if \\(pid == 0\\).*$gdb_prompt " {
pass "$test"
}
}
@@ -341,7 +337,7 @@ proc vfork_relations_in_info_inferiors { variant } {
set test "step over vfork"
gdb_test_multiple "next" $test {
- -re "Attaching after .* vfork to child.*if \\(pid == 0\\).*$gdb_prompt " {
+ -re "\\\[Attaching after .* vfork to child.*if \\(pid == 0\\).*$gdb_prompt " {
pass "$test"
}
}
diff --git a/gdb/testsuite/gdb.base/fork-print-inferior-events.c b/gdb/testsuite/gdb.base/fork-print-inferior-events.c
new file mode 100644
index 00000000000..182a363dcc3
--- /dev/null
+++ b/gdb/testsuite/gdb.base/fork-print-inferior-events.c
@@ -0,0 +1,37 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2007-2018 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 <stdlib.h>
+#include <unistd.h>
+
+int
+main (int argc, char *argv[])
+{
+ pid_t child;
+
+ child = fork ();
+ switch (child)
+ {
+ case -1:
+ abort ();
+ case 0:
+ default:
+ break;
+ }
+
+ return 0;
+}
diff --git a/gdb/testsuite/gdb.base/fork-print-inferior-events.exp b/gdb/testsuite/gdb.base/fork-print-inferior-events.exp
new file mode 100644
index 00000000000..53ea99c83f7
--- /dev/null
+++ b/gdb/testsuite/gdb.base/fork-print-inferior-events.exp
@@ -0,0 +1,85 @@
+# This testcase is part of GDB, the GNU debugger.
+
+# Copyright 2007-2018 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 that the event messages printed when using 'set print
+# inferior-events [on,off]', 'set follow-fork-mode [child,parent]' and
+# 'set detach-on-fork [on,off]' are the correct ones.
+
+# This test relies on "run", so it cannot run on target remote stubs.
+if { [use_gdb_stub] } {
+ untested "not supported on target remote stubs"
+ return
+}
+
+standard_testfile
+
+if { [prepare_for_testing "failed to prepare" $testfile $srcfile debug] } {
+ return -1
+}
+
+# This is the expected output for each of the test combinations
+# below. The order here is important:
+#
+# inferior-events: on; follow-fork: child; detach-on-fork: on
+# inferior-events: on; follow-fork: child; detach-on-fork: off
+# inferior-events: on; follow-fork: parent; detach-on-fork: on
+# inferior-events: on; follow-fork: parent; detach-on-fork: off
+# inferior-events: off; follow-fork: child; detach-on-fork: on
+# inferior-events: off; follow-fork: child; detach-on-fork: off
+# inferior-events: off; follow-fork: parent; detach-on-fork: on
+# inferior-events: off; follow-fork: parent; detach-on-fork: off
+
+set reading_re "(Reading.*from remote target\\.\\.\\.\r\n)*"
+set exited_normally_re "${reading_re}\\\[Inferior $decimal \\(.*\\) exited normally\\\]"
+# gdbserver produces a slightly different message when attaching after
+# a fork, so we have to tweak the regexp to accomodate that.
+set attach_child_re "${reading_re}\\\[Attaching after .* fork to child .*\\\]\r\n"
+set detach_child_re "${reading_re}\\\[Detaching after fork from child .*\\\]\r\n"
+set detach_parent_re "${reading_re}\\\[Detaching after fork from parent .*\\\]\r\n"
+set new_inf_re "${reading_re}\\\[New inferior $decimal \\(.*\\)\\\]\r\n"
+set inf_detached_re "${reading_re}\\\[Inferior $decimal \\(.*\\) detached\\\]\r\n"
+
+set expected_output [list \
+ "${attach_child_re}${new_inf_re}${detach_parent_re}${inf_detached_re}" \
+ "${attach_child_re}${new_inf_re}" \
+ "${detach_child_re}" \
+ "${new_inf_re}" \
+ "" \
+ "" \
+ "" \
+ "" \
+ ]
+
+set i 0
+
+foreach_with_prefix print_inferior_events { "on" "off" } {
+ foreach_with_prefix follow_fork_mode { "child" "parent" } {
+ foreach_with_prefix detach_on_fork { "on" "off" } {
+ clean_restart $binfile
+ gdb_test_no_output "set print inferior-events $print_inferior_events"
+ gdb_test_no_output "set follow-fork-mode $follow_fork_mode"
+ gdb_test_no_output "set detach-on-fork $detach_on_fork"
+
+ set output [lindex $expected_output $i]
+ # Always add the "Starting program..." string so that we
+ # match exactly the lines we want.
+ set output "Starting program: $binfile\\s*\r\n${output}${exited_normally_re}"
+ set i [expr $i + 1]
+ gdb_test "run" $output
+ }
+ }
+}
diff --git a/gdb/testsuite/gdb.base/hook-stop.exp b/gdb/testsuite/gdb.base/hook-stop.exp
index fbdfcfe3d6d..5717f94fc2a 100644
--- a/gdb/testsuite/gdb.base/hook-stop.exp
+++ b/gdb/testsuite/gdb.base/hook-stop.exp
@@ -78,6 +78,7 @@ proc hook_stop_before_frame {} {
proc hook_stop_kill {} {
with_test_prefix "hook-stop kills inferior" {
global gdb_prompt
+ global decimal
setup "kill"
@@ -85,7 +86,7 @@ proc hook_stop_kill {} {
set test "run hook-stop"
gdb_test_multiple "continue" "$test" {
- -re "Continuing.\r\n${gdb_prompt} $" {
+ -re "Continuing.\r\n\\\[Inferior $decimal \\(.*\\) has been killed\\\]\r\n${gdb_prompt} $" {
pass $test
}
}
diff --git a/gdb/testsuite/gdb.base/kill-after-signal.exp b/gdb/testsuite/gdb.base/kill-after-signal.exp
index 76f9d5af705..67e6f627504 100644
--- a/gdb/testsuite/gdb.base/kill-after-signal.exp
+++ b/gdb/testsuite/gdb.base/kill-after-signal.exp
@@ -37,4 +37,8 @@ if ![runto_main] {
gdb_test "continue" "Program received signal SIGUSR1, .*"
gdb_test "stepi" "\r\nhandler .*"
-gdb_test "kill" "^y" "kill" "Kill the program being debugged\\? \\(y or n\\) $" "y"
+gdb_test_multiple "kill" "kill" {
+ -re "Kill the program being debugged\\? \\(y or n\\) $" {
+ gdb_test "y" "\\\[Inferior $decimal \\(.*\\) has been killed\\\]" "kill"
+ }
+}
diff --git a/gdb/testsuite/gdb.base/solib-overlap.exp b/gdb/testsuite/gdb.base/solib-overlap.exp
index 88762be4493..de15f477e10 100644
--- a/gdb/testsuite/gdb.base/solib-overlap.exp
+++ b/gdb/testsuite/gdb.base/solib-overlap.exp
@@ -119,7 +119,7 @@ foreach prelink_lib1 {0x40000000 0x50000000} { with_test_prefix "$prelink_lib1"
# Detach the process.
- gdb_test "detach" "Detaching from program: .*$escapedbinfile, process $testpid"
+ gdb_test "detach" "Detaching from program: .*$escapedbinfile, process $testpid\r\n\\\[Inferior $decimal \\(.*\\) detached\\\]"
# Wait a bit for gdb to finish detaching
diff --git a/gdb/testsuite/gdb.threads/clone-attach-detach.exp b/gdb/testsuite/gdb.threads/clone-attach-detach.exp
index 1fbdc95ffc4..27132e35e42 100644
--- a/gdb/testsuite/gdb.threads/clone-attach-detach.exp
+++ b/gdb/testsuite/gdb.threads/clone-attach-detach.exp
@@ -56,7 +56,7 @@ for {set attempt 1} {$attempt <= $attempts} {incr attempt} {
"1.*${thread_re}.*\r\n.*2.*${thread_re}.*" \
"info threads shows two LWPs"
- gdb_test "detach" "Detaching from .*, process $testpid"
+ gdb_test "detach" "Detaching from .*, process $testpid\r\n\\\[Inferior $decimal \\(.*\\) detached\\\]"
}
}
@@ -91,7 +91,7 @@ for {set attempt 1} {$attempt <= $attempts} {incr attempt} {
"1.*${thread_re}.*\\(running\\)\r\n.*2.*${thread_re}.*\\(running\\)" \
"info threads shows two LWPs"
- gdb_test "detach" "Detaching from .*, process $testpid"
+ gdb_test "detach" "Detaching from .*, process $testpid\r\n\\\[Inferior $decimal \\(.*\\) detached\\\]"
}
}
diff --git a/gdb/testsuite/gdb.threads/kill.exp b/gdb/testsuite/gdb.threads/kill.exp
index 61384578e6d..aea4a986c64 100644
--- a/gdb/testsuite/gdb.threads/kill.exp
+++ b/gdb/testsuite/gdb.threads/kill.exp
@@ -21,7 +21,7 @@ standard_testfile
# program and spawn several threads before trying to kill the program.
proc test {threaded} {
- global testfile srcfile
+ global testfile srcfile decimal
with_test_prefix [expr ($threaded)?"threaded":"non-threaded"] {
@@ -68,7 +68,11 @@ proc test {threaded} {
#
# the above would mean that the remote end crashed.
- gdb_test "kill" "^y" "kill program" "Kill the program being debugged\\? \\(y or n\\) $" "y"
+ gdb_test_multiple "kill" "kill" {
+ -re "Kill the program being debugged\\? \\(y or n\\) $" {
+ gdb_test "y" "\\\[Inferior $decimal \\(.*\\) has been killed\\\]" "kill"
+ }
+ }
}
}
diff --git a/gdb/testsuite/gdb.threads/process-dies-while-detaching.exp b/gdb/testsuite/gdb.threads/process-dies-while-detaching.exp
index e05acb17115..7cedb4bd54c 100644
--- a/gdb/testsuite/gdb.threads/process-dies-while-detaching.exp
+++ b/gdb/testsuite/gdb.threads/process-dies-while-detaching.exp
@@ -169,7 +169,7 @@ proc do_detach {multi_process cmd child_exit} {
&& [target_info gdb_protocol] == "remote"}]
if {$multi_process} {
- gdb_test "detach" "Detaching from .*, process $decimal" \
+ gdb_test "detach" "Detaching from .*, process $decimal\r\n\\\[Inferior $decimal \\(.*\\) detached\\\]" \
"detach child"
gdb_test "inferior 1" "\[Switching to inferior $decimal\].*" \
@@ -193,7 +193,7 @@ proc do_detach {multi_process cmd child_exit} {
set extra ""
}
if {$cmd == "detach"} {
- gdb_test "detach" "Detaching from .*, process $decimal$extra"
+ gdb_test "detach" "Detaching from .*, process ${decimal}\r\n\\\[Inferior $decimal \\(.*\\) detached\\\]$extra"
} elseif {$cmd == "continue"} {
gdb_test "continue" $continue_re
} else {