From: Simon Marchi <simon.marchi@efficios.com>
To: gdb-patches@sourceware.org
Subject: [PATCH] gdb: don't use inferior_ptid in linux_nat_wait_1
Date: Sat, 1 Aug 2020 18:24:32 -0400 [thread overview]
Message-ID: <20200801222432.7404-1-simon.marchi@efficios.com> (raw)
From: Simon Marchi <simon.marchi@polymtl.ca>
target_ops::wait implementations should not rely on the value of
inferior_ptid on entry. While looking at another wait-related patch, I
noticed that the code in linux_nat_wait_1, checking for a newly created
process, did just that. This patch fixes it. Note that I didn't see
any bug, this "fix" is simply to make the function respect the
target_ops::wait contract.
Instead of checking inferior_ptid, check for the passed in `ptid`
value.
During startup, linux_nat_wait_1 gets called a few times with the
pid-only ptid, while startup_inferior waits for the expected number of
exec events. For this reason, I needed to add a `find_lwp_pid` call to
ensure that the actions of changing the main thread's ptid, and adding
the initial lwp, were done only once for a given process.
This was not needed before, since thread_change_ptid, through the
thread_ptid_changed observer, ends up changing inferior_ptid. So the
second time around, inferior_ptid was not a pid-only ptid.
That find_lwp_pid won't add much overhead, as it will only be called
when the ptid is a pid-only ptid. And AFAIK, that only happens during
inferior startup.
An alternative to that `find_lwp_pid` call might be to make
startup_inferior realize that the main thread has changed ptid, and make
it wait for the new ptid. But that doesn't look easy to do.
Regtested on amd64/Linux.
gdb/ChangeLog:
* linux-nat.c (linux_nat_wait_1): Don't use inferior_ptid when
checking for initial lwp.
Change-Id: I8f1d5c766f5cb2a29c948bc75fa4582d7130c23f
---
gdb/linux-nat.c | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
index 20b03bc2ba9..75c6d219d6a 100644
--- a/gdb/linux-nat.c
+++ b/gdb/linux-nat.c
@@ -3277,14 +3277,13 @@ linux_nat_wait_1 (ptid_t ptid, struct target_waitstatus *ourstatus,
/* The first time we get here after starting a new inferior, we may
not have added it to the LWP list yet - this is the earliest
moment at which we know its PID. */
- if (inferior_ptid.is_pid ())
+ if (ptid.is_pid () && find_lwp_pid (ptid) == nullptr)
{
- /* Upgrade the main thread's ptid. */
- thread_change_ptid (linux_target, inferior_ptid,
- ptid_t (inferior_ptid.pid (),
- inferior_ptid.pid (), 0));
+ ptid_t lwp_ptid (ptid.pid (), ptid.pid ());
- lp = add_initial_lwp (inferior_ptid);
+ /* Upgrade the main thread's ptid. */
+ thread_change_ptid (linux_target, ptid, lwp_ptid);
+ lp = add_initial_lwp (lwp_ptid);
lp->resumed = 1;
}
--
2.28.0
next reply other threads:[~2020-08-01 22:24 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-01 22:24 Simon Marchi [this message]
2020-08-04 18:04 ` Tom Tromey
2020-08-04 18:49 ` Simon Marchi
2020-09-14 15:52 ` Simon Marchi
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=20200801222432.7404-1-simon.marchi@efficios.com \
--to=simon.marchi@efficios.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