From: Liang Cheng <liang.cheng555@gmail.com>
To: Joel Brobecker <brobecker@adacore.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [patch] failed to attach to the same process after detaching in gdbserver multiprocess mode
Date: Mon, 27 Jun 2011 17:10:00 -0000 [thread overview]
Message-ID: <BANLkTikF8Q4mt8KC-a7HE7hDzjsfuoamHw@mail.gmail.com> (raw)
In-Reply-To: <20110627155425.GE20676@adacore.com>
Thanks Joel, for your comments.
This problem is that Linux_wait_for_event_1 does not return in
linux_wait code path. So gdbserver stucks at linux-low.c::my_waitpid,
and does not return OK/response to gdb. Source code level: old gdb
resets lwp->stop_expected to 0 in linux-low.c::linux_attach if
!non_stop, but 'pedro@codesourcery.com' removes these lines in version
1.134 of linux-low.c. Instead, he replaced it with
'thread_last_resume_kind = resume_stop', which is supposed to work.
But as cross the different debug sessions on the same process (detach,
q; and attach again in multiple process debug mode), cont_thread is
saved and does not get reset at detaching. gdb server will use this
stale 'cont_thread' to make a decision: resume the stopped process in
the 2nd debug session. Thus, gdbserver does not get any chance of
returning the call from linux_wait, while gdb waits for its response,
until gdb tries 3 times of reading response.
The fix is to reset the cont_thread so that gdbserver won't use stale
states in multiple process mode.
Hope above explanation is clear. Adding ChangeLog and fixing the
format issue in comments. Feel free to make further adjustment on the
comments or the log if necessary.
Thanks
Liang
2011-06-27 Liang Cheng <liang.cheng555@gmail.com>
* linux-low.c (linux_detach): Reset cont_thread.
--- linux-low.c.orig 2011-05-04 15:20:12.000000000 -0500
+++ linux-low.c 2011-06-27 11:45:36.223194361 -0500
@@ -837,6 +837,9 @@
/* Since we presently can only stop all lwps of all processes, we
need to unstop lwps of other processes. */
unstop_all_lwps (0, NULL);
+
+ /* Reset cont_thread. */
+ cont_thread = null_ptid;
return 0;
}
On Mon, Jun 27, 2011 at 10:54 AM, Joel Brobecker <brobecker@adacore.com> wrote:
> Liang,
>
> Thanks for sending these patches in. I can't really approve your
> patches since I don't have expertise in that area, but I can comment
> on a couple of things:
> - It's great that you take the time to explain what the problem is;
> - Patches should have a ChangeLog entry to accompany them;
> - One nit: It's awesome that you take the time to add comments
> to document the code, and we don't use them often enough IMO.
> But I think that, in general, we want the comments in the code
> to say *why* you do what you do. And oh, comments should start
> with a capital letter, and end with a period (and we always put
> 2 spaces after period, even before a closing */
>
>> +
>> + /* reset cont_thread */
>> + cont_thread = null_ptid;
>> return 0;
>
> --
> Joel
>
prev parent reply other threads:[~2011-06-27 17:10 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-24 22:21 Liang Cheng
2011-06-27 15:54 ` Joel Brobecker
2011-06-27 17:10 ` Liang Cheng [this message]
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=BANLkTikF8Q4mt8KC-a7HE7hDzjsfuoamHw@mail.gmail.com \
--to=liang.cheng555@gmail.com \
--cc=brobecker@adacore.com \
--cc=gdb-patches@sourceware.org \
/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