From: Tankut Baris Aktemur Date: Wed, 29 Jan 2025 09:50:30 +0000 (+0100) Subject: gdbserver: convert free_register_cache into a destructor of regcache X-Git-Tag: binutils-2_45~1810 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=207bcb60ddeccc2c15a9ae91952e191ba7795fbc;p=thirdparty%2Fbinutils-gdb.git gdbserver: convert free_register_cache into a destructor of regcache Convert the `free_register_cache` function into a destructor of the regcache struct. In one place, we completely remove the call to free the regcache object by stack-allocating the object. Approved-By: Simon Marchi --- diff --git a/gdbserver/gdbthread.h b/gdbserver/gdbthread.h index d7b5bc3e153..d3459582a1f 100644 --- a/gdbserver/gdbthread.h +++ b/gdbserver/gdbthread.h @@ -33,7 +33,7 @@ struct thread_info : public intrusive_list_node ~thread_info () { - free_register_cache (m_regcache); + delete m_regcache; } /* Return the process owning this thread. */ diff --git a/gdbserver/regcache.cc b/gdbserver/regcache.cc index 557e38572a8..0b451acc0f0 100644 --- a/gdbserver/regcache.cc +++ b/gdbserver/regcache.cc @@ -137,16 +137,11 @@ regcache::regcache (const target_desc *tdesc) tdesc->reg_defs.size ()); } -void -free_register_cache (struct regcache *regcache) +regcache::~regcache () { - if (regcache) - { - if (regcache->registers_owned) - free (regcache->registers); - free (regcache->register_status); - delete regcache; - } + if (registers_owned) + free (registers); + free (register_status); } #endif @@ -241,7 +236,7 @@ free_register_cache_thread (thread_info *thread) if (regcache != NULL) { regcache_invalidate_thread (thread); - free_register_cache (regcache); + delete regcache; thread->set_regcache (nullptr); } } diff --git a/gdbserver/regcache.h b/gdbserver/regcache.h index 2fab5d01fc4..1a252d40255 100644 --- a/gdbserver/regcache.h +++ b/gdbserver/regcache.h @@ -50,6 +50,9 @@ struct regcache : public reg_buffer_common The regcache dynamically allocates its register buffer. */ regcache (const target_desc *tdesc); + + /* Destructor. */ + ~regcache (); #endif /* Construct a regcache using the register layout described by TDESC @@ -87,10 +90,6 @@ struct regcache : public reg_buffer_common regcache *get_thread_regcache (thread_info *thread, bool fetch = true); -/* Release all memory associated with the register cache for INFERIOR. */ - -void free_register_cache (struct regcache *regcache); - /* Invalidate cached registers for one thread. */ void regcache_invalidate_thread (thread_info *); diff --git a/gdbserver/server.cc b/gdbserver/server.cc index 779af6d4e11..fb1a3f8b415 100644 --- a/gdbserver/server.cc +++ b/gdbserver/server.cc @@ -4677,15 +4677,13 @@ process_serial_event (void) require_running_or_break (cs.own_buf); if (cs.current_traceframe >= 0) { - struct regcache *regcache - = new struct regcache (current_target_desc ()); + regcache a_regcache (current_target_desc ()); if (fetch_traceframe_registers (cs.current_traceframe, - regcache, -1) == 0) - registers_to_string (regcache, cs.own_buf); + &a_regcache, -1) == 0) + registers_to_string (&a_regcache, cs.own_buf); else write_enn (cs.own_buf); - free_register_cache (regcache); } else {