* Makefile.in (XMLFILES): New.

(COMMON_OBS): Add xml-builtin.o.
	(xml-builtin.c, stamp-xml): New rules.
	(xml-tdesc.o): Update.
	* features/feature_to_c.sh: New file.
	* xml-support.c (MAX_XINCLUDE_DEPTH): Define.
	(struct gdb_xml_parser): Add dtd_name and is_xinclude.
	(gdb_xml_start_element): Initialize scope after possibly reallocating
	scopes.  Move cleanup later.  Handle the XInclude description
	specially.
	(gdb_xml_end_element): Only parse the body if there is a current element.
	Call XML_DefaultCurrent if there is no element.
	(gdb_xml_fetch_external_entity, gdb_xml_use_dtd): New.
	(struct xinclude_parsing_data, xinclude_start_include)
	(xinclude_end_include, xml_xinclude_default)
	(xml_xinclude_start_doctype, xml_xinclude_end_doctype)
	(xml_xinclude_xml_decl, xml_xinclude_cleanup, xinclude_attributes)
	(xinclude_elements, xml_process_xincludes, fetch_xml_builtin): New.
	* xml-support.h (xml_fetch_another, xml_process_xincludes)
	(fetch_xml_builtin, xml_builtin, gdb_xml_use_dtd): New declarations.
	* xml-tdesc.c (tdesc_parse_xml): Add fetcher_baton argument.  Expand
	XInclude directives.  Use the compiled in DTD.
	(fetch_xml_from_file): Add baton argument.  Treat it as a containing
	directory name.  Do not warn here.
	(file_read_description_xml): Update call.  Warn here instead.  Pass
	a dirname as baton.
	(fetch_available_features_from_target): New.
	(target_read_description_xml): Use it.
	* features/gdb-target.dtd: Add copyright notice.  Use xinclude.dtd
	to handle XInclude.
	* features/xinclude.dtd: New file.

	* gdb.xml/bad-include.xml, gdb.xml/inc-2.xml, gdb.xml/inc-body.xml,
	gdb.xml/includes.xml, gdb.xml/tdesc-xinclude.exp: New files.

	* gdb.texinfo (Target Description Format): Add section on XInclude.
This commit is contained in:
Daniel Jacobowitz
2007-02-07 22:48:06 +00:00
parent 7bd1c9613d
commit 108546a0ea
17 changed files with 721 additions and 47 deletions

View File

@ -30,6 +30,35 @@ struct gdb_xml_parser;
struct gdb_xml_element;
struct gdb_xml_attribute;
/* Support for XInclude. */
/* Callback to fetch a new XML file, based on the provided HREF. */
typedef char *(*xml_fetch_another) (const char *href, void *baton);
/* Return a new string which is the expansion of TEXT after processing
<xi:include> tags. FETCHER will be called (with FETCHER_BATON) to
retrieve any new files. DEPTH should be zero on the initial call.
On failure, this function uses NAME in a warning and returns NULL.
It may throw an exception, but does not for XML parsing
problems. */
char *xml_process_xincludes (const char *name, const char *text,
xml_fetch_another fetcher, void *fetcher_baton,
int depth);
/* Return an XML document which was compiled into GDB, from
the given FILENAME, or NULL if the file was not compiled in. */
const char *fetch_xml_builtin (const char *filename);
/* The text of compiled-in XML documents, from xml-builtin.c
(generated). */
extern const char *xml_builtin[][2];
/* Simplified XML parser infrastructure. */
/* A name and value pair, used to record parsed attributes. */
struct gdb_xml_value
@ -140,6 +169,11 @@ struct gdb_xml_parser *gdb_xml_create_parser_and_cleanup
(const char *name, const struct gdb_xml_element *elements,
void *user_data);
/* Associate DTD_NAME, which must be the name of a compiled-in DTD,
with PARSER. */
void gdb_xml_use_dtd (struct gdb_xml_parser *parser, const char *dtd_name);
/* Invoke PARSER on BUFFER. BUFFER is the data to parse, which
should be NUL-terminated.