[v2,AArch64] Add more debugging output to aarch64_displaced_step_fixup
Commit Message
New in v2:
- Fixed misc comments from review.
--
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-13 Luis Machado <luis.machado@linaro.org>
* aarch64-tdep.c (aarch64_displaced_step_fixup): Add more debugging
output.
---
gdb/aarch64-tdep.c | 27 +++++++++++++++++++++++++--
1 file changed, 25 insertions(+), 2 deletions(-)
Comments
Ok to push.
Alan.
> On 13 Jan 2020, at 17:42, Luis Machado <luis.machado@linaro.org> wrote:
>
> New in v2:
>
> - Fixed misc comments from review.
>
> --
>
> 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-13 Luis Machado <luis.machado@linaro.org>
>
> * aarch64-tdep.c (aarch64_displaced_step_fixup): Add more debugging
> output.
> ---
> gdb/aarch64-tdep.c | 27 +++++++++++++++++++++++++--
> 1 file changed, 25 insertions(+), 2 deletions(-)
>
> diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c
> index 6a9d34dc67..29b712c155 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,
> --
> 2.17.1
>
@@ -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,