Fix timeout with maint print objfiles
authorLuis Machado <luis.machado@linaro.org>
Thu, 1 Apr 2021 20:00:43 +0000 (17:00 -0300)
committerLuis Machado <luis.machado@linaro.org>
Tue, 27 Apr 2021 23:42:07 +0000 (20:42 -0300)
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  <luis.machado@linaro.org>

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

gdb/testsuite/ChangeLog:

2021-04-27  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/ChangeLog
gdb/psymtab.c
gdb/symmisc.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/maint.exp
gdb/testsuite/lib/gdb.exp

index e8f7ce591701664ddae48961c1c884515578c994..6d7b341dc22ea25cd04977aa28cebeac25999967 100644 (file)
@@ -1,3 +1,9 @@
+2021-04-27  Luis Machado  <luis.machado@linaro.org>
+
+       * psymtab.c (psymbol_functions::dump): Output newline.
+       Remove wrap.
+       * symmisc.c (dump_objfile): Likewise.
+
 2021-04-27  Michael Weghorn  <m.weghorn@posteo.de>
            Simon Marchi  <simon.marchi@polymtl.ca>
 
index 75a307c89aa31c93f950589b7f249e3718c4a2c1..fe32486e2fc54ca4073cac426fddac99d420b349 100644 (file)
@@ -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");
     }
index d992c67163554f16cee3a0a71c9b034868448454..e38ceb6bda12e944e0ea8ca5665e21e2e7df4b7f 100644 (file)
@@ -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");
index 999ab44d7896305fa93f0088d73fa248f461df9d..d4e02d1539f5584f743c93b58633e3bbc1677ace 100644 (file)
@@ -1,3 +1,8 @@
+2021-04-27  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.
+
 2021-04-27  Luis Machado  <luis.machado@linaro.org>
 
        * gdb.xml/tdesc-reload.exp: Pass -lbl.
index e72392220cc84b95fa7aaf2a90535e3bd08fd010..6831d1ba72065ed717adc2e85dd2e4e125e1e430 100644 (file)
@@ -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
     }
index 943112fcc808eebaf5fc511265bf58692357fea2..36a5fd4feb7cf9738db8daa7b30f550757bbf87c 100644 (file)
@@ -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.