From 8400a90d19c5c53f7100421c688fb896789048b9 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Mon, 14 Sep 2020 11:12:55 -0400 Subject: gdb: change xml_fetch_another a function_view The xml_fetch_another is currently a plain function pointer type, with a `void *` baton parameter. To improve type-safety, change this to a function_view. Any required data is captured by a lambda at the call site. gdb/ChangeLog: * xml-support.h (xml_fetch_another): Change type to be a function_view. (xml_process_xincludes): Remove baton parameter. (xml_fetch_content_from_file): Change baton parameter to dirname. * xml-support.c (struct xinclude_parsing_data) : Remove baton parameter. : Remove. (xinclude_start_include): Adjust. (xml_process_xincludes): Adjust. (xml_fetch_content_from_file): Replace baton parameter with dirname. * xml-syscall.c (syscall_parse_xml): Remove baton parameter. (xml_init_syscalls_info): Use a lambda. * xml-tdesc.c (tdesc_parse_xml): Remove baton parameter. (file_read_description_xml): Use a lambda. (fetch_available_features_from_target): Change baton parameter to target_ops. (target_read_description_xml): Use a lambda. (target_fetch_description_xml): Use a lambda. (string_read_description_xml): Update. Change-Id: I7ba4b8f5e97fc6a952c6c20ccc3be92a06cc2bd2 --- gdb/xml-tdesc.c | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) (limited to 'gdb/xml-tdesc.c') diff --git a/gdb/xml-tdesc.c b/gdb/xml-tdesc.c index 6f108a4..6e21ff4 100644 --- a/gdb/xml-tdesc.c +++ b/gdb/xml-tdesc.c @@ -617,8 +617,7 @@ static const struct gdb_xml_element tdesc_elements[] = { /* Parse DOCUMENT into a target description and return it. */ static struct target_desc * -tdesc_parse_xml (const char *document, xml_fetch_another fetcher, - void *fetcher_baton) +tdesc_parse_xml (const char *document, xml_fetch_another fetcher) { struct tdesc_parsing_data data; @@ -627,7 +626,7 @@ tdesc_parse_xml (const char *document, xml_fetch_another fetcher, if (!xml_process_xincludes (expanded_text, _("target description"), - document, fetcher, fetcher_baton, 0)) + document, fetcher, 0)) { warning (_("Could not load XML target description; ignoring")); return NULL; @@ -673,8 +672,13 @@ file_read_description_xml (const char *filename) return NULL; } - return tdesc_parse_xml (tdesc_str->data (), xml_fetch_content_from_file, - (void *) ldirname (filename).c_str ()); + const std::string dirname = ldirname (filename); + auto fetch_another = [&dirname] (const char *name) + { + return xml_fetch_content_from_file (name, dirname.c_str ()); + }; + + return tdesc_parse_xml (tdesc_str->data (), fetch_another); } /* Read a string representation of available features from the target, @@ -685,10 +689,8 @@ file_read_description_xml (const char *filename) for . */ static gdb::optional -fetch_available_features_from_target (const char *name, void *baton_) +fetch_available_features_from_target (const char *name, target_ops *ops) { - struct target_ops *ops = (struct target_ops *) baton_; - /* Read this object as a string. This ensures that a NUL terminator is added. */ return target_read_stralloc (ops, @@ -708,9 +710,12 @@ target_read_description_xml (struct target_ops *ops) if (!tdesc_str) return NULL; - return tdesc_parse_xml (tdesc_str->data (), - fetch_available_features_from_target, - ops); + auto fetch_another = [ops] (const char *name) + { + return fetch_available_features_from_target (name, ops); + }; + + return tdesc_parse_xml (tdesc_str->data (), fetch_another); } /* Fetches an XML target description using OPS, processing @@ -737,11 +742,14 @@ target_fetch_description_xml (struct target_ops *ops) if (!tdesc_str) return {}; + auto fetch_another = [ops] (const char *name) + { + return fetch_available_features_from_target (name, ops); + }; std::string output; if (!xml_process_xincludes (output, _("target description"), - tdesc_str->data (), - fetch_available_features_from_target, ops, 0)) + tdesc_str->data (), fetch_another, 0)) { warning (_("Could not load XML target description; ignoring")); return {}; @@ -755,9 +763,9 @@ target_fetch_description_xml (struct target_ops *ops) const struct target_desc * string_read_description_xml (const char *xml) { - return tdesc_parse_xml (xml, [] (const char *href, void *baton) + return tdesc_parse_xml (xml, [] (const char *href) { error (_("xincludes are unsupported with this method")); return gdb::optional (); - }, nullptr); + }); } -- cgit v1.1