diff --git a/gdbserver/regcache.cc b/gdbserver/regcache.cc index bd053c058ec..06ac372d37b 100644 --- a/gdbserver/regcache.cc +++ b/gdbserver/regcache.cc @@ -360,18 +360,14 @@ supply_register_by_name_zeroed (struct regcache *regcache, void supply_regblock (struct regcache *regcache, const void *buf) { - if (buf) - { - const struct target_desc *tdesc = regcache->tdesc; + gdb_assert (buf != nullptr); + const struct target_desc *tdesc = regcache->tdesc; - memcpy (regcache->registers, buf, tdesc->registers_size); + memcpy (regcache->registers, buf, tdesc->registers_size); #ifndef IN_PROCESS_AGENT - for (int i = 0; i < tdesc->reg_defs.size (); i++) - regcache->set_register_status (i, REG_VALID); + 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 diff --git a/gdbserver/tracepoint.cc b/gdbserver/tracepoint.cc index 0ed8e8f9994..5e3792e1d2f 100644 --- a/gdbserver/tracepoint.cc +++ b/gdbserver/tracepoint.cc @@ -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)