Add more debugging output to aarch64_displaced_step_fixup
authorLuis Machado <luis.machado@linaro.org>
Thu, 9 Jan 2020 19:19:31 +0000 (16:19 -0300)
committerLuis Machado <luis.machado@linaro.org>
Tue, 21 Jan 2020 13:25:54 +0000 (10:25 -0300)
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.

gdb/ChangeLog
gdb/aarch64-tdep.c

index 146767f06976aec890b03019bd4cadfb664ac59f..ec9bac0dad30355664452bfbd6d5bbcfbd192f43 100644 (file)
@@ -1,3 +1,8 @@
+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 )
index fb7b8621ba20a05ea90552fe173d540b3e168c0f..03d650d9dc5c6ec375984e003bd8196f41b547c6 100644 (file)
@@ -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,