From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id Yx45JSxPiGC7DAAAWB0awg (envelope-from ) for ; Tue, 27 Apr 2021 13:51:40 -0400 Received: by simark.ca (Postfix, from userid 112) id 889C21F11C; Tue, 27 Apr 2021 13:51:40 -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 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 863381E783 for ; Tue, 27 Apr 2021 13:51:39 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 9052A3894C27; Tue, 27 Apr 2021 17:51:38 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9052A3894C27 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1619545898; bh=+nFxxO7mGW3Uyv2Sr2FGft+FRQQqJEjZi/dztCUhI18=; 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=UPEWFrWe4WwGRZLzCGb9oMwGTPgf4pvFO2vCNlOZy/pv1grWDljJ/Q2/VXJBPqvBJ 0SDBvkfDj0Ia7aTiY9hK7pms9dhAZT16tjoCteWxlKH3vNdbzl/jGPPfJptcOE6xwg foBUVkvwEDdU9jOTX7AFVygemXFT7LsRg613pTgw= Received: from mail-qk1-x72d.google.com (mail-qk1-x72d.google.com [IPv6:2607:f8b0:4864:20::72d]) by sourceware.org (Postfix) with ESMTPS id 286A13883035 for ; Tue, 27 Apr 2021 17:51:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 286A13883035 Received: by mail-qk1-x72d.google.com with SMTP id v20so5982916qkv.5 for ; Tue, 27 Apr 2021 10:51:33 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=+nFxxO7mGW3Uyv2Sr2FGft+FRQQqJEjZi/dztCUhI18=; b=jqRczolBuJVH++s0DviDHPhgYv/EyfLD29jWJTSLWiKjilDPEP3yVgSRroLpZgRLJl kLXJqVWGu0spgOqbC1SakA7yRBEk1tlIkSubDqFEAV3VqEh+HPOFq64OzDcO6BddVT/i ojGfiEJkzpQs8Qf6nkWW1JlcU2C51ETjIFelLiJfOCA/Y0YTIKIQrG5drUlfMdNo7Dfj DtZLbh4hq5vxLUaouhzlwMMBPSqaXWfkg+rU+yu7YJzvYiMkYxBwAcFfBEOE+r+snk6o AwEL32u7FpYMMe1bI+E9glWFPwqExipPxBeC7eBKUohhK/G8xwPKvLfgrgOCMb2ObWGB 10zg== X-Gm-Message-State: AOAM533nDHPwx8pzvqRO3JlebLj0X/hsZAU1wHA5FuWNg9PDHMjOlm+0 c3wCBX/JMnfZ4yzJQLmzfWr4Gt5yYcxR8g== X-Google-Smtp-Source: ABdhPJwtsQ3pcq9k2N/rlBWU8Hpwfu/pXjWvzH1QnkvIlROGJNCEVBA8pMoMA7de+nwsb5K3PtgGEw== X-Received: by 2002:a05:620a:1011:: with SMTP id z17mr16188577qkj.426.1619545892502; Tue, 27 Apr 2021 10:51:32 -0700 (PDT) Received: from ?IPv6:2804:7f0:4841:2d9e:316d:692a:3493:8ea0? ([2804:7f0:4841:2d9e:316d:692a:3493:8ea0]) by smtp.gmail.com with ESMTPSA id i127sm3287568qke.71.2021.04.27.10.51.30 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 27 Apr 2021 10:51:31 -0700 (PDT) Subject: Re: [PATCH] [testsuite] Fix timeout with maint print objfiles To: Simon Marchi , gdb-patches@sourceware.org References: <20210427141044.2573352-1-luis.machado@linaro.org> Message-ID: Date: Tue, 27 Apr 2021 14:51:29 -0300 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: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US 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: , From: Luis Machado via Gdb-patches Reply-To: Luis Machado Errors-To: gdb-patches-bounces@sourceware.org Sender: "Gdb-patches" On 4/27/21 12:47 PM, Simon Marchi wrote: > > > 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? Exactly. I didn't exercise it with the readnow board. Adding exp_continue to the readnow match clause seems to fix this. > >> >> 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. > I wasn't sure. The wrap function breaks the line if the string length is greater than the terminal width, no? In this case, if you have a very small terminal, that might influence things. It doesn't do anything when running the testsuite though. At least for me, the width is unlimited in this case. >> } >> 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? > Done. >> + 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". Interesting. I'll use that from now on. Thanks! > > >> + 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. >>