aboutsummaryrefslogtreecommitdiff
path: root/gdb/xml-tdesc.c
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@polymtl.ca>2020-09-14 11:12:55 -0400
committerSimon Marchi <simon.marchi@efficios.com>2020-09-14 11:30:58 -0400
commit8400a90d19c5c53f7100421c688fb896789048b9 (patch)
treedbf3aff829ab551c14a040ac7717e187d7417300 /gdb/xml-tdesc.c
parentb1766e7ce88647c8002928aeb8a9f04048c494ae (diff)
downloadgdb-8400a90d19c5c53f7100421c688fb896789048b9.zip
gdb-8400a90d19c5c53f7100421c688fb896789048b9.tar.gz
gdb-8400a90d19c5c53f7100421c688fb896789048b9.tar.bz2
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) <xinclude_parsing_data>: Remove baton parameter. <fetcher_baton>: 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
Diffstat (limited to 'gdb/xml-tdesc.c')
-rw-r--r--gdb/xml-tdesc.c38
1 files changed, 23 insertions, 15 deletions
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 <xi:include>. */
static gdb::optional<gdb::char_vector>
-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<gdb::char_vector> ();
- }, nullptr);
+ });
}