[pushed] [gdb/testsuite] Fix gdb.base/reggroups.exp with check-read1
Tom de Vries
tdevries@suse.de
Wed Oct 9 09:17:51 GMT 2024
On aarch64-linux, with make target check-read1, I run into:
...
(gdb) info reg vector^M
...
d19 {f = 0x0, u = 0x0, s = 0x0} {f =FAIL: gdb.base/reggroups.exp: fetch reggroup regs vector (timeout)
0, u = 0, s = 0}^M
...
The problem is that while (as documented) the corresponding gdb_test_multiple
doesn't work for vector registers, it doesn't skip them either. This causes
the timeout, and it also causes the registers after a vector register not to
be found.
Fix this by using -lbl style matching.
Make which reggroups and registers are found more explicit using verbose -log,
which makes us notice that regnames with underscores are skipped, so fix that
as well.
While we're at it, this:
...
set invalid_register_re "Invalid register .*"
...
and this:
...
-re $invalid_register_re {
fail "$test (unexpected invalid register response)"
}
...
means that the prompt may or may not be consumed. Fix this by limiting the
regexp to one line, and using exp_continue.
While we're at it, improve readability of the complex regexp matching a single
register by factoring out regexps.
Tested on aarch64-linux and x86_64-linux.
---
gdb/testsuite/gdb.base/reggroups.exp | 28 +++++++++++++++++++++-------
1 file changed, 21 insertions(+), 7 deletions(-)
diff --git a/gdb/testsuite/gdb.base/reggroups.exp b/gdb/testsuite/gdb.base/reggroups.exp
index f96153b9368..56c00e58831 100644
--- a/gdb/testsuite/gdb.base/reggroups.exp
+++ b/gdb/testsuite/gdb.base/reggroups.exp
@@ -27,7 +27,7 @@ if {![runto_main]} {
return 0
}
-set invalid_register_re "Invalid register .*"
+set invalid_register_re "Invalid register \[^\r\n\]*"
# Fetch all reggroups from 'maint print reggroups'.
@@ -51,6 +51,7 @@ proc fetch_reggroups {test} {
}
}
+ verbose -log "found reggroups: $reggroups"
return $reggroups
}
@@ -78,21 +79,34 @@ proc fetch_reggroup_regs {reggroup test} {
# xmm0 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, ... }}
#
set regs {}
- gdb_test_multiple "info reg $reggroup" $test {
- -re "info reg $reggroup\r\n" {
+ set have_invalid_register_fail 0
+ set re_regname "\[0-9a-zA-Z_-\]+"
+ set re_hws "\[ \t\]+"
+ set re_hs "\[^\n\r\]+"
+ set re_eol "\r\n"
+ set re_lookahead_eol "(?=$re_eol)"
+ gdb_test_multiple "info reg $reggroup" $test -lbl {
+ -re "^info reg $reggroup" {
exp_continue
}
- -re "^(\[0-9a-zA-Z-\]+)\[ \t\]+(0x\[0-9a-f\]+)\[ \t\]+(\[^\n\r\]+)\r\n" {
+ -re "^${re_eol}($re_regname)$re_hws$::hex$re_hws${re_hs}$re_lookahead_eol" {
lappend regs $expect_out(1,string)
exp_continue
}
-re $invalid_register_re {
- fail "$test (unexpected invalid register response)"
+ set have_invalid_register_fail 1
+ exp_continue
}
- -re "$gdb_prompt $" {
- pass $test
+ -re -wrap "" {
+ if { $have_invalid_register_fail } {
+ fail "$test (unexpected invalid register response)"
+ } else {
+ pass $test
+ }
}
}
+
+ verbose -log "found regs in reggroup $reggroup: [join $regs]"
return $regs
}
base-commit: 967dc35c78adb85ee1e2e596047d9dc69107a9db
--
2.35.3
More information about the Gdb-patches
mailing list