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.
This commit is contained in:
Andrew Burgess
2020-12-01 11:07:12 +00:00
parent 4f36e61b2d
commit 54e75f291e
4 changed files with 25 additions and 1 deletions

View File

@@ -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;