public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Pedro Alves <pedro@palves.net>
To: gdb-patches@sourceware.org
Subject: [PATCH 07/25] Thread options & clone events (native Linux)
Date: Mon, 20 Jun 2022 23:54:01 +0100	[thread overview]
Message-ID: <20220620225419.382221-8-pedro@palves.net> (raw)
In-Reply-To: <20220620225419.382221-1-pedro@palves.net>

This commit teaches the native Linux target about the GDB_TO_CLONE
thread option.  It's actually simpler to just continue reporting all
clone events unconditionally to the core.  There's never any harm in
reporting a clone event when the option is disabled.  All we need to
do is copy the thread options from clone parent to clone child, and
report support for the option, otherwise GDB falls back to use
target_thread_events().

Change-Id: If271f20320d864f074d8ac0d531cc1a323da847f
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=19675
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=27830
---
 gdb/linux-nat.c | 26 +++++++++++++++++++++++++-
 gdb/linux-nat.h |  3 +++
 2 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
index 138632667e4..a446a755242 100644
--- a/gdb/linux-nat.c
+++ b/gdb/linux-nat.c
@@ -1863,6 +1863,8 @@ linux_nat_target::follow_clone (ptid_t child_ptid)
   lwp_info *new_lp = add_lwp (child_ptid);
   new_lp->stopped = 1;
 
+  thread_info *new_thr = nullptr;
+
   /* If the thread_db layer is active, let it record the user
      level thread id and status, and add the thread to GDB's
      list.  */
@@ -1871,12 +1873,19 @@ linux_nat_target::follow_clone (ptid_t child_ptid)
       /* The process is not using thread_db.  Add the LWP to
 	 GDB's list.  */
       target_post_attach (new_lp->ptid.lwp ());
-      add_thread (linux_target, new_lp->ptid);
+      new_thr = add_thread (linux_target, new_lp->ptid);
     }
+  else
+    new_thr = find_thread_ptid (linux_target, new_lp->ptid);
+
+  gdb_assert (new_thr != nullptr);
 
   /* We just created NEW_LP so it cannot yet contain STATUS.  */
   gdb_assert (new_lp->status == 0);
 
+  /* Copy parent options to the child.  */
+  new_thr->set_thread_options (inferior_thread ()->thread_options ());
+
   if (!pull_pid_from_list (&stopped_pids, child_ptid.lwp (), &new_lp->status))
     internal_error (__FILE__, __LINE__, _("no saved status for clone lwp"));
 
@@ -4397,6 +4406,21 @@ linux_nat_target::thread_events (int enable)
   report_thread_events = enable;
 }
 
+bool
+linux_nat_target::supports_set_thread_options (gdb_thread_options options)
+{
+  constexpr gdb_thread_options supported_options = GDB_TO_CLONE;
+  return ((options & supported_options) == options);
+}
+
+void
+linux_nat_target::set_thread_options (thread_info *thr,
+				      gdb_thread_options options)
+{
+  /* Nothing to do.  target_set_thread_options already recorded the
+     options in THR.  */
+}
+
 linux_nat_target::linux_nat_target ()
 {
   /* We don't change the stratum; this target will sit at
diff --git a/gdb/linux-nat.h b/gdb/linux-nat.h
index 683173dbd38..b848c9bac6a 100644
--- a/gdb/linux-nat.h
+++ b/gdb/linux-nat.h
@@ -82,6 +82,9 @@ class linux_nat_target : public inf_ptrace_target
 
   void thread_events (int) override;
 
+  bool supports_set_thread_options (gdb_thread_options options) override;
+  void set_thread_options (thread_info *, gdb_thread_options) override;
+
   bool can_async_p () override;
 
   bool supports_non_stop () override;
-- 
2.36.0


  parent reply	other threads:[~2022-06-20 22:54 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-20 22:53 [PATCH 00/25] Step over thread clone and thread exit Pedro Alves
2022-06-20 22:53 ` [PATCH 01/25] Don't use pthread_mutex_t in gdb.base/step-over-clone.c Pedro Alves
2022-07-13 21:35   ` Pedro Alves
2022-06-20 22:53 ` [PATCH 02/25] displaced step: pass down target_waitstatus instead of gdb_signal Pedro Alves
2022-06-20 22:53 ` [PATCH 03/25] linux-nat: introduce pending_status_str Pedro Alves
2022-06-20 22:53 ` [PATCH 04/25] Step over clone syscall w/ breakpoint, TARGET_WAITKIND_THREAD_CLONED Pedro Alves
2022-06-20 22:53 ` [PATCH 05/25] Support clone events in the remote protocol Pedro Alves
2022-06-20 22:54 ` [PATCH 06/25] Thread options & clone events (core + remote) Pedro Alves
2022-06-20 22:54 ` Pedro Alves [this message]
2022-06-20 22:54 ` [PATCH 08/25] Thread options & clone events (Linux GDBserver) Pedro Alves
2022-06-20 22:54 ` [PATCH 09/25] gdbserver: Hide and don't detach pending clone children Pedro Alves
2022-06-20 22:54 ` [PATCH 10/25] Remove gdb/19675 kfails (displaced stepping + clone) Pedro Alves
2022-06-20 22:54 ` [PATCH 11/25] Add test for stepping over clone syscall Pedro Alves
2022-06-20 22:54 ` [PATCH 12/25] all-stop/synchronous RSP support thread-exit events Pedro Alves
2022-06-20 22:54 ` [PATCH 13/25] Introduce GDB_TO_EXIT thread option, fix step-over-thread-exit Pedro Alves
2022-06-20 22:54 ` [PATCH 14/25] Implement GDB_TO_EXIT support for Linux GDBserver Pedro Alves
2022-06-20 22:54 ` [PATCH 15/25] Implement GDB_TO_EXIT support for native Linux Pedro Alves
2022-06-20 22:54 ` [PATCH 16/25] gdb: clear step over information on thread exit (PR gdb/27338) Pedro Alves
2022-06-20 22:54 ` [PATCH 17/25] stop_all_threads: (re-)enable async before waiting for stops Pedro Alves
2022-06-20 22:54 ` [PATCH 18/25] gdbserver: Queue no-resumed event after thread exit Pedro Alves
2022-06-20 22:54 ` [PATCH 19/25] Don't resume new threads if scheduler-locking is in effect Pedro Alves
2022-06-21 11:07   ` Eli Zaretskii
2022-07-11 14:20     ` Pedro Alves
2022-07-11 15:44       ` Eli Zaretskii
2022-07-11 16:09         ` Pedro Alves
2022-07-11 16:30           ` Eli Zaretskii
2022-07-11 16:38             ` Pedro Alves
2022-07-11 17:00               ` Eli Zaretskii
2022-07-11 17:48                 ` Pedro Alves
2022-07-11 17:50                   ` Eli Zaretskii
2022-07-11 18:18                     ` Pedro Alves
2022-07-11 18:29                       ` Eli Zaretskii
2022-07-11 19:39                         ` Pedro Alves
2022-07-12 16:08                           ` Eli Zaretskii
2022-07-12 17:14                             ` Pedro Alves
2022-06-20 22:54 ` [PATCH 20/25] Tighten gdb.threads/no-unwaited-for-left.exp regexps Pedro Alves
2022-07-13 21:32   ` Pedro Alves
2022-06-20 22:54 ` [PATCH 21/25] Report thread exit event for leader if reporting thread exit events Pedro Alves
2022-06-20 22:54 ` [PATCH 22/25] Ignore failure to read PC when resuming Pedro Alves
2022-06-20 22:54 ` [PATCH 23/25] gdb/testsuite/lib/my-syscalls.S: Refactor new SYSCALL macro Pedro Alves
2022-06-20 22:54 ` [PATCH 24/25] Testcases for stepping over thread exit syscall (PR gdb/27338) Pedro Alves
2022-06-20 22:54 ` [PATCH 25/25] Document remote clone events, and QThreadOptions packet Pedro Alves
2022-06-21 12:07   ` Eli Zaretskii
2022-07-11 15:19     ` Pedro Alves
2022-07-11 16:09       ` Eli Zaretskii
2022-07-11 16:54         ` Pedro Alves
2022-07-11 17:02           ` Eli Zaretskii

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=20220620225419.382221-8-pedro@palves.net \
    --to=pedro@palves.net \
    --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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).