aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTankut Baris Aktemur <tankut.baris.aktemur@intel.com>2025-01-09 13:45:51 +0100
committerTankut Baris Aktemur <tankut.baris.aktemur@intel.com>2025-01-09 13:45:51 +0100
commit2063681a381c2b582f811d47658f7383b85ac21a (patch)
treef9c6d2d559a6d6fc085d75f40b2398db0e4561fe
parentdabe45ce0c3b5a04029164646024e7c99d4b8649 (diff)
downloadbinutils-2063681a381c2b582f811d47658f7383b85ac21a.zip
binutils-2063681a381c2b582f811d47658f7383b85ac21a.tar.gz
binutils-2063681a381c2b582f811d47658f7383b85ac21a.tar.bz2
gdbserver: introduce and use regcache::set_register_status
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>
-rw-r--r--gdbserver/regcache.cc38
-rw-r--r--gdbserver/regcache.h3
2 files changed, 21 insertions, 20 deletions
diff --git a/gdbserver/regcache.cc b/gdbserver/regcache.cc
index 516ecab..2c491d6 100644
--- a/gdbserver/regcache.cc
+++ b/gdbserver/regcache.cc
@@ -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
diff --git a/gdbserver/regcache.h b/gdbserver/regcache.h
index 190a06e..6fc0445 100644
--- a/gdbserver/regcache.h
+++ b/gdbserver/regcache.h
@@ -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;