[PATCH 5/57][Arm][GAS] Add support for MVE instructions: vmull{b,t}
[binutils-gdb.git] / gdb / testsuite / gdb.xml / tdesc-regs.exp
blob35fcc0005dcd77c8d4cbd53e1d764cc5efdced8d
1 # Copyright 2007-2019 Free Software Foundation, Inc.
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 3 of the License, or
6 # (at your option) any later version.
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 # GNU General Public License for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 if {[gdb_skip_xml_test]} {
17     unsupported "tdesc-regs.exp"
18     return -1
21 gdb_start
23 # To test adding registers, we need a core set of registers for this
24 # architecture, or the description will be rejected.
26 set core-regs ""
27 set regdir ""
28 set architecture ""
29 switch -glob -- [istarget] {
30     "aarch64*-*-*" {
31         set core-regs {aarch64-core.xml}
32     }
33     "arc*-*-*" {
34         set architecture "arc:ARCv2"
35         set core-regs {arc-v2.xml}
36     }
37     "arm*-*-*" {
38         set regdir "arm/"
39         set core-regs {arm-core.xml}
40     }
41     "*m68k-*-*" {
42         set core-regs {m68k-core.xml}
43     }
44     "mips*-*-*" {
45         set core-regs {mips-cpu.xml mips-cp0.xml mips-fpu.xml mips-dsp.xml}
46     }
47     "nds32*-*-*" {
48         set core-regs {nds32-core.xml}
49     }
50     "nios2-*-*" {
51         set core-regs {nios2-cpu.xml}
52     }
53     "or1k-*-*" {
54         set core-regs {or1k-core.xml}
55     }
56     "powerpc*-*-*" {
57         set regdir "rs6000/"
58         set core-regs {power-core.xml}
59     }
60     "s390*-*-*" {
61         set core-regs {s390-core32.xml s390-acr.xml s390-fpr.xml}
62     }
63     "sparc-*-*" {
64         set regdir "sparc/"
65         set core-regs {sparc32-cpu.xml sparc32-fpu.xml sparc32-cp0.xml}
66     }
67     "sparc64-*-*" {
68         set architecture "sparc:v9"
69         set regdir "sparc/"
70         set core-regs {sparc64-cpu.xml sparc64-fpu.xml sparc64-cp0.xml}
71     }
72     "spu*-*-*" {
73         # This may be either the spu-linux-nat target, or the Cell/B.E.
74         # multi-architecture debugger in SPU standalone executable mode.
75         # We do not support XML register sets on SPU in either case.
76         # However, the multi-arch debugger will accept XML registers sets
77         # (on the PowerPC side), hence the test below would fail.
78         # Simply return unconditionally here.
79         unsupported "register tests"
80         return 0
81     }
82     "tic6x-*-*" {
83         set core-regs {tic6x-core.xml}
84     }
85     "i?86-*-*" {
86         set architecture "i386"
87         set regdir "i386/"
88         set core-regs {32bit-core.xml 32bit-sse.xml}
89     }
90     "x86_64-*-*" {
91         set architecture "i386:x86-64"
92         set regdir "i386/"
93         set core-regs {64bit-core.xml 64bit-sse.xml}
94     }
97 # If no core registers were specified, assume this target does not
98 # support target-defined registers.  Verify that we get a warning if
99 # we try to use them.  This not only tests the warning, but also
100 # reminds maintainers to add test support when they add the feature.
102 set single_reg_xml [gdb_remote_download host  \
103                         "$srcdir/$subdir/single-reg.xml"]
105 if {[string equal ${core-regs} ""]} {
106     gdb_test "set tdesc file $single_reg_xml" \
107         "warning: Target-supplied registers are not supported.*" \
108         "set tdesc file single-reg.xml"
109     unsupported "register tests"
110     return 0
113 # Otherwise, we support both XML and target defined registers.
115 # Make sure we reject a description missing standard registers,
116 # like the PC.
117 gdb_test "set tdesc file $single_reg_xml" \
118     "warning: Architecture rejected target-supplied description" \
119     "set tdesc file single-reg.xml"
121 # Copy the core registers into the objdir if necessary, so that they
122 # will be found by <xi:include>.
123 foreach src ${core-regs} {
124     set remote_filename($src) \
125         [gdb_remote_download host "$srcdir/../features/$regdir$src"]
128 # Similarly, we need to copy files under test into the objdir.
129 proc load_description { file errmsg xml_file } {
130     global srcdir
131     global subdir
132     global gdb_prompt
133     global core-regs
134     global architecture
135     global remote_filename
137     set regs_file [standard_output_file $xml_file]
139     file delete $regs_file
140     set ifd [open "$srcdir/$subdir/$file" r]
141     set ofd [open $regs_file w]
142     while {[gets $ifd line] >= 0} {
143         if {[regexp {<xi:include href="core-regs.xml"/>} $line]} {
144             if {! [string equal ${architecture} ""]} {
145                 puts $ofd "  <architecture>${architecture}</architecture>"
146             }
147             foreach src ${core-regs} {
148                 puts $ofd "  <xi:include href=\"$src\"/>"
149             }
150         } else {
151             puts $ofd $line
152         }
153     }
154     close $ifd
155     close $ofd
157     if {[is_remote host]} {
158         set regs_file [remote_download host "$subdir/$xml_file" $xml_file]
159     }
161     # Anchor the test output, so that error messages are detected.
162     set cmd "set tdesc filename [file tail $regs_file]"
163     set msg "set tdesc filename $xml_file - from $file"
164     set cmd_regex [string_to_regexp $cmd]
165     gdb_test_multiple $cmd $msg {
166         -re "^$cmd_regex\r\n$errmsg$gdb_prompt $" {
167             pass $msg
168         }
169     }
172 if {![is_remote host]} {
173     gdb_test "cd [standard_output_file {}]" "Working directory .*" \
174         "cd to directory holding xml"
177 load_description "extra-regs.xml" "" "test-extra-regs.xml"
178 gdb_test "ptype \$extrareg" "type = (int|long|long long)"
179 gdb_test "ptype \$uintreg" "type = uint32_t"
180 gdb_test "ptype \$vecreg" "type = int8_t __attribute__ \\(\\(vector_size\\(4\\)\\)\\)"
181 gdb_test "ptype \$unionreg" \
182     "type = union vecint {\r\n *v4int8 v4;\r\n *v2int16 v2;\r\n}"
183 gdb_test "ptype \$unionreg.v4" "type = int8_t __attribute__ \\(\\(vector_size\\(4\\)\\)\\)"
184 gdb_test "ptype \$structreg" \
185     "type = struct struct1 {\r\n *v4int8 v4;\r\n *v2int16 v2;\r\n}"
186 gdb_test "ptype \$structreg.v4" "type = int8_t __attribute__ \\(\\(vector_size\\(4\\)\\)\\)"
187 gdb_test "ptype \$bitfields" \
188     "type = struct struct2 {\r\n *uint64_t f1 : 35;\r\n *uint64_t f2 : 1;\r\n}"
189 gdb_test "ptype \$flags" \
190     "type = flag flags {\r\n *bool X @0;\r\n *uint32_t Y @2;\r\n}"
191 gdb_test "ptype \$mixed_flags" \
192     "type = flag mixed_flags {\r\n *bool A @0;\r\n *uint32_t B @1-3;\r\n *bool C @4;\r\n *uint32_t D @5;\r\n *uint32_t @6-7;\r\n *enum Z_values {yes = 1, no = 0, maybe = 2, so} Z @8-9;\r\n}"
193 # Reggroups should have at least general and the extra foo group
194 gdb_test "maintenance print reggroups" \
195     " Group\[ \t\]+Type\[ \t\]+\r\n.* general\[ \t\]+user\[ \t\]+\r\n.* foo\[ \t\]+user\[ \t\]+"
197 load_description "core-only.xml" "" "test-regs.xml"
198 # The extra register from the previous description should be gone.
199 gdb_test "ptype \$extrareg" "type = void"