Add netbsd_nat::enable_proc_events in gdb/nat
authorKamil Rytarowski <n54@gmx.com>
Wed, 2 Sep 2020 17:18:55 +0000 (19:18 +0200)
committerKamil Rytarowski <n54@gmx.com>
Thu, 10 Sep 2020 13:38:23 +0000 (15:38 +0200)
Add generic function to enable debugger events in a process.

gdb/ChangeLog:

        * netbsd-nat.h (netbsd_nat::enable_proc_events): Add.
* netbsd-nat.c: Include <sys/ptrace.h>.
* (netbsd_nat::enable_proc_events): Add.

gdb/ChangeLog
gdb/nat/netbsd-nat.c
gdb/nat/netbsd-nat.h

index 21f30e4b297e8f83d7a5ff1193c5e7577eeb4568..41bd6998bb96a3f69ec87c43fd305ae7b2556794 100644 (file)
@@ -1,3 +1,9 @@
+2020-09-10  Kamil Rytarowski  <n54@gmx.com>
+
+       * netbsd-nat.h (netbsd_nat::enable_proc_events): Add.
+       * netbsd-nat.c: Include <sys/ptrace.h>.
+       * (netbsd_nat::enable_proc_events): Add.
+
 2020-09-10  Kamil Rytarowski  <n54@gmx.com>
 
        * netbsd-nat.h: Include "gdbsupport/function-view.h".
index 3f8b8b8eeab3acfe5dc1b9ff76f8f4ea81ef3542..d805b892404e2d3dc0e67bd9573bcad8cc96c523 100644 (file)
@@ -22,6 +22,7 @@
 #include "gdbsupport/common-debug.h"
 
 #include <sys/types.h>
+#include <sys/ptrace.h>
 #include <sys/sysctl.h>
 
 #include <cstring>
@@ -163,4 +164,21 @@ for_each_thread (pid_t pid, gdb::function_view<void (ptid_t)> callback)
   netbsd_thread_lister (pid, fn);
 }
 
+/* See netbsd-nat.h.  */
+
+void
+enable_proc_events (pid_t pid)
+{
+  int events;
+
+  if (ptrace (PT_GET_EVENT_MASK, pid, &events, sizeof (events)) == -1)
+    perror_with_name (("ptrace"));
+
+  events |= PTRACE_LWP_CREATE;
+  events |= PTRACE_LWP_EXIT;
+
+  if (ptrace (PT_SET_EVENT_MASK, pid, &events, sizeof (events)) == -1)
+    perror_with_name (("ptrace"));
+}
+
 }
index 3f2650f5cada24ace1e912d1425e2bcf48ba03c6..6472cc56da41dcd84696ab87cc2b5bc98c315f22 100644 (file)
@@ -50,6 +50,13 @@ extern const char *thread_name (ptid_t ptid);
 
 extern void for_each_thread (pid_t pid,
                             gdb::function_view<void (ptid_t)> callback);
+
+/* Enable additional event reporting in a new process specified by PID.
+
+   This function assumes internally that the queried process is stopped and
+   traced.  */
+
+extern void enable_proc_events (pid_t pid);
 }
 
 #endif