]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gdbserver: introduce and use regcache::set_register_status
authorTankut Baris Aktemur <tankut.baris.aktemur@intel.com>
Thu, 9 Jan 2025 12:45:51 +0000 (13:45 +0100)
committerTankut Baris Aktemur <tankut.baris.aktemur@intel.com>
Thu, 9 Jan 2025 12:45:51 +0000 (13:45 +0100)
Introduce and use a setter method in regcache to set the status of a
register.  There already exists get_register_status.  So, it made
sense to add the setter to control access to the register_status
field.

In two places, we also do cosmetic improvements to for-loops.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
gdbserver/regcache.cc
gdbserver/regcache.h

index 516ecab69a4796b515aca60bac52f185bf694d0a..2c491d64e5ec1a54e6ca82cde4b29fa2f84ded57 100644 (file)
@@ -327,16 +327,14 @@ regcache::raw_supply (int n, gdb::array_view<const gdb_byte> src)
     {
       copy (src, dst);
 #ifndef IN_PROCESS_AGENT
-      if (register_status != NULL)
-       register_status[n] = REG_VALID;
+      set_register_status (n, REG_VALID);
 #endif
     }
   else
     {
       memset (dst.data (), 0, dst.size ());
 #ifndef IN_PROCESS_AGENT
-      if (register_status != NULL)
-       register_status[n] = REG_UNAVAILABLE;
+      set_register_status (n, REG_UNAVAILABLE);
 #endif
     }
 }
@@ -349,8 +347,7 @@ supply_register_zeroed (struct regcache *regcache, int n)
   auto dst = register_data (regcache, n);
   memset (dst.data (), 0, dst.size ());
 #ifndef IN_PROCESS_AGENT
-  if (regcache->register_status != NULL)
-    regcache->register_status[n] = REG_VALID;
+  regcache->set_register_status (n, REG_VALID);
 #endif
 }
 
@@ -360,8 +357,7 @@ regcache::raw_supply_part_zeroed (int regnum, int offset, size_t size)
   auto dst = register_data (this, regnum).slice (offset, size);
   memset (dst.data (), 0, dst.size ());
 #ifndef IN_PROCESS_AGENT
-  if (register_status != NULL)
-    register_status[regnum] = REG_VALID;
+  set_register_status (regnum, REG_VALID);
 #endif
 }
 
@@ -391,12 +387,8 @@ supply_regblock (struct regcache *regcache, const void *buf)
 
       memcpy (regcache->registers, buf, tdesc->registers_size);
 #ifndef IN_PROCESS_AGENT
-      {
-       int i;
-
-       for (i = 0; i < tdesc->reg_defs.size (); i++)
-         regcache->register_status[i] = REG_VALID;
-      }
+      for (int i = 0; i < tdesc->reg_defs.size (); i++)
+       regcache->set_register_status (i, REG_VALID);
 #endif
     }
   else
@@ -405,12 +397,8 @@ supply_regblock (struct regcache *regcache, const void *buf)
 
       memset (regcache->registers, 0, tdesc->registers_size);
 #ifndef IN_PROCESS_AGENT
-      {
-       int i;
-
-       for (i = 0; i < tdesc->reg_defs.size (); i++)
-         regcache->register_status[i] = REG_UNAVAILABLE;
-      }
+      for (int i = 0; i < tdesc->reg_defs.size (); i++)
+       regcache->set_register_status (i, REG_UNAVAILABLE);
 #endif
     }
 }
@@ -531,6 +519,16 @@ regcache::get_register_status (int regnum) const
 #endif
 }
 
+void
+regcache::set_register_status (int regnum, enum register_status status)
+{
+#ifndef IN_PROCESS_AGENT
+  gdb_assert (regnum >= 0 && regnum < tdesc->reg_defs.size ());
+  if (register_status != nullptr)
+    register_status[regnum] = status;
+#endif
+}
+
 /* See gdbsupport/common-regcache.h.  */
 
 bool
index 190a06e0a4ad2e12a1357cac383251553d57e31b..6fc04453a64e8edec8ad53ddb25ff4a5ede544c3 100644 (file)
@@ -50,6 +50,9 @@ struct regcache : public reg_buffer_common
   /* See gdbsupport/common-regcache.h.  */
   enum register_status get_register_status (int regnum) const override;
 
+  /* Set the status of register REGNUM to STATUS.  */
+  void set_register_status (int regnum, enum register_status status);
+
   /* See gdbsupport/common-regcache.h.  */
   int register_size (int regnum) const override;