[PATCH] Displaced stepping (non-stop debugging) support for ARM Linux

Ulrich Weigand uweigand@de.ibm.com
Thu Sep 24 19:35:00 GMT 2009


Julian Brown wrote:

> --- .pc/displaced-stepping-always/gdb/infrun.c	2009-07-30 15:33:13.000000000 -0700
> +++ gdb/infrun.c	2009-07-30 15:33:31.000000000 -0700
> @@ -1105,15 +1111,19 @@ maybe_software_singlestep (struct gdbarc
>  {
>    int hw_step = 1;
>  
> -  if (gdbarch_software_single_step_p (gdbarch)
> -      && gdbarch_software_single_step (gdbarch, get_current_frame ()))
> +  if (gdbarch_software_single_step_p (gdbarch))
>      {
> -      hw_step = 0;
> -      /* Do not pull these breakpoints until after a `wait' in
> -	 `wait_for_inferior' */
> -      singlestep_breakpoints_inserted_p = 1;
> -      singlestep_ptid = inferior_ptid;
> -      singlestep_pc = pc;
> +      if (use_displaced_stepping (gdbarch))
> +        hw_step = 0;
> +      else if (gdbarch_software_single_step (gdbarch, get_current_frame ()))
> +	{
> +	  hw_step = 0;
> +	  /* Do not pull these breakpoints until after a `wait' in
> +	     `wait_for_inferior' */
> +	  singlestep_breakpoints_inserted_p = 1;
> +	  singlestep_ptid = inferior_ptid;
> +	  singlestep_pc = pc;
> +	}
>      }
>    return hw_step;
>  }

It seems this change broke displaced stepping on PowerPC.

The problem is that on PowerPC, we do have a gdbarch_software_single_step
routine (ppc_deal_with_atomic_sequence), but this is only used in very
specific circumstances.  Usually, it returns zero and lets GDB use hardware
single stepping.

We also have a displaced stepping implementation, which assumes GDB will
use hardware single-stepping to step over the displaced copy (in particular,
the gdbarch_software_single_step routine should always return 0 when
looking at the displaced copy).

However, with the patch, GDB will simply always use "continue" to run
the displaced copy, which generally breaks.

I'm not sure I understand the rationale behind these changes to the
displaced stepping logic in infrun.c in the first place.  Why is
everything conditioned on gdbarch_software_single_step_p, which just
says whether or not the architecture has installed a single-stepping
routine -- but this alone doesn't say whether software stepping is
actually needed in any given situation ...

Bye,
Ulrich

-- 
  Dr. Ulrich Weigand
  GNU Toolchain for Linux on System z and Cell BE
  Ulrich.Weigand@de.ibm.com



More information about the Gdb-patches mailing list