gdb/testsuite: Handle targets with lots of registers

In gdb.base/maint.exp a test calls 'maint print registers'.  If the
target has lots of registers this may overflow expect's buffers,
causing the test to fail.

After this commit we process the output line at a time until we get back
to the GDB prompt, this should prevent buffer overrun while still
testing that the command works as required.

gdb/testsuite/ChangeLog:

	* gdb.base/maint.exp: Process output from 'maint print registers'
	line at a time.
This commit is contained in:
Andrew Burgess
2018-04-09 00:18:34 +01:00
parent bf27f0e2c7
commit 11859c310c
2 changed files with 27 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2018-05-04 Andrew Burgess <andrew.burgess@embecosm.com>
* gdb.base/maint.exp: Process output from 'maint print registers'
line at a time.
2018-05-04 Andrew Burgess <andrew.burgess@embecosm.com>
* lib/mi-support.exp (mi_run_cmd_full): Fix regexp and add a

View File

@ -62,8 +62,28 @@ gdb_test_no_output "set height 0"
gdb_file_cmd ${binfile}
# Test for a regression where this command would internal-error if the
# program wasn't running.
gdb_test "maint print registers" "Name.*Nr.*Rel.*Offset.*Size.*Type.*"
# program wasn't running. If there's a lot of registers then this
# might overflow expect's buffers, so process the output line at a
# time.
set saw_registers 0
set saw_headers 0
set test "maint print registers"
gdb_test_multiple $test $test {
-re "\[^\r\n\]+Name\[^\r\n\]+Nr\[^\r\n\]+Rel\[^\r\n\]+Offset\[^\r\n\]+Size\[^\r\n\]+Type\[^\r\n\]+\[\r\n\]+" {
set saw_headers 1
exp_continue
}
-re "^\[^\r\n\]+\[0-9\]+\[^\r\n\]+\[0-9\]+\[^\r\n\]+\[0-9\]+\[^\r\n\]+\[0-9\]+\[^\r\n\]+\[\r\n\]+" {
set saw_registers 1
exp_continue
}
-re "^\\*\[0-9\]+\[^\r\n\]+\[\r\n\]+" {
exp_continue
}
-re "$gdb_prompt $" {
gdb_assert { $saw_registers && $saw_headers } $test
}
}
# Test "mt expand-symtabs" here as it's easier to verify before we
# run the program.