[PATCH 09/26] gdbserver: extract out regcache::invalidate and regcache::discard

Tankut Baris Aktemur via Gdb-patches
2023-02-28T11:31:01Z

Extract out a piece of code from the `regcache_invalidate_thread`
function and turn into a new method of regcache named 'invalidate'.

We also introduce a small method named 'discard' to give the clients
an option to discard the cache without storing the contents. This
method is utilized in a downstream debugger.
---
gdbserver/regcache.cc | 24 +++++++++++++++++-------
gdbserver/regcache.h | 6 ++++++
2 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/gdbserver/regcache.cc b/gdbserver/regcache.cc
index 7b6337166ad..1db78951cc2 100644
--- a/gdbserver/regcache.cc
+++ b/gdbserver/regcache.cc
@@ -85,18 +85,22 @@ regcache_invalidate_thread (struct thread_info *thread)

regcache = thread_regcache_data (thread);

- if (regcache == NULL)
- return;
+ if (regcache != nullptr)
+ regcache->invalidate ();
+}

- if (regcache->registers_valid)
+void
+regcache::invalidate ()
+{
+ if (registers_valid)
{
scoped_restore_current_thread restore_thread;
-
- switch_to_thread (thread);
- store_inferior_registers (regcache, -1);
+ gdb_assert (this->thread != nullptr);
+ switch_to_thread (this->thread);
+ store_inferior_registers (this, -1);
}

- regcache->registers_valid = 0;
+ discard ();
}

/* See regcache.h. */
@@ -121,6 +125,12 @@ regcache_invalidate (void)

#endif

+void
+regcache::discard ()
+{
+ registers_valid = 0;
+}
+
void
regcache::initialize (const target_desc *tdesc,
unsigned char *regbuf)
diff --git a/gdbserver/regcache.h b/gdbserver/regcache.h
index 614d5a2561f..b4a9d8864ae 100644
--- a/gdbserver/regcache.h
+++ b/gdbserver/regcache.h
@@ -78,6 +78,12 @@ struct regcache : public reg_buffer_common

/* Copy the contents of SRC into this regcache. */
void copy_from (regcache *src);
+
+ /* Store the cached registers to the target and then discard the cache. */
+ void invalidate ();
+
+ /* Discard the cache without storing the registers to the target. */
+ void discard ();
};

regcache *get_thread_regcache (thread_info *thread, bool fetch = true);
--
2.25.1

Intel Deutschland GmbH
Registered Address: Am Campeon 10, 85579 Neubiberg, Germany
Tel: +49 89 99 8853-0, www.intel.de <http://www.intel.de>
Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva