aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.xml
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/testsuite/gdb.xml')
-rw-r--r--gdb/testsuite/gdb.xml/core-only.xml3
-rw-r--r--gdb/testsuite/gdb.xml/extra-regs.xml16
-rw-r--r--gdb/testsuite/gdb.xml/single-reg.xml5
-rw-r--r--gdb/testsuite/gdb.xml/tdesc-regs.exp95
4 files changed, 119 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.xml/core-only.xml b/gdb/testsuite/gdb.xml/core-only.xml
new file mode 100644
index 0000000..f2ddcd5
--- /dev/null
+++ b/gdb/testsuite/gdb.xml/core-only.xml
@@ -0,0 +1,3 @@
+<target>
+ <xi:include href="core-regs.xml"/>
+</target>
diff --git a/gdb/testsuite/gdb.xml/extra-regs.xml b/gdb/testsuite/gdb.xml/extra-regs.xml
new file mode 100644
index 0000000..5db426b
--- /dev/null
+++ b/gdb/testsuite/gdb.xml/extra-regs.xml
@@ -0,0 +1,16 @@
+<target>
+ <xi:include href="core-regs.xml"/>
+ <feature name="extra">
+ <vector id="v4int8" type="int8" count="4"/>
+ <vector id="v2int16" type="int16" count="2"/>
+ <union id="vecint">
+ <field name="v4" type="v4int8"/>
+ <field name="v2" type="v2int16"/>
+ </union>
+
+ <reg name="extrareg" bitsize="32"/>
+ <reg name="uintreg" bitsize="32" type="uint32"/>
+ <reg name="vecreg" bitsize="32" type="v4int8"/>
+ <reg name="unionreg" bitsize="32" type="vecint"/>
+ </feature>
+</target>
diff --git a/gdb/testsuite/gdb.xml/single-reg.xml b/gdb/testsuite/gdb.xml/single-reg.xml
new file mode 100644
index 0000000..f725bf9
--- /dev/null
+++ b/gdb/testsuite/gdb.xml/single-reg.xml
@@ -0,0 +1,5 @@
+<target>
+ <feature name="single">
+ <reg name="one" bitsize="32"/>
+ </feature>
+</target>
diff --git a/gdb/testsuite/gdb.xml/tdesc-regs.exp b/gdb/testsuite/gdb.xml/tdesc-regs.exp
new file mode 100644
index 0000000..fde2111
--- /dev/null
+++ b/gdb/testsuite/gdb.xml/tdesc-regs.exp
@@ -0,0 +1,95 @@
+# Copyright 2007 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+if {[gdb_skip_xml_test]} {
+ unsupported "tdesc-regs.exp"
+ return -1
+}
+
+gdb_start
+
+# To test adding registers, we need a core set of registers for this
+# architecture, or the description will be rejected.
+
+set core-regs ""
+switch -glob -- [istarget] {
+ "*arm-*-*" {
+ set core-regs arm-core
+ }
+ "xscale-*-*" {
+ set core-regs arm-core
+ }
+}
+
+# If no core registers were specified, assume this target does not
+# support target-defined registers. Verify that we get a warning if
+# we try to use them. This not only tests the warning, but also
+# reminds maintainers to add test support when they add the feature.
+if {[string equal ${core-regs} ""]} {
+ gdb_test "set tdesc file $srcdir/$subdir/single-reg.xml" \
+ "warning: Target-supplied registers are not supported.*" \
+ "set tdesc file single-reg.xml"
+ unsupported "register tests"
+ return 0
+}
+
+# Otherwise, we support both XML and target defined registers.
+
+# Make sure we reject a description missing standard registers,
+# like the PC.
+gdb_test "set tdesc file $srcdir/$subdir/single-reg.xml" \
+ "warning: Architecture rejected target-supplied description" \
+ "set tdesc file single-reg.xml"
+
+# Copy the core registers into the objdir if necessary, so that they
+# will be found by <xi:include>.
+file delete "core-regs.xml"
+file copy "$srcdir/../features/${core-regs}.xml" "core-regs.xml"
+
+# Similarly, we need to copy files under test into the objdir.
+proc load_description { file errmsg } {
+ global srcdir
+ global subdir
+ global gdb_prompt
+
+ file delete "regs.xml"
+ file copy "$srcdir/$subdir/$file" "regs.xml"
+
+ # Anchor the test output, so that error messages are detected.
+ set cmd "set tdesc filename regs.xml"
+ set msg "set tdesc filename $file"
+ set cmd_regex [string_to_regexp $cmd]
+ gdb_test_multiple $cmd $msg {
+ -re "^$cmd_regex\r\n$errmsg$gdb_prompt $" {
+ pass $msg
+ }
+ }
+}
+
+load_description "extra-regs.xml" ""
+gdb_test "ptype \$extrareg" "type = (int|long|long long)"
+gdb_test "ptype \$uintreg" "type = uint32_t"
+gdb_test "ptype \$vecreg" "type = int8_t \\\[4\\\]"
+gdb_test "ptype \$unionreg" \
+ "type = union {\r\n *v4int8 v4;\r\n *v2int16 v2;\r\n}"
+gdb_test "ptype \$unionreg.v4" "type = int8_t \\\[4\\\]"
+
+load_description "core-only.xml" ""
+# The extra register from the previous description should be gone.
+gdb_test "ptype \$extrareg" "type = void"
+
+file delete "core-regs.xml"
+file delete "regs.xml"