From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id /T3fKQAyiGDcCQAAWB0awg (envelope-from ) for ; Tue, 27 Apr 2021 11:47:12 -0400 Received: by simark.ca (Postfix, from userid 112) id 93B041F11C; Tue, 27 Apr 2021 11:47:12 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-0.7 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,MAILING_LIST_MULTI,RDNS_DYNAMIC,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (ip-8-43-85-97.sourceware.org [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 8BBE11E01F for ; Tue, 27 Apr 2021 11:47:11 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id D3D8D3894414; Tue, 27 Apr 2021 15:47:10 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D3D8D3894414 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1619538430; bh=cFDiurtE/TSNLgcCtEve0X/ZGHYy245VQJsgMQytrew=; h=Subject:To:References:Date:In-Reply-To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=IRLGWxl0QAlHuuM+h5X7mefaZfYKNhZjoEFcMApPWcqayUWLSkX2iOwtS4kIaD1Vd a3A3ugMUCUFsJEwDdAJuwkSFA9ls+3M/+28plCv7MjhXNqi2fuLzy50tsSS5sMmW9Y baqht269QhPKYfFNo2mxTR7JyRABeMOyCD1OJM+A= Received: from smtp.polymtl.ca (smtp.polymtl.ca [132.207.4.11]) by sourceware.org (Postfix) with ESMTPS id 363DF3894431 for ; Tue, 27 Apr 2021 15:47:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 363DF3894431 Received: from simark.ca (simark.ca [158.69.221.121]) (authenticated bits=0) by smtp.polymtl.ca (8.14.7/8.14.7) with ESMTP id 13RFl1IK027567 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 27 Apr 2021 11:47:06 -0400 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp.polymtl.ca 13RFl1IK027567 Received: from [10.0.0.11] (192-222-157-6.qc.cable.ebox.net [192.222.157.6]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id 25F201E01F; Tue, 27 Apr 2021 11:47:01 -0400 (EDT) Subject: Re: [PATCH] [testsuite] Fix timeout with maint print objfiles To: Luis Machado , gdb-patches@sourceware.org References: <20210427141044.2573352-1-luis.machado@linaro.org> Message-ID: Date: Tue, 27 Apr 2021 11:47:00 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.1 MIME-Version: 1.0 In-Reply-To: <20210427141044.2573352-1-luis.machado@linaro.org> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Poly-FromMTA: (simark.ca [158.69.221.121]) at Tue, 27 Apr 2021 15:47:01 +0000 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: , From: Simon Marchi via Gdb-patches Reply-To: Simon Marchi Errors-To: gdb-patches-bounces@sourceware.org Sender: "Gdb-patches" On 2021-04-27 10:10 a.m., Luis Machado via Gdb-patches wrote: > I'm seeing timeouts from gdb.rust/traits.exp when we attempt to print > things with "maint print objfiles". > > This happens for two reasons: > > 1 - GDB does not explicitly split each entry into its own line, but rather > relies on the terminal's width to insert line breaks. > > 2 - When running the GDB testsuite, such width may be unlimited, which will > prevent GDB from inserting any line breaks. > > As a result, the output may be too lengthy and will come in big lines. Tweak > the support library to match the patterns line-by-line, which gives us more > time to match things. Also fix GDB's output to print one entry per line, > regardless of the terminal width. > > A similar approach was used in another testcase using the same command (commit > eaeaf44cfdc9a4096a0dd52fa0606f29d4bfd48e). With the new line breaks, we don't > need a particular pattern, so clean up that test as well. I still see some timeout with: make check-read1 TESTS="gdb.rust/traits.exp" RUNTESTFLAGS="--target_board=readnow" I think what happens is that we find "readnow" in the "maint print objfiles" output very early, and leave the huge following output un-consumed. So it's the gdb_test after that, that ends up consuming it and timing out: FAIL: gdb.rust/traits.exp: print *td (timeout) We should make sure that the readnow proc consumes all the output of "maint print objfiles" before exiting (maybe that was the intention, but it doesn't work). You probably need some "exp_continue" in your match clauses? > > gdb/ChangeLog: > > YYYY-MM-DD Luis Machado > > * psymtab.c (psymbol_functions::dump): Output newline. > * symmisc.c (dump_objfile): Likewise. > > gdb/testsuite/ChangeLog: > > YYYY-MM-DD Luis Machado > > * gdb.base/maint.exp: Drop a pattern that is not needed. > * lib/gdb.exp (readnow): Match line-by-line. > --- > gdb/psymtab.c | 2 +- > gdb/symmisc.c | 4 ++-- > gdb/testsuite/gdb.base/maint.exp | 3 --- > gdb/testsuite/lib/gdb.exp | 17 ++++++++++++----- > 4 files changed, 15 insertions(+), 11 deletions(-) > > diff --git a/gdb/psymtab.c b/gdb/psymtab.c > index 75a307c89aa..e3032d60343 100644 > --- a/gdb/psymtab.c > +++ b/gdb/psymtab.c > @@ -885,7 +885,7 @@ psymbol_functions::dump (struct objfile *objfile) > printf_filtered ("%s at ", > psymtab->filename); > gdb_print_host_address (psymtab, gdb_stdout); > - printf_filtered (", "); > + printf_filtered ("\n"); > wrap_here (" "); I think we can remove wrap_here, since we don't rely on wrapping anymore. > } > printf_filtered ("\n\n"); > diff --git a/gdb/symmisc.c b/gdb/symmisc.c > index d992c671635..d70c5ecda49 100644 > --- a/gdb/symmisc.c > +++ b/gdb/symmisc.c > @@ -131,11 +131,11 @@ dump_objfile (struct objfile *objfile) > printf_filtered ("%s at ", > symtab_to_filename_for_display (symtab)); > gdb_print_host_address (symtab, gdb_stdout); > - printf_filtered (", "); > if (SYMTAB_OBJFILE (symtab) != objfile) > { > - printf_filtered ("NOT ON CHAIN! "); > + printf_filtered (", NOT ON CHAIN!"); > } Can you remove the unnecessary curly braces? > + printf_filtered ("\n"); > wrap_here (" "); Same here, I think we can remove wrap_here. > } > } > diff --git a/gdb/testsuite/gdb.base/maint.exp b/gdb/testsuite/gdb.base/maint.exp > index e72392220cc..6831d1ba720 100644 > --- a/gdb/testsuite/gdb.base/maint.exp > +++ b/gdb/testsuite/gdb.base/maint.exp > @@ -230,9 +230,6 @@ gdb_test_multiple "maint print objfiles" "" -lbl { > set symtabs 1 > exp_continue > } > - -re " at $hex," { > - exp_continue > - } > -re -wrap "" { > pass $gdb_test_name > } > diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp > index 943112fcc80..01012b9a5a3 100644 > --- a/gdb/testsuite/lib/gdb.exp > +++ b/gdb/testsuite/lib/gdb.exp > @@ -7511,17 +7511,24 @@ proc readnow { args } { > } else { > set re "" > } > + > + global gdb_prompt This appears to be unused. And on an unrelated topic, I recently learned you can refer to global variables as ${::gdb_prompt}. I now prefer that over declaring them as "global". > + set readnow_p 0 > + # Given the listing from the following command can be very verbose, match > + # the patterns line-by-line. This prevents timeouts from waiting for > + # too much data to come at once. > set cmd "maint print objfiles $re" > - gdb_test_multiple $cmd "" { > - -re -wrap "\r\n.gdb_index: faked for \"readnow\"\r\n.*" { > - return 1 > + gdb_test_multiple $cmd "" -lbl { > + -re "\r\n.gdb_index: faked for \"readnow\"" { > + # Record the we've seen the above pattern. > + set readnow_p 1 > } > -re -wrap "" { > - return 0 > + # We don't care about any other input. > } > } > > - return 0 > + return $readnow_p > } > > # Return 1 if partial symbols are available. Otherwise, return 0. >