[v2,testsuite] Fix timeout with maint print objfiles

Message ID 20210427182608.2596880-1-luis.machado@linaro.org
State New
Headers show
Series
  • [v2,testsuite] Fix timeout with maint print objfiles
Related show

Commit Message

Luis Machado via Gdb-patches April 27, 2021, 6:26 p.m.
Updates on v2:

- Add missing exp_continue when looking for "readnow".
- Removed wraps

--

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.

gdb/ChangeLog:

YYYY-MM-DD  Luis Machado  <luis.machado@linaro.org>

	* psymtab.c (psymbol_functions::dump): Output newline. Remove wrap.
	* symmisc.c (dump_objfile): Likewise.

gdb/testsuite/ChangeLog:

YYYY-MM-DD  Luis Machado  <luis.machado@linaro.org>

	* gdb.base/maint.exp: Drop a pattern that is not needed.
	* lib/gdb.exp (readnow): Match line-by-line.
---
 gdb/psymtab.c                    |  3 +--
 gdb/symmisc.c                    |  7 ++-----
 gdb/testsuite/gdb.base/maint.exp |  3 ---
 gdb/testsuite/lib/gdb.exp        | 17 ++++++++++++-----
 4 files changed, 15 insertions(+), 15 deletions(-)

-- 
2.25.1

Comments

Luis Machado via Gdb-patches April 27, 2021, 6:45 p.m. | #1
On 2021-04-27 2:26 p.m., Luis Machado wrote:
> Updates on v2:

> 

> - Add missing exp_continue when looking for "readnow".

> - Removed wraps

> 

> --

> 

> 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.

> 

> gdb/ChangeLog:

> 

> YYYY-MM-DD  Luis Machado  <luis.machado@linaro.org>

> 

> 	* psymtab.c (psymbol_functions::dump): Output newline. Remove wrap.

> 	* symmisc.c (dump_objfile): Likewise.

> 

> gdb/testsuite/ChangeLog:

> 

> YYYY-MM-DD  Luis Machado  <luis.machado@linaro.org>

> 

> 	* gdb.base/maint.exp: Drop a pattern that is not needed.

> 	* lib/gdb.exp (readnow): Match line-by-line.


Thanks, that LGTM.

Simon
Luis Machado via Gdb-patches April 27, 2021, 11:43 p.m. | #2
On 4/27/21 3:45 PM, Simon Marchi wrote:
> 

> 

> On 2021-04-27 2:26 p.m., Luis Machado wrote:

>> Updates on v2:

>>

>> - Add missing exp_continue when looking for "readnow".

>> - Removed wraps

>>

>> --

>>

>> 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.

>>

>> gdb/ChangeLog:

>>

>> YYYY-MM-DD  Luis Machado  <luis.machado@linaro.org>

>>

>> 	* psymtab.c (psymbol_functions::dump): Output newline. Remove wrap.

>> 	* symmisc.c (dump_objfile): Likewise.

>>

>> gdb/testsuite/ChangeLog:

>>

>> YYYY-MM-DD  Luis Machado  <luis.machado@linaro.org>

>>

>> 	* gdb.base/maint.exp: Drop a pattern that is not needed.

>> 	* lib/gdb.exp (readnow): Match line-by-line.

> 

> Thanks, that LGTM.

> 

> Simon

> 


Thanks! Pushed now.

Patch

diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index 75a307c89aa..fe32486e2fc 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -885,8 +885,7 @@  psymbol_functions::dump (struct objfile *objfile)
 	  printf_filtered ("%s at ",
 			   psymtab->filename);
 	  gdb_print_host_address (psymtab, gdb_stdout);
-	  printf_filtered (", ");
-	  wrap_here ("  ");
+	  printf_filtered ("\n");
 	}
       printf_filtered ("\n\n");
     }
diff --git a/gdb/symmisc.c b/gdb/symmisc.c
index d992c671635..e38ceb6bda1 100644
--- a/gdb/symmisc.c
+++ b/gdb/symmisc.c
@@ -131,12 +131,9 @@  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!  ");
-		}
-	      wrap_here ("  ");
+		printf_filtered (", NOT ON CHAIN!");
+	      printf_filtered ("\n");
 	    }
 	}
       printf_filtered ("\n\n");
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..36a5fd4feb7 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -7511,17 +7511,24 @@  proc readnow { args } {
     } else {
 	set re ""
     }
+
+    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
+	    exp_continue
 	}
 	-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.