aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.xml
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2007-02-08 21:00:36 +0000
committerDaniel Jacobowitz <drow@false.org>2007-02-08 21:00:36 +0000
commit123dc839145c04e57435369a9f2551a505ce0b33 (patch)
tree57ac12fe2ef50824ceba464d4c0988e89388327d /gdb/testsuite/gdb.xml
parent1183581f7f529336f76eff7980fc7112871482ed (diff)
downloadgdb-123dc839145c04e57435369a9f2551a505ce0b33.zip
gdb-123dc839145c04e57435369a9f2551a505ce0b33.tar.gz
gdb-123dc839145c04e57435369a9f2551a505ce0b33.tar.bz2
* Makefile.in (arm-tdep.o, eval.o, target-descriptions.o)
(xml-tdesc.o): Update. * xml-support.c: Add a comment. (gdb_xml_enums_boolean): New variable. (gdb_xml_parse_attr_enum): Use strcasecmp. * xml-support.h (gdb_xml_enums_boolean): Declare. * xml-tdesc.c (struct tdesc_parsing_data): Record current_feature, next_regnum, and current_union. (tdesc_start_feature, tdesc_start_reg, tdesc_start_union) (tdesc_end_union, tdesc_start_field, tdesc_start_vector) (field_attributes, union_children, reg_attributes, union_attributes) (vector_attributes, feature_attributes, feature_children): New. (target_children): Make static. Add <feature>. (tdesc_elements): Make static. * target-descriptions.c (struct tdesc_reg, tdesc_reg_p, type_p) (struct tdesc_feature, tdesc_feature_p): New types. (struct target_desc): Add features member. (struct tdesc_arch_data, tdesc_data): New. (target_find_description): Clarify error message. Warn about ignored register descriptions. (tdesc_has_registers, tdesc_find_feature, tdesc_feature_name) (tdesc_named_type, tdesc_data_init, tdesc_data_alloc) (tdesc_data_cleanup, tdesc_numbered_register) (tdesc_numbered_register_choices, tdesc_find_register) (tdesc_register_name, tdesc_register_type) (tdesc_remote_register_number, tdesc_register_reggroup_p) (set_tdesc_pseudo_register_name, set_tdesc_pseudo_register_type) (set_tdesc_pseudo_register_reggroup_p, tdesc_use_registers) (tdesc_free_reg, tdesc_create_reg, tdesc_free_feature) (tdesc_create_feature, tdesc_record_type): New. (free_target_description): Free features. (_initialize_target_descriptions): Initialize tdesc_data. * arch-utils.c (default_remote_register_number): New. * arch-utils.h (default_remote_register_number): New prototype. * target-descriptions.h (set_tdesc_pseudo_register_name) (set_tdesc_pseudo_register_type, set_tdesc_pseudo_register_reggroup_p) (tdesc_use_registers, tdesc_data_alloc, tdesc_data_cleanup) (tdesc_numbered_register, tdesc_numbered_register_choices) (tdesc_has_registers, tdesc_find_feature, tdesc_feature_name) (tdesc_named_type, tdesc_create_feature, tdesc_record_type) (tdesc_create_reg): Declare. * gdbarch.sh (remote_register_number): New entry. * gdbarch.c, gdbarch.h: Regenerate. * remote.c (init_remote_state): Use gdbarch_remote_register_number. * features/gdb-target.dtd: Add feature, reg, vector, union, and field. * arm-tdep.c (arm_register_aliases): New. (arm_register_name_strings): Rename to... (arm_register_names): ...this. Make const. Delete the old version. (current_option, arm_register_byte): Delete. (set_disassembly_style): Simplify. Do not adjust arm_register_names. (value_of_arm_user_reg): New. (arm_gdbarch_init): Verify any described registers. Call tdesc_use_registers. Don't use arm_register_byte. Create aliases for standard register names. (_initialize_arm_tdep): Do not adjust arm_register_names. * user-regs.c (struct user_reg): Add baton member. (append_user_reg, user_reg_add_builtin, user_regs_init) (user_reg_add, value_of_user_reg): Use a baton for user register functions. * std-regs.c: Update. * user-regs.h (user_reg_read_ftype, user_reg_add_builtin) (user_reg_add): Add baton argument. * NEWS: Mention target description register support. * features/arm-core.xml, features/arm-fpa.xml: New. * eval.c (evaluate_subexp_standard): Allow ptype $register when the program is not running. * gdb.texinfo (-target-disconnect): Use @smallexample. (Requirements): Add anchor for Expat. Update description. (Target Descriptions): Mention Expat. (Target Description Format): Document new elements. Use @smallexample. (Predefined Target Types, Standard Target Features): New sections. * doc/gdbint.texinfo (Target Descriptions): New section. * gdb.xml/single-reg.xml, gdb.xml/tdesc-regs.exp, gdb.xml/core-only.xml, gdb.xml/extra-regs.xml: New files.
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"