diff options
-rw-r--r-- | gdb/ChangeLog | 30 | ||||
-rw-r--r-- | gdb/infcmd.c | 8 | ||||
-rw-r--r-- | gdb/inferior.c | 18 | ||||
-rw-r--r-- | gdb/inferior.h | 4 | ||||
-rw-r--r-- | gdb/infrun.c | 42 | ||||
-rw-r--r-- | gdb/remote.c | 9 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 26 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/attach-non-pgrp-leader.exp | 5 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/attach.exp | 3 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/catch-syscall.exp | 4 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/foll-fork.exp | 14 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/foll-vfork.exp | 16 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/fork-print-inferior-events.c | 37 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/fork-print-inferior-events.exp | 85 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/hook-stop.exp | 3 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/kill-after-signal.exp | 6 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/solib-overlap.exp | 2 | ||||
-rw-r--r-- | gdb/testsuite/gdb.threads/clone-attach-detach.exp | 4 | ||||
-rw-r--r-- | gdb/testsuite/gdb.threads/kill.exp | 8 | ||||
-rw-r--r-- | gdb/testsuite/gdb.threads/process-dies-while-detaching.exp | 4 |
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 { |