mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-15 04:31:49 +08:00
Linux: No need to set ptrace event options in fork/clone children.
Oleg Nesterov told me that the Linux kernel copies the parent's ptrace options to fork/clone children, so there's no need for GDB to do that manually. I was actually a bit surprised, since I thought the ptracer had to always set the ptrace options itself, and GDB is indeed calling PTRACE_SETOPTIONS for each new fork child, if it'll stay attached. Looking at the history of that code, I found that is was actually I who added that set-ptrace-options-in-children bit, back in http://sourceware.org/ml/gdb-patches/2009-05/msg00656.html. But, honestly, I don't recall why I needed that. I think I may have just blindly believed it was necessary. I then looked back at the history of all the PTRACE_SETOPTIONS code we have, and found that gdb never did copy the ptrace options before my patch. But, when gdbserver learnt to use PTRACE_EVENT_CLONE, at http://sourceware.org/ml/gdb-patches/2007-10/msg00547.html, it was made to do 'ptrace (PTRACE_SETOPTIONS, new_pid, 0, PTRACE_O_TRACECLONE)' for all new clones. Hmmm. But, GDB itself never did that, so it can't really ever have been necessary, I believe, otherwise GDB should have been doing it too. (GDBserver doesn't support following forks, and so naturally doesn't do any PTRACE_SETOPTIONS on fork children.) So this patch removes the -I believe- unnecessary ptrace syscalls. Tested on x86_64 Fedora 17, native/gdbserver, and on x86_64 RHEL5 native/gdbserver (Linux 2.6.18, I think a ptrace-on-utrace kernel). No regressions. gdb/ 2013-03-22 Pedro Alves <palves@redhat.com> * linux-nat.c (linux_child_follow_fork): Don't call linux_enable_event_reporting. (linux_handle_extended_wait): Don't call linux_enable_event_reporting. gdb/gdbserver/ 2013-03-22 Pedro Alves <palves@redhat.com> * linux-low.c (handle_extended_wait): Don't call linux_enable_event_reporting.
This commit is contained in:
parent
a2213dca18
commit
3e74e146f2
@ -1,3 +1,10 @@
|
||||
2013-03-22 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* linux-nat.c (linux_child_follow_fork): Don't call
|
||||
linux_enable_event_reporting.
|
||||
(linux_handle_extended_wait): Don't call
|
||||
linux_enable_event_reporting.
|
||||
|
||||
2013-03-22 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* hppa-hpux-tdep.c (hppa_hpux_push_dummy_code): Define INSN macro,
|
||||
|
@ -1,3 +1,8 @@
|
||||
2013-03-22 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* linux-low.c (handle_extended_wait): Don't call
|
||||
linux_enable_event_reporting.
|
||||
|
||||
2013-03-15 Tony Theodore <tonyt@logyst.com>
|
||||
|
||||
PR build/9098:
|
||||
|
@ -468,8 +468,6 @@ handle_extended_wait (struct lwp_info *event_child, int wstat)
|
||||
warning ("wait returned unexpected status 0x%x", status);
|
||||
}
|
||||
|
||||
linux_enable_event_reporting (new_pid);
|
||||
|
||||
ptid = ptid_build (pid_of (event_child), new_pid, 0);
|
||||
new_lwp = (struct lwp_info *) add_lwp (ptid);
|
||||
add_thread (ptid, new_lwp);
|
||||
|
@ -643,9 +643,6 @@ linux_child_follow_fork (struct target_ops *ops, int follow_child)
|
||||
parent_pid = ptid_get_pid (inferior_ptid);
|
||||
child_pid = PIDGET (inferior_thread ()->pending_follow.value.related_pid);
|
||||
|
||||
if (!detach_fork)
|
||||
linux_enable_event_reporting (pid_to_ptid (child_pid));
|
||||
|
||||
if (has_vforked
|
||||
&& !non_stop /* Non-stop always resumes both branches. */
|
||||
&& (!target_is_async_p () || sync_execution)
|
||||
@ -2316,7 +2313,6 @@ linux_handle_extended_wait (struct lwp_info *lp, int status,
|
||||
this fork. We're actually doing an infcall in
|
||||
linux-fork.c. */
|
||||
ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
|
||||
linux_enable_event_reporting (pid_to_ptid (new_pid));
|
||||
|
||||
/* Report the stop to the core. */
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user