diff options
author | Kamil Rytarowski <n54@gmx.com> | 2020-04-16 17:36:32 +0200 |
---|---|---|
committer | Kamil Rytarowski <n54@gmx.com> | 2020-04-24 17:46:36 +0200 |
commit | 7632c6ce2bc013dd0402a2d942f78034fe73fbf9 (patch) | |
tree | 9d429b112e2c9185c30a985b7db17e60cb598fe5 /gdb/obsd-nat.c | |
parent | 86e887ae1183ded1c4bfba8617e4e19c8dfc8271 (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.c | 63 |
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 */ |