/* See regcache.h. */
+void
+readable_regcache::update_tdesc_parameters ()
+{
+ for (unsigned int i = 0; i < m_tdesc_parameter_status.size (); i++)
+ update_tdesc_parameter (i);
+}
+
+/* See regcache.h. */
+
register_status
readable_regcache::tdesc_parameter_value (unsigned int param_id,
gdb::array_view<gdb_byte> dst)
/* FIXME: Document. */
void update_tdesc_parameter (unsigned int param_id);
+ /* FIXME: Document. */
+ void update_tdesc_parameters ();
+
/* FIXME: Document. */
register_status tdesc_parameter_value (unsigned int param_id,
gdb::array_view<gdb_byte> dst);
}
if (regcache->has_variable_size_registers ())
- rs->get_remote_arch_state (regcache->arch ())
- ->update_packet_size (regcache, rs);
+ {
+ /* Presumably, the expedited registers allow recalculating the target
+ description parameters. */
+ regcache->update_tdesc_parameters ();
+
+ rs->get_remote_arch_state (regcache->arch ())
+ ->update_packet_size (regcache, rs);
+ }
}
/* Called when it is decided that STOP_REPLY holds the info of the
void
remote_target::fetch_registers_using_g (struct regcache *regcache)
{
+ if (regcache->has_variable_size_registers ())
+ {
+ regcache->update_tdesc_parameters ();
+
+ remote_state *rs = get_remote_state ();
+ remote_arch_state *rsa = rs->get_remote_arch_state (regcache->arch ());
+ rsa->update_packet_size (regcache, rs);
+ }
+
send_g_packet ();
process_g_packet (regcache);
}