This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [rfc, spu] Don't call set_gdbarch_cannot_step_breakpoint in spu_gdbarch_init


> +Ulrich
> 
> Ulrich, any idea why cannot_step_breakpoint was ever needed?

This was needed for alpha OSF/1.

Back then it was the only architecture which would not ptrace step
over an inserted breakpoint, causing an infinite loop while trying
to single step over an inserted breakpoint.

The diff back then was

+ #ifdef CANNOT_STEP_BREAKPOINT
+   /* If the target doesn't support stepping over a breakpoint, simply
+      continue, we will then hit the breakpoint anyway.  */
+   if (step && breakpoints_inserted && breakpoint_here_p (read_pc ()))
+     step = 0;
+ #endif

I do not know if GDB ever tries to ptrace step over an inserted
breakpoint nowadays, sorry.
Meanwhile the alpha OSF/1 port is dead anyways...

> Yao's change makes sense to me.
> 
> Thanks,
> Pedro Alves
> 
> On 03/17/2015 02:52 PM, Yao Qi wrote:
> > From: Yao Qi <yao.qi@linaro.org>
> > 
> > Nowadays, in infrun.c:resume, the setting to 'step' variable is like:
> > 
> >   if (use_displaced_stepping (gdbarch)
> >       && tp->control.trap_expected
> >       && sig == GDB_SIGNAL_0
> >       && !current_inferior ()->waiting_for_vfork_done)
> >     {
> >     }
> >   /* Do we need to do it the hard way, w/temp breakpoints?  */
> >   else if (step)
> >     step = maybe_software_singlestep (gdbarch, pc); <-- [1]
> > 
> >   ...
> > 
> >   if (execution_direction != EXEC_REVERSE
> >       && step && breakpoint_inserted_here_p (aspace, pc))
> >     {
> >       ...
> >       if (gdbarch_cannot_step_breakpoint (gdbarch)) <-- [2]
> >         step = 0;
> >     }
> > 
> > spu doesn't have displaced stepping and uses software single step,
> > so 'step' is set to zero in [1], and [2] becomes unreachable as a
> > result.  So don't have to call set_gdbarch_cannot_step_breakpoint
> > in spu_gdbarch_init.
> > 
> > On the other hand, we either have hardware single step or software
> > single step, do we still need gdbarch method cannot_step_breakpoint?
> > CANNOT_STEP_BREAKPOINT was introduced in 1993 by commit
> > cef4c2e7a5f2d3426a8255f74b6c7f4e795fd9a4 for alpha OSF/1 native
> > support.
> > 
> > I don't have spu machine to test this patch.
> > 
> > gdb:
> > 
> > 2015-03-17  Yao Qi  <yao.qi@linaro.org>
> > 
> > 	* spu-tdep.c (spu_gdbarch_init): Don't call
> > 	set_gdbarch_cannot_step_breakpoint.
> > ---
> >  gdb/spu-tdep.c | 1 -
> >  1 file changed, 1 deletion(-)
> > 
> > diff --git a/gdb/spu-tdep.c b/gdb/spu-tdep.c
> > index 36ad312..870cf32 100644
> > --- a/gdb/spu-tdep.c
> > +++ b/gdb/spu-tdep.c
> > @@ -2794,7 +2794,6 @@ spu_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
> >    set_gdbarch_decr_pc_after_break (gdbarch, 4);
> >    set_gdbarch_breakpoint_from_pc (gdbarch, spu_breakpoint_from_pc);
> >    set_gdbarch_memory_remove_breakpoint (gdbarch, spu_memory_remove_breakpoint);
> > -  set_gdbarch_cannot_step_breakpoint (gdbarch, 1);
> >    set_gdbarch_software_single_step (gdbarch, spu_software_single_step);
> >    set_gdbarch_get_longjmp_target (gdbarch, spu_get_longjmp_target);
> >  

-- 
Peter Schauer			Peter.Schauer@mytum.de


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]