1 # This testcase is part of GDB
, the GNU debugger.
3 # Copyright
2017-2019 Free Software Foundation
, Inc.
5 # This
program is free software
; you can redistribute it and
/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation
; either version
3 of the License
, or
8 #
(at your option
) any later version.
10 # This
program is distributed in the hope that it will be useful
,
11 # but WITHOUT
ANY WARRANTY
; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License
for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this
program.
If not
, see
<http
://www.gnu.org
/licenses
/>.
18 # Test listing reggroups and the registers in each group.
22 if {[prepare_for_testing
"failed to prepare" $testfile $srcfile debug]} {
26 if ![runto_main
] then {
27 fail
"can't run to main"
31 set invalid_register_re
"Invalid register .*"
33 #
Fetch all reggroups from
'maint print reggroups'.
35 proc fetch_reggroups
{test
} {
39 gdb_test_multiple
"maint print reggroups" $test {
40 -re
"maint print reggroups\r\n" {
43 -re
"^ Group\[ \t\]+Type\[ \t\]+\r\n" {
46 -re
"^ (\[_0-9a-zA-Z-\]+)\[ \t\]+(user|internal)\[ \t\]+\r\n" {
47 lappend reggroups $expect_out
(1,string
)
51 gdb_assert
"[llength $reggroups] != 0" $test
58 #
Fetch all registers
for a reggroup from
'info reg <reggroup>'.
60 proc fetch_reggroup_regs
{reggroup test
} {
62 global invalid_register_re
64 # The command
info reg
<reggroup
> will
return something like the following
:
67 # r1
0x7fdffc 0x7fdffc^M
68 # r2
0x7fe000 0x7fe000^M
69 # npc
0x23a8 0x23a8 <main
+12>^M
70 # sr
0x8401 [ SM CY FO CID
=0 ]^M
72 # We
parse out and
return the reg names
, this is done by detecting
73 # that
for each line we have a register
name followed by a $hex number.
75 # Note
: we will not
return vector registers
, but I think this is ok because
76 #
for testing purposes we just want to ensure we
get some registers and dont
77 # fail. Example vector register
:
79 # xmm0
{v4_float
= {0x0, 0x0, 0x0, 0x0}, v2_double
= {0x0, ...
}}
82 gdb_test_multiple
"info reg $reggroup" $test {
83 -re
"info reg $reggroup\r\n" {
86 -re
"^(\[0-9a-zA-Z-\]+)\[ \t\]+(0x\[0-9a-f\]+)\[ \t\]+(\[^\n\r\]+)\r\n" {
87 lappend regs $expect_out
(1,string
)
90 -re $invalid_register_re
{
91 fail
"$test (unexpected invalid register response)"
100 set reggroups
[fetch_reggroups
"fetch reggroups"]
102 foreach reggroup $reggroups
{
103 set regs
[fetch_reggroup_regs $reggroup
"fetch reggroup regs $reggroup"]
104 set regcount
[expr $regcount
+ [llength $regs
]]
107 gdb_assert
"[llength $regcount] != 0" "system has reggroup registers"
109 #
If this fails it means that probably someone changed the error
text returned
110 #
for an invalid register
argument.
If that happens we should fix the pattern
111 # here and in the fetch_reggroup_regs procedure above.
112 gdb_test
"info reg invalid-reggroup" $invalid_register_re \
113 "info reg invalid-reggroup should report 'Invalid register'"