]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gdbserver: dump 'xx...x' in collect_register_as_string for unavailable register
authorTankut Baris Aktemur <tankut.baris.aktemur@intel.com>
Thu, 9 Jan 2025 08:06:00 +0000 (09:06 +0100)
committerTankut Baris Aktemur <tankut.baris.aktemur@intel.com>
Thu, 9 Jan 2025 08:06:00 +0000 (09:06 +0100)
Fix 'collect_register_as_string' so that unavailable registers are
dumped as 'xx...x' instead of arbitrary values, in particular when
reporting expedited registers in a resume reply packet.  This change
gives the opportunity that we can reuse 'collect_register_as_string'
in 'registers_to_string' for additional code simplification.

Reviewed-By: Luis Machado <luis.machado@arm.com>
Approved-By: Simon Marchi <simon.marchi@efficios.com>
gdbserver/regcache.cc

index 0be9c5b7fa81619fbfcba997dd07a84e18b9a37d..516ecab69a4796b515aca60bac52f185bf694d0a 100644 (file)
@@ -209,24 +209,13 @@ find_register_by_number (const struct target_desc *tdesc, int n)
 void
 registers_to_string (struct regcache *regcache, char *buf)
 {
-  unsigned char *registers = regcache->registers;
   const struct target_desc *tdesc = regcache->tdesc;
 
   for (int i = 0; i < tdesc->reg_defs.size (); ++i)
     {
-      if (regcache->register_status[i] == REG_VALID)
-       {
-         bin2hex (registers, buf, register_size (tdesc, i));
-         buf += register_size (tdesc, i) * 2;
-       }
-      else
-       {
-         memset (buf, 'x', register_size (tdesc, i) * 2);
-         buf += register_size (tdesc, i) * 2;
-       }
-      registers += register_size (tdesc, i);
+      collect_register_as_string (regcache, i, buf);
+      buf += register_size (tdesc, i) * 2;
     }
-  *buf = '\0';
 }
 
 void
@@ -491,7 +480,15 @@ regcache_raw_get_unsigned_by_name (struct regcache *regcache,
 void
 collect_register_as_string (struct regcache *regcache, int n, char *buf)
 {
-  bin2hex (register_data (regcache, n), buf);
+  int reg_size = register_size (regcache->tdesc, n);
+
+  if (regcache->get_register_status (n) == REG_VALID)
+    bin2hex (register_data (regcache, n), buf);
+  else
+    memset (buf, 'x', reg_size * 2);
+
+  buf += reg_size * 2;
+  *buf = '\0';
 }
 
 void