Browse Source

gdbsupport/tdesc: print enum fields using 'evalue' syntax

Currently when printing an XML description GDB prints enum values like
this:

  <enum id="levels_type" size="4">
    <field name="low" start="0"/>
    <field name="high" start="1"/>
  </enum>

This is incorrect, and is most likely a copy and paste error with the
struct and flags printing code.  The correct syntax is:

  <enum id="levels_type" size="4">
    <evalue name="low" value="0"/>
    <evalue name="high" value="1"/>
  </enum>

A test is included to cover this functionality.

gdb/testsuite/ChangeLog:

	* gdb.xml/maint-xml-dump-03.xml: New file.

gdbsupport/ChangeLog:

	* tdesc.cc (print_xml_feature::visit): Print enum fields using
	'evalue' syntax.
binutils-2_36-branch
Andrew Burgess 5 years ago
parent
commit
54e75f291e
  1. 4
      gdb/testsuite/ChangeLog
  2. 13
      gdb/testsuite/gdb.xml/maint-xml-dump-03.xml
  3. 5
      gdbsupport/ChangeLog
  4. 4
      gdbsupport/tdesc.cc

4
gdb/testsuite/ChangeLog

@ -1,3 +1,7 @@
2020-12-01 Andrew Burgess <andrew.burgess@embecosm.com>
* gdb.xml/maint-xml-dump-03.xml: New file.
2020-11-30 Tom de Vries <tdevries@suse.de>
PR symtab/26905

13
gdb/testsuite/gdb.xml/maint-xml-dump-03.xml

@ -0,0 +1,13 @@
<target>
<feature name="abc">
<enum id="levels_type" size="4">
<evalue name="low" value="0"/>
<evalue name="high" value="1"/>
</enum>
<flags id="flags_type" size="4">
<field name="X" start="0" end="0" type="bool"/>
<field name="LEVEL" start="1" end="1" type="levels_type"/>
</flags>
<reg name="flags" bitsize="32" type="flags_type" regnum="0"/>
</feature>
</target>

5
gdbsupport/ChangeLog

@ -1,3 +1,8 @@
2020-12-01 Andrew Burgess <andrew.burgess@embecosm.com>
* tdesc.cc (print_xml_feature::visit): Print enum fields using
'evalue' syntax.
2020-12-01 Chungyi Chi <demonic@csie.io>
* tdesc.cc (print_xml_feature::visit): Print enum size attribute.

4
gdbsupport/tdesc.cc

@ -355,8 +355,10 @@ void print_xml_feature::visit (const tdesc_type_with_fields *t)
string_appendf (tmp, " size=\"%d\"", t->size);
string_appendf (tmp, ">");
add_line (tmp);
/* The 'start' of the field is reused as the enum value. The 'end'
of the field is always set to -1 for enum values. */
for (const tdesc_type_field &f : t->fields)
add_line (" <field name=\"%s\" start=\"%d\"/>",
add_line (" <evalue name=\"%s\" value=\"%d\"/>",
f.name.c_str (), f.start);
break;

Loading…
Cancel
Save