Fix display of structures/bitfields in register description.
Add support for displaying structures and bitfields for registers when executing "maint print c-tdesc". This command is also used when converting the xml target description file into c file. Example of the behaviour is given below reporting a snipet of the xml file and a snippet of the c code generated. XML file contains: ... <union id="vecint"> <field name="v4" type="v4int8"/> <field name="v2" type="v2int16"/> </union> <struct id="struct1"> <field name="v4" type="v4int8"/> <field name="v2" type="v2int16"/> </struct> <struct id="struct2" size="8"> <field name="f1" start="0" end="34"/> <field name="f2" start="63" end="63"/> </struct> ... Setting this xml file as target description file and issuing the maintenance print c-tdesc the following output is obtained: feature = tdesc_create_feature (result, "extra"); field_type = tdesc_named_type (feature, "int8"); tdesc_create_vector (feature, "v4int8", field_type, 4); field_type = tdesc_named_type (feature, "int16"); tdesc_create_vector (feature, "v2int16", field_type, 2); type = tdesc_create_union (feature, "vecint"); field_type = tdesc_named_type (feature, "v4int8"); tdesc_add_field (type, "v4", field_type); field_type = tdesc_named_type (feature, "v2int16"); tdesc_add_field (type, "v2", field_type); C output is not supported type "struct1". This is finally the issue. 2013-03-27 Walfred Tedeschi <walfred.tedeschi@intel.com> * target-descriptions.c (maint_print_c_tdesc_cmd): Add case to parse structures as register types and bitfields. testsuite/ * gdb.xml/maint_print_struct.exp: New file. * gdb.xml/maint_print_struct.xml: New file. Change-Id: I2e20b095d508319c80275e724a9452c7e2834067 Signed-off-by: Walfred Tedeschi <walfred.tedeschi@intel.com>
This commit is contained in:
parent
ed54588daf
commit
f92b06daf9
5 changed files with 104 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
2013-03-27 Walfred Tedeschi <walfred.tedeschi@intel.com>
|
||||
|
||||
* target-descriptions.c (maint_print_c_tdesc_cmd):
|
||||
Add case to parse structures as register types and
|
||||
bitfields.
|
||||
|
||||
2013-04-30 Walfred Tedeschi <walfred.tedeschi@intel.com>
|
||||
|
||||
* MAINTAINERS (Write After Approval): Add myself to the list.
|
||||
|
|
|
@ -1675,7 +1675,8 @@ maint_print_c_tdesc_cmd (char *args, int from_tty)
|
|||
printed_field_type = 1;
|
||||
}
|
||||
|
||||
if (type->kind == TDESC_TYPE_UNION
|
||||
if ((type->kind == TDESC_TYPE_UNION
|
||||
|| type->kind == TDESC_TYPE_STRUCT)
|
||||
&& VEC_length (tdesc_type_field, type->u.u.fields) > 0)
|
||||
{
|
||||
printf_unfiltered (" struct tdesc_type *type;\n");
|
||||
|
@ -1746,6 +1747,36 @@ feature = tdesc_create_feature (result, \"%s\");\n",
|
|||
(" tdesc_create_vector (feature, \"%s\", field_type, %d);\n",
|
||||
type->name, type->u.v.count);
|
||||
break;
|
||||
case TDESC_TYPE_STRUCT:
|
||||
printf_unfiltered
|
||||
(" type = tdesc_create_struct (feature, \"%s\");\n",
|
||||
type->name);
|
||||
if (type->u.u.size != 0)
|
||||
printf_unfiltered
|
||||
(" tdesc_set_struct_size (type, %s);\n",
|
||||
plongest (type->u.u.size));
|
||||
for (ix3 = 0;
|
||||
VEC_iterate (tdesc_type_field, type->u.u.fields, ix3, f);
|
||||
ix3++)
|
||||
{
|
||||
/* Going first for implicitly sized types, else part handles
|
||||
bitfields. As reported on xml-tdesc.c implicitly sized types
|
||||
cannot contain a bitfield. */
|
||||
if (f->start == 0 && f->end == 0)
|
||||
{
|
||||
printf_unfiltered
|
||||
(" field_type = tdesc_named_type (feature, \"%s\");\n",
|
||||
f->type->name);
|
||||
printf_unfiltered
|
||||
(" tdesc_add_field (type, \"%s\", field_type);\n",
|
||||
f->name);
|
||||
}
|
||||
else
|
||||
printf_unfiltered
|
||||
(" tdesc_add_bitfield (type, \"%s\", %d, %d);\n",
|
||||
f->name, f->start, f->end);
|
||||
}
|
||||
break;
|
||||
case TDESC_TYPE_UNION:
|
||||
printf_unfiltered
|
||||
(" type = tdesc_create_union (feature, \"%s\");\n",
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2013-03-27 Walfred Tedeschi <walfred.tedeschi@intel.com>
|
||||
|
||||
* gdb.xml/maint_print_struct.exp: New file.
|
||||
* gdb.xml/maint_print_struct.xml: New file.
|
||||
|
||||
2013-04-25 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* gdb.dwarf2/nostaticblock.exp: New file.
|
||||
|
|
35
gdb/testsuite/gdb.xml/maint_print_struct.exp
Normal file
35
gdb/testsuite/gdb.xml/maint_print_struct.exp
Normal file
|
@ -0,0 +1,35 @@
|
|||
# This testcase is part of GDB, the GNU debugger.
|
||||
#
|
||||
# Copyright 2013 Free Software Foundation, Inc.
|
||||
#
|
||||
# Contributed by Intel Corp. <walfred.tedeschi@intel.com>
|
||||
#
|
||||
# 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 3 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, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
if {[gdb_skip_xml_test]} {
|
||||
unsupported "maint_print_struct.exp"
|
||||
return -1
|
||||
}
|
||||
|
||||
gdb_start
|
||||
|
||||
# Required registers are not present so it is expected a warning.
|
||||
#
|
||||
gdb_test "set tdesc filename $srcdir/$subdir/maint_print_struct.xml" "
|
||||
warning:.*" "setting a new tdesc having only a structure"
|
||||
|
||||
gdb_test "maint print c-tdesc" "
|
||||
.*tdesc_create_reg \\(feature, \"bad_reg1\", \[0-9\]+, 1, NULL, 128, \"two_fielded\"\\);\r
|
||||
.*tdesc_create_reg \\(feature, \"bad_reg2\", \[0-9\]+, 1, NULL, 64, \"bitfield\"\\);\r
|
||||
.*" "printing tdesc with a structure and a bitfield"
|
26
gdb/testsuite/gdb.xml/maint_print_struct.xml
Normal file
26
gdb/testsuite/gdb.xml/maint_print_struct.xml
Normal file
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0"?>
|
||||
<!-- Copyright (C) 2010-2013 Free Software Foundation, Inc.
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
notice and this notice are preserved. -->
|
||||
|
||||
<!DOCTYPE feature SYSTEM "gdb-target.dtd">
|
||||
<target>
|
||||
<feature name="test">
|
||||
|
||||
<struct id="two_fielded">
|
||||
<field name="field1" type="data_ptr"/>
|
||||
<field name="field2" type="data_ptr"/>
|
||||
</struct>
|
||||
|
||||
<struct id="bitfield" size="8">
|
||||
<field name="field1" start="24" end="63"/>
|
||||
<field name="field2" start="16" end="24"/>
|
||||
</struct>
|
||||
|
||||
<reg name="bad_reg1" bitsize="128" type="two_fielded"/>
|
||||
<reg name="bad_reg2" bitsize="64" type="bitfield"/>
|
||||
</feature>
|
||||
</target>
|
||||
|
Loading…
Reference in a new issue