From: Tankut Baris Aktemur Date: Thu, 9 Jan 2025 08:06:00 +0000 (+0100) Subject: gdbserver: dump 'xx...x' in collect_register_as_string for unavailable register X-Git-Tag: binutils-2_44~223 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=60d95017ec97801b96181a29d1554e2ec69905cf;p=thirdparty%2Fbinutils-gdb.git gdbserver: dump 'xx...x' in collect_register_as_string for unavailable register 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 Approved-By: Simon Marchi --- diff --git a/gdbserver/regcache.cc b/gdbserver/regcache.cc index 0be9c5b7fa8..516ecab69a4 100644 --- a/gdbserver/regcache.cc +++ b/gdbserver/regcache.cc @@ -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