]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
GDB: remote: Update tdesc parameters and packet size ...
authorThiago Jung Bauermann <thiago.bauermann@linaro.org>
Sun, 27 Apr 2025 05:01:44 +0000 (02:01 -0300)
committerThiago Jung Bauermann <thiago.bauermann@linaro.org>
Thu, 23 Oct 2025 04:17:04 +0000 (01:17 -0300)
... before using the g packet.

gdb/regcache.c
gdb/regcache.h
gdb/remote.c

index 1d86287125facfa1aea69f83ca76355b63501318..70075d059afa8f3a9537a1d0e3af1d2f89ef0cf9 100644 (file)
@@ -1408,6 +1408,15 @@ readable_regcache::update_tdesc_parameter (unsigned int param_id)
 
 /* 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)
index a25c6432dac366cc27e4ecf967621776d8f2c35c..4a23ddb9e227a0182f1a18de4e621b11fd68194b 100644 (file)
@@ -404,6 +404,9 @@ public:
   /* 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);
index 7619126e12b81585c41ebae1b6db92fb87258e73..ddc77fa438a946f94f8d4bf5824adaf46a76a254 100644 (file)
@@ -8954,8 +8954,14 @@ remote_target::supply_expedited_registers (regcache *regcache,
     }
 
   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
@@ -9507,6 +9513,15 @@ remote_target::process_g_packet (struct regcache *regcache)
 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);
 }