RFC: Two small remote protocol extensions

Andrew Cagney ac131313@ges.redhat.com
Tue Aug 27 21:07:00 GMT 2002


> Sure.  I suppose we should clean up the interface to resume, to prevent
> all this confusion re-arising... which means figuring out our possible
> behaviors, and whether they are even implementable on particular
> targets.

The spanner in the works here is simulators.  They can't implement 
schedule-locking because their scheduler is hardwired.  The best they 
can manage is step off current instruction.

A simple version of this (PPC) (from memory) always implements 
step->schedule.  If you step I the procesor.  It complets one 
instruction on the current CPU and then schedules the next CPU for the 
next instruction.

> On Linux the options for any given LWP (at the moment, that means for
> any given thread) are step, run, stop.  All combinations are available. 
> I think the _useful_ ones are:
> 
>   step one, stop others
>   step one, continue others
>   continue one, stop others
>   continue one, continue others
> 
> And, of course:
>   stop one, stop others
> :)
> 

What is the absolute minimum needed?

- step off breakpoint / thread-hop
= using a sched lock single-step
= using software single-step breakpoints and a sched lock continue 
(Note: this is where the existing interface really falls down -- step=0 
so remote.c won't know to schedule-lock)

- continue

I think, after that, everything is an efficiency gain.  Looking at the list:

 >   step one, stop others

Hardware single-step off of breakpoint.
TPID, STEP, !OTH
HcTID, s

 >   step one, continue others

Hardware single-step.
TPID, STEP, OTH
H???, s

 >   continue one, stop others

Schedule lock.
Software single-step off breakpoint.
TPID, !STEP, !OTH (wiered)
HcTID, c

 >   continue one, continue others

Software single-step.
General resume.
TPID, !STEP, OTH
Hc0, c

 > Something like:
 >   resume (ptid, step, run_others, target_signal)
 > maybe?  Does anyone think step_all is useful (I don't)?

It is what a simulator might implement.

So looking at the remote protocol.  There in't a way of specifying TPID, 
STEP, OTH (your bug).

Andrew




> PS:
> Some day letting the user be more precise (run these two threads) would
> be nice.  I envision a day in the distant future:
>  -> Continue thread 1
>  -> Continue thread 2
>  -> Wait for inferior status
>  <- All threads stopped, thread 1, SIGSEGV
> or
>  -> Continue all threads
>  -> Wait for inferior status [maybe implicit in the all-threads
> 				request]
>  <- Thread 1 stopped, shared lib breakpoint, all other threads running

Try ``target remote-async''.

> But let's not try to design to that quite yet :)

:-)




More information about the Gdb mailing list