gdbserver: make arch and osabi names gdb::unique_xmalloc_ptr<char>

Convert target_desc::arch and target_desc::osabi from 'const char*' to
gdb::unique_xmalloc_ptr<char>.  This also allows us to remove the user
defined ~target_desc destructor.

I doubt it ever actually occurred, but in theory at least, there was a
memory leak in set_tdesc_architecture and set_tdesc_osabi where the
member variables were assigned without freeing any previous
value... but I suspect that usually these fields are only set once.

There should be no user visible changes after this commit.

Approved-By: Tom Tromey <tom@tromey.com>
Approved-By: Simon Marchi <simon.marchi@efficios.com>
This commit is contained in:
Andrew Burgess
2024-10-04 18:45:04 +01:00
parent f04b2702fa
commit 9c13221eaf
2 changed files with 7 additions and 15 deletions

View File

@@ -20,12 +20,6 @@
#ifndef IN_PROCESS_AGENT #ifndef IN_PROCESS_AGENT
target_desc::~target_desc ()
{
xfree ((char *) arch);
xfree ((char *) osabi);
}
bool target_desc::operator== (const target_desc &other) const bool target_desc::operator== (const target_desc &other) const
{ {
if (reg_defs != other.reg_defs) if (reg_defs != other.reg_defs)
@@ -162,7 +156,7 @@ tdesc_compatible_info_arch_name (const tdesc_compatible_info_up &c_info)
const char * const char *
tdesc_architecture_name (const struct target_desc *target_desc) tdesc_architecture_name (const struct target_desc *target_desc)
{ {
return target_desc->arch; return target_desc->arch.get ();
} }
/* See gdbsupport/tdesc.h. */ /* See gdbsupport/tdesc.h. */
@@ -171,7 +165,7 @@ void
set_tdesc_architecture (struct target_desc *target_desc, set_tdesc_architecture (struct target_desc *target_desc,
const char *name) const char *name)
{ {
target_desc->arch = xstrdup (name); target_desc->arch = make_unique_xstrdup (name);
} }
/* See gdbsupport/tdesc.h. */ /* See gdbsupport/tdesc.h. */
@@ -179,7 +173,7 @@ set_tdesc_architecture (struct target_desc *target_desc,
const char * const char *
tdesc_osabi_name (const struct target_desc *target_desc) tdesc_osabi_name (const struct target_desc *target_desc)
{ {
return target_desc->osabi; return target_desc->osabi.get ();
} }
/* See gdbsupport/tdesc.h. */ /* See gdbsupport/tdesc.h. */
@@ -187,7 +181,7 @@ tdesc_osabi_name (const struct target_desc *target_desc)
void void
set_tdesc_osabi (struct target_desc *target_desc, const char *name) set_tdesc_osabi (struct target_desc *target_desc, const char *name)
{ {
target_desc->osabi = xstrdup (name); target_desc->osabi = make_unique_xstrdup (name);
} }
/* See gdbsupport/tdesc.h. */ /* See gdbsupport/tdesc.h. */
@@ -198,7 +192,7 @@ tdesc_get_features_xml (const target_desc *tdesc)
/* Either .xmltarget or .features is not NULL. */ /* Either .xmltarget or .features is not NULL. */
gdb_assert (tdesc->xmltarget != NULL gdb_assert (tdesc->xmltarget != NULL
|| (!tdesc->features.empty () || (!tdesc->features.empty ()
&& tdesc->arch != NULL)); && tdesc_architecture_name (tdesc) != nullptr));
if (tdesc->xmltarget == NULL) if (tdesc->xmltarget == NULL)
{ {

View File

@@ -54,18 +54,16 @@ struct target_desc final : tdesc_element
mutable const char *xmltarget = NULL; mutable const char *xmltarget = NULL;
/* The value of <architecture> element in the XML, replying GDB. */ /* The value of <architecture> element in the XML, replying GDB. */
const char *arch = NULL; gdb::unique_xmalloc_ptr<char> arch;
/* The value of <osabi> element in the XML, replying GDB. */ /* The value of <osabi> element in the XML, replying GDB. */
const char *osabi = NULL; gdb::unique_xmalloc_ptr<char> osabi;
public: public:
target_desc () target_desc ()
: registers_size (0) : registers_size (0)
{} {}
~target_desc ();
bool operator== (const target_desc &other) const; bool operator== (const target_desc &other) const;
bool operator!= (const target_desc &other) const bool operator!= (const target_desc &other) const