[v2,AArch64] Add more debugging output to aarch64_displaced_step_fixup

Message ID 20200113174239.7819-1-luis.machado@linaro.org
State New
Headers show
Series
  • [v2,AArch64] Add more debugging output to aarch64_displaced_step_fixup
Related show

Commit Message

Luis Machado Jan. 13, 2020, 5:42 p.m.
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(-)

-- 
2.17.1

Comments

Alan Hayward Jan. 21, 2020, 11:21 a.m. | #1
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

>

Patch

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,