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<gdb::byte_vector>. 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<char>, 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<char>, 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<byte_vector>. (target_read_stralloc): Return gdb::optional<char_vector>. (target_get_osdata): Return gdb::optional<char_vector>. * 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) <length>: Remove. <data>: Change type to gdb::optional<byte_vector>. (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.
This commit is contained in:
parent
43193fe9fc
commit
9018be22e0
18 changed files with 224 additions and 225 deletions
32
gdb/remote.c
32
gdb/remote.c
|
@ -3151,13 +3151,13 @@ remote_get_threads_with_qxfer (struct target_ops *ops,
|
|||
#if defined(HAVE_LIBEXPAT)
|
||||
if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
|
||||
{
|
||||
gdb::unique_xmalloc_ptr<char> xml
|
||||
gdb::optional<gdb::char_vector> xml
|
||||
= target_read_stralloc (ops, TARGET_OBJECT_THREADS, NULL);
|
||||
|
||||
if (xml != NULL && *xml != '\0')
|
||||
if (xml && (*xml)[0] != '\0')
|
||||
{
|
||||
gdb_xml_parse_quick (_("threads"), "threads.dtd",
|
||||
threads_elements, xml.get (), context);
|
||||
threads_elements, xml->data (), context);
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
@ -10790,11 +10790,11 @@ static std::vector<mem_region>
|
|||
remote_memory_map (struct target_ops *ops)
|
||||
{
|
||||
std::vector<mem_region> result;
|
||||
gdb::unique_xmalloc_ptr<char> text
|
||||
gdb::optional<gdb::char_vector> text
|
||||
= target_read_stralloc (¤t_target, TARGET_OBJECT_MEMORY_MAP, NULL);
|
||||
|
||||
if (text)
|
||||
result = parse_memory_map (text.get ());
|
||||
result = parse_memory_map (text->data ());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -12905,11 +12905,11 @@ remote_set_circular_trace_buffer (struct target_ops *self, int val)
|
|||
static traceframe_info_up
|
||||
remote_traceframe_info (struct target_ops *self)
|
||||
{
|
||||
gdb::unique_xmalloc_ptr<char> text
|
||||
gdb::optional<gdb::char_vector> text
|
||||
= target_read_stralloc (¤t_target, TARGET_OBJECT_TRACEFRAME_INFO,
|
||||
NULL);
|
||||
if (text != NULL)
|
||||
return parse_traceframe_info (text.get ());
|
||||
if (text)
|
||||
return parse_traceframe_info (text->data ());
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
@ -13137,10 +13137,10 @@ btrace_sync_conf (const struct btrace_config *conf)
|
|||
static void
|
||||
btrace_read_config (struct btrace_config *conf)
|
||||
{
|
||||
gdb::unique_xmalloc_ptr<char> xml
|
||||
gdb::optional<gdb::char_vector> xml
|
||||
= target_read_stralloc (¤t_target, TARGET_OBJECT_BTRACE_CONF, "");
|
||||
if (xml != NULL)
|
||||
parse_xml_btrace_conf (conf, xml.get ());
|
||||
if (xml)
|
||||
parse_xml_btrace_conf (conf, xml->data ());
|
||||
}
|
||||
|
||||
/* Maybe reopen target btrace. */
|
||||
|
@ -13337,12 +13337,12 @@ remote_read_btrace (struct target_ops *self,
|
|||
(unsigned int) type);
|
||||
}
|
||||
|
||||
gdb::unique_xmalloc_ptr<char> xml
|
||||
gdb::optional<gdb::char_vector> xml
|
||||
= target_read_stralloc (¤t_target, TARGET_OBJECT_BTRACE, annex);
|
||||
if (xml == NULL)
|
||||
if (!xml)
|
||||
return BTRACE_ERR_UNKNOWN;
|
||||
|
||||
parse_xml_btrace (btrace, xml.get ());
|
||||
parse_xml_btrace (btrace, xml->data ());
|
||||
|
||||
return BTRACE_ERR_NONE;
|
||||
}
|
||||
|
@ -13376,7 +13376,7 @@ remote_load (struct target_ops *self, const char *name, int from_tty)
|
|||
static char *
|
||||
remote_pid_to_exec_file (struct target_ops *self, int pid)
|
||||
{
|
||||
static gdb::unique_xmalloc_ptr<char> filename;
|
||||
static gdb::optional<gdb::char_vector> filename;
|
||||
struct inferior *inf;
|
||||
char *annex = NULL;
|
||||
|
||||
|
@ -13399,7 +13399,7 @@ remote_pid_to_exec_file (struct target_ops *self, int pid)
|
|||
filename = target_read_stralloc (¤t_target,
|
||||
TARGET_OBJECT_EXEC_FILE, annex);
|
||||
|
||||
return filename.get ();
|
||||
return filename ? filename->data () : nullptr;
|
||||
}
|
||||
|
||||
/* Implement the to_can_do_single_step target_ops method. */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue