Files
binutils-gdb/gdb/xml-tdesc.h
Alan Hayward 124b7afa5d Create xml from target descriptions
This patch adds a print_xml_feature visitor class which turns a C
target description into xml. Both gdb and gdbserver can do this.

An accept function is added to gdbserver tdesc to allow it to use
vistor classes.

Tests are added to maintenance_check_xml_descriptions which takes
each pair of tested descriptions, turns them both into xml, then back
again, and confirms the descriptions still match.

Differences from V3 are:

I now use string_appendf to print to the buffer.

regdat.sh ensures tdesc->xmltarget is null for all targets with new
style target descriptions. tdesc_get_features_xml() will only generate
xml if xmltarget is null. This ensures older targets continue to send
just the name of the xml file.

Added a save_restore check when parsing registers.

Alan.

2018-03-21  Alan Hayward  <alan.hayward@arm.com>

gdb/
	* common/tdesc.c (print_xml_feature::visit_post): Add xml parsing.
	(print_xml_feature::visit_pre): Likewise.
	(print_xml_feature::visit_post): Likewise.
	(print_xml_feature::visit): Likewise.
	(print_xml_feature::visit): Likewise.
	(print_xml_feature::visit): Likewise.
	(print_xml_feature::visit): Likewise.
	* common/tdesc.h (print_xml_feature): Add new class.
	* regformats/regdat.sh: Null xmltarget on feature targets.
	* target-descriptions.c (struct target_desc): Add xmltarget.
	(print_xml_feature::visit_pre): Add xml vistor.
	(tdesc_get_features_xml): Add function to get xml.
	(maintenance_check_xml_descriptions): Test xml generation.
	* xml-tdesc.c (target_read_description_xml_string): Add function.
	* xml-tdesc.h (target_read_description_xml_string): Add declaration.

gdbserver/
	* tdesc.c (void target_desc::accept): Fill in function.
	(tdesc_get_features_xml): Remove old xml creation.
	(print_xml_feature::visit_pre): Add xml vistor.
2018-03-21 15:57:13 +00:00

54 lines
1.8 KiB
C++

/* XML target description support for GDB.
Copyright (C) 2006-2018 Free Software Foundation, Inc.
Contributed by CodeSourcery.
This file is part of GDB.
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/>. */
#ifndef XML_TDESC_H
#define XML_TDESC_H
#include "common/gdb_optional.h"
#include <string>
struct target_ops;
struct target_desc;
/* Read an XML target description from FILENAME. Parse it, and return
the parsed description. */
const struct target_desc *file_read_description_xml (const char *filename);
/* Read an XML target description using OPS. Parse it, and return the
parsed description. */
const struct target_desc *target_read_description_xml (struct target_ops *);
/* Fetches an XML target description using OPS, processing includes,
but not parsing it. Used to dump whole tdesc as a single XML file.
Returns the description on success, and a disengaged optional
otherwise. */
gdb::optional<std::string> target_fetch_description_xml (target_ops *ops);
/* Take an xml string, parse it, and return the parsed description. Does not
handle a string containing includes. */
const struct target_desc *target_read_description_xml_string (const char *);
#endif /* XML_TDESC_H */