summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuis Machado <luis.machado@linaro.org>2020-01-09 16:19:31 -0300
committerLuis Machado <luis.machado@linaro.org>2020-01-21 10:25:54 -0300
commit1ab139e5bedfec2bb277287574cc0322c21a252b (patch)
treeb7f5b90755177bd608ca465eeff42863defad7ac
parent0c27188999bfc5bf03536bf44593c4ed8df296c3 (diff)
downloadbinutils-gdb-1ab139e5bedfec2bb277287574cc0322c21a252b.tar.gz
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.
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/aarch64-tdep.c27
2 files changed, 30 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 146767f0697..ec9bac0dad3 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 fb7b8621ba2..03d650d9dc5 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,