testsuite: expect possible pagination when starting gdb

When gdb starts, the lines that appear before the first prompt may get
paginated if the terminal in which the tests are ran is too small (in
terms of rows). These lines include the welcome/license message and
possibly more, such as "Reading symbols from...". Pagination is disabled
right after gdb is started (with "set height 0"), but this output happens
before we are able to set height.

If these lines get paginated, gdb waits for the user to press enter and
the test harness waits for gdb to print its prompt, resulting in a
deadlock.

My first idea was to launch gdb with --quiet. However, some lines are
still printed ("Reading symbols from...", some more stuff when attaching
with --pid, etc).

The proposed solution simply expects that pagination can occur after
starting gdb. If this is the case, it sends a "\n" and loops.

gdb/testsuite/Changelog:

	* lib/gdb.exp (default_gdb_start): After starting gdb, loop
	as long as we get pagination notifications.
This commit is contained in:
Simon Marchi 2014-12-15 11:46:44 -05:00
parent 38bcc89d48
commit e882ef3cfc
2 changed files with 29 additions and 15 deletions

View File

@ -1,3 +1,8 @@
2014-12-15 Simon Marchi <simon.marchi@ericsson.com>
* lib/gdb.exp (default_gdb_start): After starting gdb, loop
as long as we get pagination notifications.
2014-12-15 Jason Merrill <jason@redhat.com> 2014-12-15 Jason Merrill <jason@redhat.com>
* Makefile.in (check-gdb.%): Restore. * Makefile.in (check-gdb.%): Restore.

View File

@ -1451,7 +1451,7 @@ proc default_gdb_spawn { } {
# Default gdb_start procedure. # Default gdb_start procedure.
proc default_gdb_start { } { proc default_gdb_start { } {
global gdb_prompt global gdb_prompt pagination_prompt
global gdb_spawn_id global gdb_spawn_id
if [info exists gdb_spawn_id] { if [info exists gdb_spawn_id] {
@ -1466,20 +1466,29 @@ proc default_gdb_start { } {
# When running over NFS, particularly if running many simultaneous # When running over NFS, particularly if running many simultaneous
# tests on different hosts all using the same server, things can # tests on different hosts all using the same server, things can
# get really slow. Give gdb at least 3 minutes to start up. # get really slow. Give gdb at least 3 minutes to start up.
gdb_expect 360 { set loop_again 1
-re "\[\r\n\]$gdb_prompt $" { while { $loop_again } {
verbose "GDB initialized." set loop_again 0
} gdb_expect 360 {
-re "$gdb_prompt $" { -re "$pagination_prompt" {
perror "GDB never initialized." verbose "Hit pagination during startup. Pressing enter to continue."
unset gdb_spawn_id send_gdb "\n"
return -1 set loop_again 1
} }
timeout { -re "\[\r\n\]$gdb_prompt $" {
perror "(timeout) GDB never initialized after 10 seconds." verbose "GDB initialized."
remote_close host }
unset gdb_spawn_id -re "$gdb_prompt $" {
return -1 perror "GDB never initialized."
unset gdb_spawn_id
return -1
}
timeout {
perror "(timeout) GDB never initialized after 10 seconds."
remote_close host
unset gdb_spawn_id
return -1
}
} }
} }