From b9f90c72ee69a31100a7b1b4106f192dde75debf Mon Sep 17 00:00:00 2001 From: Luis Machado Date: Thu, 1 Apr 2021 17:00:43 -0300 Subject: [PATCH] Fix timeout with maint print objfiles 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: 2021-04-27 Luis Machado * psymtab.c (psymbol_functions::dump): Output newline. * symmisc.c (dump_objfile): Likewise. gdb/testsuite/ChangeLog: 2021-04-27 Luis Machado * gdb.base/maint.exp: Drop a pattern that is not needed. * lib/gdb.exp (readnow): Match line-by-line. --- gdb/ChangeLog | 6 ++++++ gdb/psymtab.c | 3 +-- gdb/symmisc.c | 7 ++----- gdb/testsuite/ChangeLog | 5 +++++ gdb/testsuite/gdb.base/maint.exp | 3 --- gdb/testsuite/lib/gdb.exp | 17 ++++++++++++----- 6 files changed, 26 insertions(+), 15 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e8f7ce59170..6d7b341dc22 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2021-04-27 Luis Machado + + * psymtab.c (psymbol_functions::dump): Output newline. + Remove wrap. + * symmisc.c (dump_objfile): Likewise. + 2021-04-27 Michael Weghorn Simon Marchi 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/ChangeLog b/gdb/testsuite/ChangeLog index 999ab44d789..d4e02d1539f 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2021-04-27 Luis Machado + + * gdb.base/maint.exp: Drop a pattern that is not needed. + * lib/gdb.exp (readnow): Match line-by-line. + 2021-04-27 Luis Machado * gdb.xml/tdesc-reload.exp: Pass -lbl. 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. -- 2.30.2