summaryrefslogtreecommitdiff
path: root/gdb/obsd-nat.c
diff options
context:
space:
mode:
authorKamil Rytarowski <n54@gmx.com>2020-04-16 17:36:32 +0200
committerKamil Rytarowski <n54@gmx.com>2020-04-24 17:46:36 +0200
commit7632c6ce2bc013dd0402a2d942f78034fe73fbf9 (patch)
tree9d429b112e2c9185c30a985b7db17e60cb598fe5 /gdb/obsd-nat.c
parent86e887ae1183ded1c4bfba8617e4e19c8dfc8271 (diff)
Move OpenBSD-only functions from inf-ptrace to obsd-nat
All major BSDs implement PT_GET_PROCESS_STATE, but they differ in details and want to implement follow-fork functionality differently. gdb/ChangeLog: * inf-ptrace.h (follow_fork, insert_fork_catchpoint) (remove_fork_catchpoint, post_startup_inferior) (post_attach): Move... * obsd-nat.h (follow_fork, insert_fork_catchpoint) (remove_fork_catchpoint, post_startup_inferior) (post_attach): ...here. * inf-ptrace.c (follow_fork, insert_fork_catchpoint) (remove_fork_catchpoint, post_startup_inferior) (post_attach): Move... * obsd-nat.c (follow_fork, insert_fork_catchpoint) (remove_fork_catchpoint, post_startup_inferior) (post_attach): ...here.
Diffstat (limited to 'gdb/obsd-nat.c')
-rw-r--r--gdb/obsd-nat.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/gdb/obsd-nat.c b/gdb/obsd-nat.c
index b1f3d0b1b4..6667a0add7 100644
--- a/gdb/obsd-nat.c
+++ b/gdb/obsd-nat.c
@@ -161,3 +161,66 @@ obsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
}
#endif /* PT_GET_THREAD_FIRST */
+
+#ifdef PT_GET_PROCESS_STATE
+
+void
+obsd_nat_target::post_attach (int pid)
+{
+ ptrace_event_t pe;
+
+ /* Set the initial event mask. */
+ memset (&pe, 0, sizeof pe);
+ pe.pe_set_event |= PTRACE_FORK;
+ if (ptrace (PT_SET_EVENT_MASK, pid,
+ (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1)
+ perror_with_name (("ptrace"));
+}
+
+void
+obsd_nat_target::post_startup_inferior (ptid_t pid)
+{
+ ptrace_event_t pe;
+
+ /* Set the initial event mask. */
+ memset (&pe, 0, sizeof pe);
+ pe.pe_set_event |= PTRACE_FORK;
+ if (ptrace (PT_SET_EVENT_MASK, pid.pid (),
+ (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1)
+ perror_with_name (("ptrace"));
+}
+
+/* Target hook for follow_fork. On entry and at return inferior_ptid is
+ the ptid of the followed inferior. */
+
+bool
+obsd_nat_target::follow_fork (bool follow_child, bool detach_fork)
+{
+ if (!follow_child)
+ {
+ struct thread_info *tp = inferior_thread ();
+ pid_t child_pid = tp->pending_follow.value.related_pid.pid ();
+
+ /* Breakpoints have already been detached from the child by
+ infrun.c. */
+
+ if (ptrace (PT_DETACH, child_pid, (PTRACE_TYPE_ARG3)1, 0) == -1)
+ perror_with_name (("ptrace"));
+ }
+
+ return false;
+}
+
+int
+obsd_nat_target::insert_fork_catchpoint (int pid)
+{
+ return 0;
+}
+
+int
+obsd_nat_target::remove_fork_catchpoint (int pid)
+{
+ return 0;
+}
+
+#endif /* PT_GET_PROCESS_STATE */