From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id WUPEH6jZ9F8GSgAAWB0awg (envelope-from ) for ; Tue, 05 Jan 2021 16:27:04 -0500 Received: by simark.ca (Postfix, from userid 112) id 748661F0AA; Tue, 5 Jan 2021 16:27:04 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=0.3 required=5.0 tests=MAILING_LIST_MULTI,RDNS_NONE, URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.2 Received: from sourceware.org (unknown [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id D1E041E552 for ; Tue, 5 Jan 2021 16:27:03 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 372DB383E82B; Tue, 5 Jan 2021 21:27:03 +0000 (GMT) Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by sourceware.org (Postfix) with ESMTPS id 442EE385803C for ; Tue, 5 Jan 2021 21:27:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 442EE385803C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tdevries@suse.de X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 4860EAEC1; Tue, 5 Jan 2021 21:26:59 +0000 (UTC) MIME-Version: 1.0 Date: Tue, 05 Jan 2021 22:26:58 +0100 From: tdevries To: Simon Marchi Subject: Re: [PATCH v2 3/3] gdb: introduce scoped debug prints In-Reply-To: <13cd76a6-9bce-706d-f98e-aa34f61cad2c@polymtl.ca> References: <20201216204737.900975-1-simon.marchi@efficios.com> <20201216204737.900975-3-simon.marchi@efficios.com> <3ad3b11f-8a72-cd1d-a138-59c47300f147@polymtl.ca> <66ff5e72-f002-ed4f-075a-3054d17e7862@suse.de> <97ef7c08-c281-963e-96ba-0ba64a123980@polymtl.ca> <13cd76a6-9bce-706d-f98e-aa34f61cad2c@polymtl.ca> User-Agent: Roundcube Webmail Message-ID: X-Sender: tdevries@suse.de Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Simon Marchi , gdb-patches@sourceware.org Errors-To: gdb-patches-bounces@sourceware.org Sender: "Gdb-patches" On 2021-01-05 18:02, Simon Marchi wrote: > On 2021-01-05 10:33 a.m., Simon Marchi via Gdb-patches wrote: >> Thanks for reporting. The test passes here 90% of the time, but when >> I >> run it in a loop it eventually fails like the others I fixed. >> >> I'd rather add a -prompt flag to gdb_test_sequence, what do you think? Yeah, that's not a bad idea. The only bit that concerns me is that there's already a -prompt switch for gdb_test_multiple, which does not add on the terminating '$', while this version does. It's probably a good idea to have the -prompt switch to behave the same in both cases. Thanks, - Tom >> I'll start working on that and give it a try. > > Here's what I propose: > > From fac85012df91bc9b70e2d1d8df12de1dab2ab44c Mon Sep 17 00:00:00 2001 > From: Simon Marchi > Date: Tue, 5 Jan 2021 11:02:07 -0500 > Subject: [PATCH] gdb/testsuite: fix race in > gdb.threads/signal-while-stepping-over-bp-other-thread.exp > > Commit 3ec3145c5dd6 ("gdb: introduce scoped debug prints") updated some > tests using "set debug infrun" to handle the fact that a debug print is > now shown after the prompt, after an inferior stop. The same issue > happens in gdb.threads/signal-while-stepping-over-bp-other-thread.exp. > If I run it in a loop, it eventually fails like these other tests. > > The problem is that the testsuite expects to see $gdb_prompt followed > by > the end of the buffer. It happens that expect reads $gdb_prompt and > the > debug print at the same time, in which case the regexp never matches > and > we get a timeout. > > The fix is the same as was done in 3ec3145c5dd6, make the testsuite > believe that the prompt is the standard GDB prompt followed by that > debug print. > > Since that test uses gdb_test_sequence, and the expected prompt is in > gdb_test_sequence, add a -prompt switch to gdb_test_sequence to > override > the prompt used for that call. > > gdb/testsuite/ChangeLog: > > * lib/gdb.exp (gdb_test_sequence): Accept -prompt switch. > * gdb.threads/signal-while-stepping-over-bp-other-thread.exp: > Pass prompt containing debug print to gdb_test_sequence. > > Change-Id: I33161c53ddab45cdfeadfd50b964f8dc3caa9729 > --- > ...al-while-stepping-over-bp-other-thread.exp | 2 +- > gdb/testsuite/lib/gdb.exp | 23 +++++++++++++++++-- > 2 files changed, 22 insertions(+), 3 deletions(-) > > diff --git > a/gdb/testsuite/gdb.threads/signal-while-stepping-over-bp-other-thread.exp > b/gdb/testsuite/gdb.threads/signal-while-stepping-over-bp-other-thread.exp > index fe8425319779..cc8b3200fbc2 100644 > --- > a/gdb/testsuite/gdb.threads/signal-while-stepping-over-bp-other-thread.exp > +++ > b/gdb/testsuite/gdb.threads/signal-while-stepping-over-bp-other-thread.exp > @@ -102,7 +102,7 @@ gdb_test "set scheduler-locking off" > gdb_test "set debug infrun 1" > > set test "step" > -gdb_test_sequence $test $test { > +gdb_test_sequence $test $test -prompt "$gdb_prompt \\\[infrun\\\] > fetch_inferior_event: exit\r\n" { > "need to step-over" > "resume_1: step=1," > "signal arrived while stepping over breakpoint" > diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp > index 3f61da8adf12..f3880ecf56bb 100644 > --- a/gdb/testsuite/lib/gdb.exp > +++ b/gdb/testsuite/lib/gdb.exp > @@ -1401,6 +1401,9 @@ proc gdb_test_no_output { args } { > # EXPECTED_OUTPUT_LIST is a list of regexps of expected output, which > are > # processed in order, and all must be present in the output. > # > +# The -prompt switch can be used to override the prompt expected at > the end of > +# the output sequence. > +# > # It is unnecessary to specify ".*" at the beginning or end of any > regexp, > # there is an implicit ".*" between each element of > EXPECTED_OUTPUT_LIST. > # There is also an implicit ".*" between the last regexp and the gdb > prompt. > @@ -1413,16 +1416,32 @@ proc gdb_test_no_output { args } { > # 0 if the test passes, > # -1 if there was an internal error. > > -proc gdb_test_sequence { command test_name expected_output_list } { > +proc gdb_test_sequence { args } { > global gdb_prompt > + > + parse_args {{prompt ""}} > + > + if { $prompt == "" } { > + set prompt "$gdb_prompt " > + } > + > + if { [llength $args] != 3 } { > + error "Unexpected # of arguments, expecting: COMMAND TEST_NAME > EXPECTED_OUTPUT_LIST" > + } > + > + lassign $args command test_name expected_output_list > + > if { $test_name == "" } { > set test_name $command > } > + > lappend expected_output_list ""; # implicit ".*" before gdb prompt > + > if { $command != "" } { > send_gdb "$command\n" > } > - return [gdb_expect_list $test_name "$gdb_prompt $" > $expected_output_list] > + > + return [gdb_expect_list $test_name "${prompt}$" > $expected_output_list] > } > >