Mirror of the gdb mailing list
 help / color / mirror / Atom feed
* MI non-stop interface details
@ 2008-04-26 18:09 Vladimir Prus
  2008-04-26 18:16 ` Doug Evans
                   ` (3 more replies)
  0 siblings, 4 replies; 31+ messages in thread
From: Vladimir Prus @ 2008-04-26 18:09 UTC (permalink / raw)
  To: gdb; +Cc: Pawel Piech, Marc Khouzam


[Marc, Pawel, I CC you since you were involved in the original
discussions about MI interface for non-stop mode].

Some time ago I've posted a spec for MI interface in non-stop mode.
The discussion (and subsequent implementation) revealed a couple of
details that I'd like to finally settle.

Thread specification
--------------------

With non-stop mode, we have a possible race condition due to GDB notion
of current thread. GDB both uses the current thread to decide on which
thread the operation like 'step' should work, and it switches the current
thread when a stop event in a thread is detected. As the result, if a frontend
emits a command assuming that that current thread is N, and stop even is detected
before that command is executed, it will execute in the wrong thread.

The current non-stop patches introduce a --thread option to pretty much
every MI command, that make MI operate on the specified thread. I think
this is the best interface, and will document it as such in the MI docs.

At the same time, a suggestion was made to stop GDB to switch the (user-visible)
current thread. This will have two advantages:

  - CLI users won't see the thread switches
  - Some existing frontends are more easily adjusted to this interface. 
  In particular, Eclipse DSF-GDB does not have a central place where
  the --thread option can be conveniently added.

Pedro Alves has written a patch that disables the current thread switch, so
this approach is in fact possible. I think this leaves us with the following
scheme:

- In non-stop mode, the current thread is not automatically switched on
stops
- All MI commands will get the --thread option, as that allows the frontend
not to bother with keeping track of the current thread. This option will
be recommended in the manual
- Frontend authors that know what they are doing can ignore the --thread
option. (They will have to explicitly emit -thread-select, presumably immediately
after seeing the *stopped notification).

There are a couple of open questions.

1. Presently, -exec-continue resumes all threads, and the current thread
has no effect. I think it's desirable to be able to resume a single thread,
and for that, we actually need the --thread option for -exec-continue, to
mean that a single thread must be resumed.
2. Presently, -exec-step also resumes all threads. There's an option,
"scheduler-locking" that can be used for cause -exec-step to resume only
the current thread. It seems to be, that for non-stop mode, resuming all
threads is a wrong thing to do, therefore -exec-step, when in non-stop
mode, will resume only the thread been stepped. This will be the same
no matter if the thread is specified implicitly or explicitly.

Inferior function calls
-----------------------

We already have the *stopped async event, and I have a patch to introduce the
*running async event. Those are not emitted when doing inferiour function calls,
since doing so may cause a frontend to infinitely refresh its state. I propose
the following mechanism to enable those notifications for frontends that
are sufficiently robust:

1. Declare that MI might have some features that are not enabled by default.
2. Introduce new command -enable-feature, which takes a name of feature and enables
it. 
3. Make up a name of a feature, say inferior_call_notifications, and add that
feature to the output of -list-features.
4. Make '-enable-feature inferior_call_notification' enable *running and *stopped
for inferiour function calls.

Any comments?

- Volodya


^ permalink raw reply	[flat|nested] 31+ messages in thread

end of thread, other threads:[~2008-05-02 18:36 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-04-26 18:09 MI non-stop interface details Vladimir Prus
2008-04-26 18:16 ` Doug Evans
2008-04-26 19:49   ` Vladimir Prus
2008-04-30  7:18     ` Marc Khouzam
2008-04-28 16:21 ` Pedro Alves
2008-04-29 19:21   ` Vladimir Prus
2008-04-29 20:04     ` Pedro Alves
2008-04-30  7:00       ` Pawel Piech
2008-05-01 16:15         ` Vladimir Prus
2008-05-01 16:31           ` Pawel Piech
2008-05-01 16:38             ` Vladimir Prus
2008-05-01 16:58               ` Pawel Piech
     [not found]               ` <4819F4D4.4010305@windriver.com>
2008-05-01 17:00                 ` Vladimir Prus
2008-05-01 17:53                   ` Pawel Piech
2008-05-01 18:12                     ` Vladimir Prus
2008-05-01 18:37                       ` Pawel Piech
2008-05-02  1:23                       ` Evolution of GDB/MI [was Re: MI non-stop interface details] Nick Roberts
2008-04-30 14:23       ` MI non-stop interface details Marc Khouzam
2008-04-30 17:21         ` Pedro Alves
     [not found]         ` <200804301117.42633.vladimir@codesourcery.com>
     [not found]           ` <4818AA58.4040201@windriver.com>
2008-05-01 17:11             ` Vladimir Prus
2008-05-01 18:08               ` Pawel Piech
2008-05-02 14:21                 ` Vladimir Prus
2008-05-02 16:59                   ` Pawel Piech
2008-05-02 17:13                     ` Vladimir Prus
     [not found]                       ` <481B4FDC.4010802@windriver.com>
2008-05-02 17:36                         ` Vladimir Prus
2008-05-02 18:00                           ` Pawel Piech
2008-05-02 18:19                             ` Vladimir Prus
2008-05-02 18:36                               ` Pawel Piech
2008-04-29  3:14 ` Pawel Piech
     [not found] ` <200804301059.44112.vladimir@codesourcery.com>
     [not found]   ` <200804301534.48779.pedro@codesourcery.com>
2008-05-01 17:22     ` Vladimir Prus
2008-05-01 17:52       ` Pedro Alves

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox