[binutils-gdb] Add more debugging output to aarch64_displaced_step_fixup

Luis Machado luisgpm@sourceware.org
Tue Jan 21 13:27:00 GMT 2020


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=1ab139e5bedfec2bb277287574cc0322c21a252b

commit 1ab139e5bedfec2bb277287574cc0322c21a252b
Author: Luis Machado <luis.machado@linaro.org>
Date:   Thu Jan 9 16:19:31 2020 -0300

    Add more debugging output to aarch64_displaced_step_fixup
    
    While debugging the step-over-syscall problem, i wanted to see a bit more
    debugging output to try to determine the root cause.
    
    This patch does this.
    
    gdb/ChangeLog:
    
    2020-01-21  Luis Machado  <luis.machado@linaro.org>
    
    	* aarch64-tdep.c (aarch64_displaced_step_fixup): Add more debugging
    	output.

Diff:
---
 gdb/ChangeLog      |  5 +++++
 gdb/aarch64-tdep.c | 27 +++++++++++++++++++++++++--
 2 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 146767f..ec9bac0 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,10 @@
 2020-01-21  Luis Machado  <luis.machado@linaro.org>
 
+	* aarch64-tdep.c (aarch64_displaced_step_fixup): Add more debugging
+	output.
+
+2020-01-21  Luis Machado  <luis.machado@linaro.org>
+
 	* aarch64-tdep.c (struct aarch64_displaced_step_closure )
 	<pc_adjust>: Adjust the documentation.
 	(aarch64_displaced_step_fixup): Check if PC really moved before
diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c
index fb7b862..03d650d 100644
--- a/gdb/aarch64-tdep.c
+++ b/gdb/aarch64-tdep.c
@@ -3037,8 +3037,16 @@ aarch64_displaced_step_fixup (struct gdbarch *gdbarch,
 
   regcache_cooked_read_unsigned (regs, AARCH64_PC_REGNUM, &pc);
 
+  if (debug_displaced)
+    debug_printf ("Displaced: PC after stepping: %s (was %s).\n",
+		  paddress (gdbarch, pc), paddress (gdbarch, to));
+
   if (dsc->cond)
     {
+      if (debug_displaced)
+	debug_printf ("Displaced: [Conditional] pc_adjust before: %d\n",
+		      dsc->pc_adjust);
+
       if (pc - to == 8)
 	{
 	  /* Condition is true.  */
@@ -3050,8 +3058,18 @@ aarch64_displaced_step_fixup (struct gdbarch *gdbarch,
 	}
       else
 	gdb_assert_not_reached ("Unexpected PC value after displaced stepping");
+
+      if (debug_displaced)
+	debug_printf ("Displaced: [Conditional] pc_adjust after: %d\n",
+		      dsc->pc_adjust);
     }
 
+  if (debug_displaced)
+    debug_printf ("Displaced: %s PC by %d\n",
+		  dsc->pc_adjust? "adjusting" : "not adjusting",
+		  dsc->pc_adjust);
+
+
   if (dsc->pc_adjust != 0)
     {
       /* Make sure the previous instruction was executed (that is, the PC
@@ -3059,11 +3077,16 @@ aarch64_displaced_step_fixup (struct gdbarch *gdbarch,
 	 offset.  Otherwise we may skip an instruction before its execution
 	 took place.  */
       if ((pc - to) == 0)
-	dsc->pc_adjust = 0;
+	{
+	  if (debug_displaced)
+	    debug_printf ("Displaced: PC did not move. Discarding PC "
+			  "adjustment.\n");
+	  dsc->pc_adjust = 0;
+	}
 
       if (debug_displaced)
 	{
-	  debug_printf ("displaced: fixup: set PC to %s:%d\n",
+	  debug_printf ("Displaced: fixup: set PC to %s:%d\n",
 			paddress (gdbarch, from), dsc->pc_adjust);
 	}
       regcache_cooked_write_unsigned (regs, AARCH64_PC_REGNUM,



More information about the Gdb-cvs mailing list