From patchwork Wed Oct 22 23:46:56 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Don Breazeal X-Patchwork-Id: 3329 Received: (qmail 19035 invoked by alias); 22 Oct 2014 23:47:04 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 19024 invoked by uid 89); 22 Oct 2014 23:47:03 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2 X-HELO: relay1.mentorg.com Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 22 Oct 2014 23:47:01 +0000 Received: from svr-orw-exc-10.mgc.mentorg.com ([147.34.98.58]) by relay1.mentorg.com with esmtp id 1Xh5cH-0005F6-Ok from Don_Breazeal@mentor.com ; Wed, 22 Oct 2014 16:46:57 -0700 Received: from [127.0.0.1] ([172.30.14.124]) by SVR-ORW-EXC-10.mgc.mentorg.com with Microsoft SMTPSVC(6.0.3790.4675); Wed, 22 Oct 2014 16:46:57 -0700 Message-ID: <544841F0.7000604@codesourcery.com> Date: Wed, 22 Oct 2014 16:46:56 -0700 From: "Breazeal, Don" User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.2.0 MIME-Version: 1.0 To: Pedro Alves , gdb-patches@sourceware.org Subject: Re: [PATCH 02/16 v2] Refactor follow-fork message printing References: <1407434395-19089-1-git-send-email-donb@codesourcery.com> <1408580964-27916-3-git-send-email-donb@codesourcery.com> <5425C3E4.3060305@redhat.com> <5425C92B.1010101@codesourcery.com> <543E9C0F.9030701@redhat.com> In-Reply-To: <543E9C0F.9030701@redhat.com> X-IsSubscribed: yes On 10/15/2014 9:08 AM, Pedro Alves wrote: > On 09/26/2014 09:14 PM, Breazeal, Don wrote: >> On 9/26/2014 12:52 PM, Pedro Alves wrote: >>> On 08/21/2014 01:29 AM, Don Breazeal wrote: >>>> This patch refactors the code that prints messages related to follow-fork ---snip--- > Sorry, I still don't think you're new patch (sent as follow up) is > an improvement... Having to explain the "Hardcoded 1's" in a > comment is a red sign to me. :-/ Fair enough. > > Could you do a patch that just adds the missing output, and fixes > fork/vfork without moving the printing code to a separate function? > For the fork vs vfork issue, doing ' is_vfork ? "vfork" : "fork" ' is > fine. Thanks for clarifying the i18n issues for me. The revised patch is included below, with an updated commit message as well. Is this version OK? thanks, --Don This patch modifies the code that prints attach and detach messages related to following fork and vfork. The changes include using target_terminal_ours_for_output instead of target_terminal_ours, printing "vfork" instead of "fork" for all vfork-related messages, and using _() for the format strings of all of the messages. We also add a "detach" message for when a fork parent is detached. Previously in this case the only message was notification of attaching to the child. We still do not print any messages when following the parent and detaching the child (the default). The rationale for this is that from the user's perspective the new child was never attached. Note that all of these messages are only printed when 'verbose' is set or when debugging is turned on. This is preparatory work for follow-fork and detach-on-fork on extended-remote Linux targets. The tests gdb.base/foll-fork.exp and gdb.base/foll-vfork.exp were modified to check for the new message. Tested gdb.base/foll-fork.exp and gdb.base/foll-vfork.exp on x64 Ubuntu Lucid, native only. gdb/ 2014-10-22 Don Breazeal * infrun.c (follow_fork_inferior): Update fork message printing to use target_terminal_ours_for_output instead of target_terminal_ours, to use _() for all format strings, to print "vfork" instead of "fork" for vforks, and to add a detach message. (handle_vfork_child_exec_or_exit): Update message printing to use target_terminal_ours_for_output instead of target_terminal_ours, to use _() for all format strings, and to fix some formatting. gdb/testsuite/ 2014-10-22 Don Breazeal * gdb.base/foll-fork.exp (test_follow_fork, catch_fork_child_follow): Check for updated fork messages emitted from infrun.c. * gdb.base/foll-vfork.exp (vfork_parent_follow_through_step, vfork_parent_follow_to_bp, vfork_and_exec_child_follow_to_main_bp, vfork_and_exec_child_follow_through_step): Check for updated vfork messages emitted from infrun.c. --- gdb/infrun.c | 60 +++++++++++++++++++------------- gdb/testsuite/gdb.base/foll-fork.exp | 12 ++++-- gdb/testsuite/gdb.base/foll-vfork.exp | 8 ++-- 3 files changed, 48 insertions(+), 32 deletions(-) } } @@ -195,7 +195,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.*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 } } @@ -239,7 +239,7 @@ proc vfork_and_exec_child_follow_through_step {} { # set linenum [gdb_get_line_number "printf(\"Hello from vforked-prog" ${srcfile2}] gdb_test_multiple "next" $test { - -re "Attaching after fork to.*Executing new program.*Breakpoint.*vforked-prog.c:${linenum}.*$gdb_prompt " { + -re "Attaching after vfork to.*Executing new program.*Breakpoint.*vforked-prog.c:${linenum}.*$gdb_prompt " { pass "$test" } } diff --git a/gdb/infrun.c b/gdb/infrun.c index 728c160..672795c 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -461,10 +461,11 @@ holding the child stopped. Try \"set detach-on-fork\" or \ if (info_verbose || debug_infrun) { - target_terminal_ours (); + target_terminal_ours_for_output (); fprintf_filtered (gdb_stdlog, - "Detaching after fork from " - "child process %d.\n", + _("Detaching after %s from " + "child process %d.\n"), + has_vforked ? "vfork" : "fork", child_pid); } } @@ -549,17 +550,13 @@ holding the child stopped. Try \"set detach-on-fork\" or \ if (info_verbose || debug_infrun) { - target_terminal_ours (); - if (has_vforked) - fprintf_filtered (gdb_stdlog, - _("Attaching after process %d " - "vfork to child process %d.\n"), - parent_pid, child_pid); - else - fprintf_filtered (gdb_stdlog, - _("Attaching after process %d " - "fork to child process %d.\n"), - parent_pid, child_pid); + target_terminal_ours_for_output (); + fprintf_filtered (gdb_stdlog, + _("Attaching after process %d " + "%s to child process %d.\n"), + parent_pid, + has_vforked ? "vfork" : "fork", + child_pid); } /* Add the new inferior first, so that the target_detach below @@ -596,7 +593,18 @@ holding the child stopped. Try \"set detach-on-fork\" or \ parent_inf->waiting_for_vfork_done = 0; } else if (detach_fork) - target_detach (NULL, 0); + { + if (info_verbose || debug_infrun) + { + target_terminal_ours_for_output (); + fprintf_filtered (gdb_stdlog, + _("Detaching after fork from " + "child process %d.\n"), + child_pid); + } + + target_detach (NULL, 0); + } /* Note that the detach above makes PARENT_INF dangling. */ @@ -930,18 +938,22 @@ handle_vfork_child_exec_or_exit (int exec) if (debug_infrun || info_verbose) { - target_terminal_ours (); + target_terminal_ours_for_output (); if (exec) - fprintf_filtered (gdb_stdlog, - "Detaching vfork parent process " - "%d after child exec.\n", - inf->vfork_parent->pid); + { + fprintf_filtered (gdb_stdlog, + _("Detaching vfork parent process " + "%d after child exec.\n"), + inf->vfork_parent->pid); + } else - fprintf_filtered (gdb_stdlog, - "Detaching vfork parent process " - "%d after child exit.\n", - inf->vfork_parent->pid); + { + fprintf_filtered (gdb_stdlog, + _("Detaching vfork parent process " + "%d after child exit.\n"), + inf->vfork_parent->pid); + } } target_detach (NULL, 0); diff --git a/gdb/testsuite/gdb.base/foll-fork.exp b/gdb/testsuite/gdb.base/foll-fork.exp index ad8b750..b2e2979 100644 --- a/gdb/testsuite/gdb.base/foll-fork.exp +++ b/gdb/testsuite/gdb.base/foll-fork.exp @@ -115,7 +115,11 @@ 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 breakpoint here.*" + set expected_re "Attaching after.* fork to.*" + if {$detach == "on"} { + 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.*" } else { @@ -218,9 +222,9 @@ proc catch_fork_child_follow {} { "Temporary breakpoint.*, line $bp_after_fork.*" \ "set follow-fork child, tbreak" - gdb_test "continue" \ - "Attaching after.* fork to.* at .*$bp_after_fork.*" \ - "set follow-fork child, hit tbreak" + 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" # The parent has been detached; allow time for any output it might # generate to arrive, so that output doesn't get confused with diff --git a/gdb/testsuite/gdb.base/foll-vfork.exp b/gdb/testsuite/gdb.base/foll-vfork.exp index fe3663c..968db13 100644 --- a/gdb/testsuite/gdb.base/foll-vfork.exp +++ b/gdb/testsuite/gdb.base/foll-vfork.exp @@ -121,7 +121,7 @@ proc vfork_parent_follow_through_step {} { set test "step" gdb_test_multiple "next" $test { - -re "Detaching after fork from.*if \\(pid == 0\\).*$gdb_prompt " { + -re "Detaching after vfork from.*if \\(pid == 0\\).*$gdb_prompt " { pass $test } } @@ -146,7 +146,7 @@ proc vfork_parent_follow_to_bp {} { set test "continue to bp" gdb_test_multiple "continue" $test { - -re ".*Detaching after fork from child process.*Breakpoint.*${bp_location}.*$gdb_prompt " { + -re ".*Detaching after vfork from child process.*Breakpoint.*${bp_location}.*$gdb_prompt " { pass $test