Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: John Baldwin <jhb@FreeBSD.org>
To: gdb-patches@sourceware.org
Subject: [PATCH 1/3] Consolidate code to enable optional FreeBSD native target event reporting.
Date: Mon, 18 Jul 2016 14:58:00 -0000	[thread overview]
Message-ID: <20160718145759.58543-2-jhb@FreeBSD.org> (raw)
In-Reply-To: <20160718145759.58543-1-jhb@FreeBSD.org>

Add a new function to enable optional event reporting for FreeBSD native
targets.  Specifically, use this to enable fork and LWP events.
The bodies of fbsd_enable_follow_fork and fbsd_enable_lwp_events have been
subsumed into the new function.  In addition, use the PT_GET_EVENT_MASK
and PT_EVENT_SET_MASK requests added in FreeBSD 12 when present to enable
these events.

gdb/ChangeLog:

	* fbsd-nat.c (fbsd_enable_lwp_events): Remove function.
	(fbsd_enable_proc_events): New function.
	(fbsd_enable_follow_fork): Remove function.
	(fbsd_post_startup_inferior): Use "fbsd_enable_proc_events".
	(fbsd_post_attach): Likewise.
---
 gdb/ChangeLog  |  8 ++++++++
 gdb/fbsd-nat.c | 59 ++++++++++++++++++++++++++++------------------------------
 2 files changed, 36 insertions(+), 31 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 6c187dc..dcedc14 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,13 @@
 2016-07-15  John Baldwin  <jhb@FreeBSD.org>
 
+	* fbsd-nat.c (fbsd_enable_lwp_events): Remove function.
+	(fbsd_enable_proc_events): New function.
+	(fbsd_enable_follow_fork): Remove function.
+	(fbsd_post_startup_inferior): Use "fbsd_enable_proc_events".
+	(fbsd_post_attach): Likewise.
+
+2016-07-15  John Baldwin  <jhb@FreeBSD.org>
+
 	* common/signals.c (gdb_signal_from_host): Handle SIGLIBRT.
 	(do_gdb_signal_to_host): Likewise.
 	* infrun.c (_initialize_infrun): Pass GDB_SIGNAL_LIBRT through to
diff --git a/gdb/fbsd-nat.c b/gdb/fbsd-nat.c
index fa9516e..508ab19 100644
--- a/gdb/fbsd-nat.c
+++ b/gdb/fbsd-nat.c
@@ -412,22 +412,43 @@ fbsd_thread_name (struct target_ops *self, struct thread_info *thr)
 }
 #endif
 
-#ifdef PT_LWP_EVENTS
-/* Enable LWP events for a specific process.
+/* Enable additional event reporting on new processes.
 
-   To catch LWP events, PT_LWP_EVENTS is set on every traced process.
+   To catch fork events, PTRACE_FORK is set on every traced process
+   to enable stops on returns from fork or vfork.  Note that both the
+   parent and child will always stop, even if system call stops are
+   not enabled.
+
+   To catch LWP events, PTRACE_EVENTS is set on every traced process.
    This enables stops on the birth for new LWPs (excluding the "main" LWP)
    and the death of LWPs (excluding the last LWP in a process).  Note
    that unlike fork events, the LWP that creates a new LWP does not
    report an event.  */
 
 static void
-fbsd_enable_lwp_events (pid_t pid)
+fbsd_enable_proc_events (pid_t pid)
 {
+#ifdef PT_GET_EVENT_MASK
+  int events;
+
+  if (ptrace (PT_GET_EVENT_MASK, pid, (PTRACE_TYPE_ARG3)&events,
+	      sizeof (events)) == -1)
+    perror_with_name (("ptrace"));
+  events |= PTRACE_FORK | PTRACE_LWP;
+  if (ptrace (PT_SET_EVENT_MASK, pid, (PTRACE_TYPE_ARG3)&events,
+	      sizeof (events)) == -1)
+    perror_with_name (("ptrace"));
+#else
+#ifdef TDP_RFPPWAIT
+  if (ptrace (PT_FOLLOW_FORK, pid, (PTRACE_TYPE_ARG3)0, 1) == -1)
+    perror_with_name (("ptrace"));
+#endif
+#ifdef PT_LWP_EVENTS
   if (ptrace (PT_LWP_EVENTS, pid, (PTRACE_TYPE_ARG3)0, 1) == -1)
     perror_with_name (("ptrace"));
-}
 #endif
+#endif
+}
 
 /* Add threads for any new LWPs in a process.
 
@@ -957,20 +978,6 @@ fbsd_remove_vfork_catchpoint (struct target_ops *self, int pid)
 {
   return 0;
 }
-
-/* Enable fork tracing for a specific process.
-   
-   To catch fork events, PT_FOLLOW_FORK is set on every traced process
-   to enable stops on returns from fork or vfork.  Note that both the
-   parent and child will always stop, even if system call stops are
-   not enabled.  */
-
-static void
-fbsd_enable_follow_fork (pid_t pid)
-{
-  if (ptrace (PT_FOLLOW_FORK, pid, (PTRACE_TYPE_ARG3)0, 1) == -1)
-    perror_with_name (("ptrace"));
-}
 #endif
 
 /* Implement the "to_post_startup_inferior" target_ops method.  */
@@ -978,12 +985,7 @@ fbsd_enable_follow_fork (pid_t pid)
 static void
 fbsd_post_startup_inferior (struct target_ops *self, ptid_t pid)
 {
-#ifdef TDP_RFPPWAIT
-  fbsd_enable_follow_fork (ptid_get_pid (pid));
-#endif
-#ifdef PT_LWP_EVENTS
-  fbsd_enable_lwp_events (ptid_get_pid (pid));
-#endif
+  fbsd_enable_proc_events (ptid_get_pid (pid));
 }
 
 /* Implement the "to_post_attach" target_ops method.  */
@@ -991,12 +993,7 @@ fbsd_post_startup_inferior (struct target_ops *self, ptid_t pid)
 static void
 fbsd_post_attach (struct target_ops *self, int pid)
 {
-#ifdef TDP_RFPPWAIT
-  fbsd_enable_follow_fork (pid);
-#endif
-#ifdef PT_LWP_EVENTS
-  fbsd_enable_lwp_events (pid);
-#endif
+  fbsd_enable_proc_events (pid);
   fbsd_add_threads (pid);
 }
 
-- 
2.8.4


  reply	other threads:[~2016-07-18 14:58 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-18 14:58 [PATCH 0/3] Add "real" vfork done handling on FreeBSD John Baldwin
2016-07-18 14:58 ` John Baldwin [this message]
2016-07-18 14:58 ` [PATCH 2/3] Enable ptrace events on new child processes John Baldwin
2016-07-18 14:58 ` [PATCH 3/3] Use a real vfork done event on FreeBSD when available John Baldwin
2016-07-19 18:44 ` [PATCH 0/3] Add "real" vfork done handling on FreeBSD 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=20160718145759.58543-2-jhb@FreeBSD.org \
    --to=jhb@freebsd.org \
    --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