mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-11-16 12:34:43 +00:00
gdbserver: refactor the definition and uses of supply_regblock
The supply_regblock function takes a pointer to a buffer as an argument and implements two different behavior based on the pointer being null. There are two cases where we pass nullptr, all in tracepoint.cc, where we are essentially doing a reset on the regcache. In fast_tracepoint_ctx::regcache, register_status array does not even exist. Hence, that use simply boils down to zeroing of register data. Do this at the time of creating the buffer and remove the call to supply_regblock. In fetch_traceframe_registers, inline the use with a call to `reset`. Hence, there are no more cases left, where a nullptr would be passed to supply_regblock. Assert that the buffer argument is non-null and simplify the implementation. Approved-By: Simon Marchi <simon.marchi@efficios.com>
This commit is contained in:
@@ -360,8 +360,7 @@ supply_register_by_name_zeroed (struct regcache *regcache,
|
||||
void
|
||||
supply_regblock (struct regcache *regcache, const void *buf)
|
||||
{
|
||||
if (buf)
|
||||
{
|
||||
gdb_assert (buf != nullptr);
|
||||
const struct target_desc *tdesc = regcache->tdesc;
|
||||
|
||||
memcpy (regcache->registers, buf, tdesc->registers_size);
|
||||
@@ -369,9 +368,6 @@ supply_regblock (struct regcache *regcache, const void *buf)
|
||||
for (int i = 0; i < tdesc->reg_defs.size (); i++)
|
||||
regcache->set_register_status (i, REG_VALID);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
regcache->reset (REG_UNAVAILABLE);
|
||||
}
|
||||
|
||||
#ifndef IN_PROCESS_AGENT
|
||||
|
||||
@@ -1198,7 +1198,6 @@ struct fast_tracepoint_ctx : public tracepoint_hit_ctx
|
||||
if (!this->m_regcache.has_value ())
|
||||
{
|
||||
this->m_regcache.emplace (ipa_tdesc, this->regspace);
|
||||
supply_regblock (&this->m_regcache.value (), nullptr);
|
||||
supply_fast_tracepoint_registers (&this->m_regcache.value (),
|
||||
this->regs);
|
||||
}
|
||||
@@ -4815,7 +4814,7 @@ fetch_traceframe_registers (int tfnum, struct regcache *regcache, int regnum)
|
||||
if (dataptr == NULL)
|
||||
{
|
||||
/* Mark registers unavailable. */
|
||||
supply_regblock (regcache, NULL);
|
||||
regcache->reset (REG_UNAVAILABLE);
|
||||
|
||||
/* We can generally guess at a PC, although this will be
|
||||
misleading for while-stepping frames and multi-location
|
||||
@@ -5370,6 +5369,8 @@ gdb_collect (struct tracepoint *tpoint, unsigned char *regs)
|
||||
return;
|
||||
}
|
||||
|
||||
memset (ctx.regspace, 0, ipa_tdesc->registers_size);
|
||||
|
||||
for (ctx.tpoint = tpoint;
|
||||
ctx.tpoint != NULL && ctx.tpoint->address == tpoint->address;
|
||||
ctx.tpoint = ctx.tpoint->next)
|
||||
|
||||
Reference in New Issue
Block a user