From: Pedro Alves <pedro@codesourcery.com>
To: gdb@sourceware.org
Cc: Vladimir Prus <vladimir@codesourcery.com>,
Pawel Piech <pawel.piech@windriver.com>,
Marc Khouzam <marc.khouzam@ericsson.com>
Subject: Re: MI non-stop interface details
Date: Mon, 28 Apr 2008 16:21:00 -0000 [thread overview]
Message-ID: <200804272017.02620.pedro@codesourcery.com> (raw)
In-Reply-To: <200804261939.37635.vladimir@codesourcery.com>
A Saturday 26 April 2008 16:39:36, Vladimir Prus wrote:
> [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
If we get rid of the auto thread switching, then GDB's current thread
will always be the thread the frontend considers current too, because
it was the frontend that made it the current thread. What is this
"keeping track" you mention that would be needed for frontends
not using --thread?
Also, does --thread switch the current thread permanently as if
-thread-select was used, or does it only change it for the
processing of the command? That is, should GDB revert to the selected
thread after processing an -exec-* --thread command?
> - 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).
>
Not immediatelly. The *stopped notification will once per thread that
reports a stop. The frontend would use it to update its internal state
representing the thread (change the thread icon to a "-like paused icon
for instance). The frontend would send -thread-select when the user
activelly clicks on another thread icon (or equivalent action).
It doesn't seem much different from switching the internal-to-the-frontend
notion of current thread, from which the --thread=$id parameter is built.
> 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.
>
Can we make -exec-continue/-exec-step/-exec-next consistent, by
making the case of not passing a --thread parameter semantics
match? Given the same arguments, if one resumes just one thread,
the others should too, IMHO.
If we choose to always ignore the scheduler-locking setting
in non-stop mode, by making them operate on the current thread
only, we can still honour '-exec-continue --thread="all"',
or '-exec-step --all'. If people find it desirable, we can
make "scheduler-locking off" with no --thread specified mean resume
all threads. That I tend to agree is wrong in non-stop mode. I'd
rather have two buttons on the IDE -- "resume" and "resume all",
(or two keyboard shortcuts, etc.) then to export the sheduler-locking
modes to the user interface.
--
Pedro Alves
next prev parent reply other threads:[~2008-04-27 19:17 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-26 18:09 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 [this message]
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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200804272017.02620.pedro@codesourcery.com \
--to=pedro@codesourcery.com \
--cc=gdb@sourceware.org \
--cc=marc.khouzam@ericsson.com \
--cc=pawel.piech@windriver.com \
--cc=vladimir@codesourcery.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox