[5/6] gdb: make regcache::debug_print_register return a string

Message ID 20240417205426.2030615-5-simon.marchi@polymtl.ca
State New
Headers
Series [1/6] gdb: add includes in target-debug.h |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gdb_build--master-aarch64 success Testing passed
linaro-tcwg-bot/tcwg_gdb_build--master-arm success Testing passed
linaro-tcwg-bot/tcwg_gdb_check--master-arm success Testing passed
linaro-tcwg-bot/tcwg_gdb_check--master-aarch64 success Testing passed

Commit Message

Simon Marchi April 17, 2024, 8:54 p.m. UTC
  From: Simon Marchi <simon.marchi@efficios.com>

This makes it easier to introduce `target_debug_printf` in a subsequent
patch.

Change-Id: I5bb2d49476d17940d503e66f40762e3f1e3baabc
---
 gdb/regcache.c | 28 +++++++++++++++-------------
 gdb/regcache.h |  5 ++---
 gdb/target.c   |  8 ++++----
 3 files changed, 21 insertions(+), 20 deletions(-)
  

Comments

Tom Tromey April 19, 2024, 7:24 p.m. UTC | #1
>>>>> "Simon" == Simon Marchi <simon.marchi@polymtl.ca> writes:

Simon> From: Simon Marchi <simon.marchi@efficios.com>
Simon> This makes it easier to introduce `target_debug_printf` in a subsequent
Simon> patch.

Simon> -/* Dump the contents of a register from the register cache to the target
Simon> -   debug.  */
Simon> -  void debug_print_register (const char *func, int regno);
Simon> +  /* Return a dump of the contents of a register, suitable for debug output.  */
Simon> +  std::string debug_print_register (int regno);
 
After the patch this seems misnamed.

Tom
  
Simon Marchi April 19, 2024, 7:45 p.m. UTC | #2
On 2024-04-19 15:24, Tom Tromey wrote:
>>>>>> "Simon" == Simon Marchi <simon.marchi@polymtl.ca> writes:
> 
> Simon> From: Simon Marchi <simon.marchi@efficios.com>
> Simon> This makes it easier to introduce `target_debug_printf` in a subsequent
> Simon> patch.
> 
> Simon> -/* Dump the contents of a register from the register cache to the target
> Simon> -   debug.  */
> Simon> -  void debug_print_register (const char *func, int regno);
> Simon> +  /* Return a dump of the contents of a register, suitable for debug output.  */
> Simon> +  std::string debug_print_register (int regno);
>  
> After the patch this seems misnamed.
> 
> Tom

Ok, I changed the method name to "register_debug_string".

Simon
  

Patch

diff --git a/gdb/regcache.c b/gdb/regcache.c
index b7abbe99f3cc..e673d56a7e94 100644
--- a/gdb/regcache.c
+++ b/gdb/regcache.c
@@ -1463,36 +1463,38 @@  reg_buffer::num_raw_registers () const
   return gdbarch_num_regs (arch ());
 }
 
-void
-regcache::debug_print_register (const char *func,  int regno)
+std::string
+regcache::debug_print_register (int regno)
 {
   struct gdbarch *gdbarch = arch ();
+  std::string s;
 
-  gdb_printf (gdb_stdlog, "%s ", func);
   if (regno >= 0 && regno < gdbarch_num_regs (gdbarch)
       && gdbarch_register_name (gdbarch, regno)[0] != '\0')
-    gdb_printf (gdb_stdlog, "(%s)",
-		gdbarch_register_name (gdbarch, regno));
+    string_appendf (s, "register %s:", gdbarch_register_name (gdbarch, regno));
   else
-    gdb_printf (gdb_stdlog, "(%d)", regno);
+    string_appendf (s, "register %d:", regno);
+
   if (regno >= 0 && regno < gdbarch_num_regs (gdbarch))
     {
-      enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
       gdb::array_view<gdb_byte> buf = register_buffer (regno);
 
-      gdb_printf (gdb_stdlog, " = ");
+      string_appendf (s, " = ");
+
       for (gdb_byte byte : buf)
-	gdb_printf (gdb_stdlog, "%02x", byte);
+	string_appendf (s, "%02x", byte);
 
       if (buf.size () <= sizeof (LONGEST))
 	{
-	  ULONGEST val = extract_unsigned_integer (buf, byte_order);
+	  ULONGEST val
+	    = extract_unsigned_integer (buf, gdbarch_byte_order (gdbarch));
 
-	  gdb_printf (gdb_stdlog, " %s %s",
-		      core_addr_to_string_nz (val), plongest (val));
+	  string_appendf (s, " %s %s",
+			  core_addr_to_string_nz (val), plongest (val));
 	}
     }
-  gdb_printf (gdb_stdlog, "\n");
+
+    return s;
 }
 
 /* Implement 'maint flush register-cache' command.  */
diff --git a/gdb/regcache.h b/gdb/regcache.h
index 9ba6c79ab0d5..3c621045c163 100644
--- a/gdb/regcache.h
+++ b/gdb/regcache.h
@@ -454,9 +454,8 @@  class regcache : public detached_regcache
     this->m_ptid = ptid;
   }
 
-/* Dump the contents of a register from the register cache to the target
-   debug.  */
-  void debug_print_register (const char *func, int regno);
+  /* Return a dump of the contents of a register, suitable for debug output.  */
+  std::string debug_print_register (int regno);
 
 protected:
   regcache (inferior *inf_for_target_calls, gdbarch *gdbarch);
diff --git a/gdb/target.c b/gdb/target.c
index 107a84b3ca1d..cdaaf253cbcd 100644
--- a/gdb/target.c
+++ b/gdb/target.c
@@ -3889,7 +3889,8 @@  target_fetch_registers (struct regcache *regcache, int regno)
 {
   current_inferior ()->top_target ()->fetch_registers (regcache, regno);
   if (targetdebug)
-    regcache->debug_print_register ("target_fetch_registers", regno);
+    gdb_printf (gdb_stdlog, "target_fetch_registers: %s",
+		regcache->debug_print_register (regno).c_str ());
 }
 
 void
@@ -3900,9 +3901,8 @@  target_store_registers (struct regcache *regcache, int regno)
 
   current_inferior ()->top_target ()->store_registers (regcache, regno);
   if (targetdebug)
-    {
-      regcache->debug_print_register ("target_store_registers", regno);
-    }
+    gdb_printf (gdb_stdlog, "target_store_registers: %s",
+		regcache->debug_print_register (regno).c_str ());
 }
 
 int