From 9018be22e022e6db2ba07c4e407c7244022bc69a Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Sat, 7 Apr 2018 13:19:12 -0400 Subject: Make target_read_alloc & al return vectors This patch started by changing target_read_alloc_1 to return a byte_vector, to avoid manual memory management (in target_read_alloc_1 and in the callers). To communicate failures to the callers, it actually returns a gdb::optional. Adjusting target_read_stralloc was a bit more tricky, since it wants to return a buffer of char, and not gdb_byte. Since you can't just cast a gdb::byte_vector into a gdb::def_vector, I made target_read_alloc_1 templated, so both versions (that return vectors of gdb_byte and char) are generated. Since target_read_stralloc now returns a gdb::char_vector instead of a gdb::unique_xmalloc_ptr, a few callers need to be adjusted. gdb/ChangeLog: * common/byte-vector.h (char_vector): New type. * target.h (target_read_alloc): Return gdb::optional. (target_read_stralloc): Return gdb::optional. (target_get_osdata): Return gdb::optional. * target.c (target_read_alloc_1): Templatize. Replacement manual memory management with vector. (target_read_alloc): Change return type, adjust. (target_read_stralloc): Change return type, adjust. (target_get_osdata): Change return type, adjust. * auxv.c (struct auxv_info) : Remove. : Change type to gdb::optional. (auxv_inferior_data_cleanup): Free auxv_info with delete. (get_auxv_inferior_data): Allocate auxv_info with new, adjust. (target_auxv_search): Adjust. (fprint_target_auxv): Adjust. * avr-tdep.c (avr_io_reg_read_command): Adjust. * linux-tdep.c (linux_spu_make_corefile_notes): Adjust. (linux_make_corefile_notes): Adjust. * osdata.c (get_osdata): Adjust. * remote.c (remote_get_threads_with_qxfer): Adjust. (remote_memory_map): Adjust. (remote_traceframe_info): Adjust. (btrace_read_config): Adjust. (remote_read_btrace): Adjust. (remote_pid_to_exec_file): Adjust. * solib-aix.c (solib_aix_get_library_list): Adjust. * solib-dsbt.c (decode_loadmap): Don't free buf. (dsbt_get_initial_loadmaps): Adjust. * solib-svr4.c (svr4_current_sos_via_xfer_libraries): Adjust. * solib-target.c (solib_target_current_sos): Adjust. * tracepoint.c (sdata_make_value): Adjust. * xml-support.c (xinclude_start_include): Adjust. (xml_fetch_content_from_file): Adjust. * xml-support.h (xml_fetch_another): Change return type. (xml_fetch_content_from_file): Change return type. * xml-syscall.c (xml_init_syscalls_info): Adjust. * xml-tdesc.c (file_read_description_xml): Adjust. (fetch_available_features_from_target): Change return type. (target_fetch_description_xml): Adjust. (target_read_description_xml): Adjust. --- gdb/xml-tdesc.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'gdb/xml-tdesc.c') diff --git a/gdb/xml-tdesc.c b/gdb/xml-tdesc.c index 9190d5f..1c3409d 100644 --- a/gdb/xml-tdesc.c +++ b/gdb/xml-tdesc.c @@ -668,15 +668,15 @@ tdesc_parse_xml (const char *document, xml_fetch_another fetcher, const struct target_desc * file_read_description_xml (const char *filename) { - gdb::unique_xmalloc_ptr tdesc_str + gdb::optional tdesc_str = xml_fetch_content_from_file (filename, NULL); - if (tdesc_str == NULL) + if (!tdesc_str) { warning (_("Could not open \"%s\""), filename); return NULL; } - return tdesc_parse_xml (tdesc_str.get (), xml_fetch_content_from_file, + return tdesc_parse_xml (tdesc_str->data (), xml_fetch_content_from_file, (void *) ldirname (filename).c_str ()); } @@ -687,7 +687,7 @@ file_read_description_xml (const char *filename) is "target.xml". Other calls may be performed for the DTD or for . */ -static gdb::unique_xmalloc_ptr +static gdb::optional fetch_available_features_from_target (const char *name, void *baton_) { struct target_ops *ops = (struct target_ops *) baton_; @@ -706,12 +706,12 @@ fetch_available_features_from_target (const char *name, void *baton_) const struct target_desc * target_read_description_xml (struct target_ops *ops) { - gdb::unique_xmalloc_ptr tdesc_str + gdb::optional tdesc_str = fetch_available_features_from_target ("target.xml", ops); - if (tdesc_str == NULL) + if (!tdesc_str) return NULL; - return tdesc_parse_xml (tdesc_str.get (), + return tdesc_parse_xml (tdesc_str->data (), fetch_available_features_from_target, ops); } @@ -735,15 +735,15 @@ target_fetch_description_xml (struct target_ops *ops) return {}; #else - gdb::unique_xmalloc_ptr + gdb::optional tdesc_str = fetch_available_features_from_target ("target.xml", ops); - if (tdesc_str == NULL) + if (!tdesc_str) return {}; std::string output; if (!xml_process_xincludes (output, _("target description"), - tdesc_str.get (), + tdesc_str->data (), fetch_available_features_from_target, ops, 0)) { warning (_("Could not load XML target description; ignoring")); -- cgit v1.1