mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-06 12:09:26 +08:00
42acc96479
- Don't use #ifdef's on ptrace ops. obsd-nat.h didn't include <sys/ptrace.h>, so the virtual methods weren't always overridden causing the fork following to not work. In addition, the thread and fork code is intertwined in ::wait and and the lack of #ifdef's there already assumed both were present. Finally, both of these ptrace ops have been present in OpenBSD for at least 10 years. - Move duplicated code to enable PTRACE_FORK event reporting to a single function and invoke it on new child processes reported via PTRACE_FORK. - Don't return early from PTRACE_FORK handling, but instead reset wptid to the correct ptid if the child reports its event before the parent. This allows the ptid fixup code to add thread IDs if the first event for a process is a PTRACE_FORK event. This also properly returns ptid's with thread IDs when reporting PTRACE_FORK events. - Handle detach_fork by skipping the PT_DETACH.
44 lines
1.3 KiB
C++
44 lines
1.3 KiB
C++
/* Native-dependent code for OpenBSD.
|
|
|
|
Copyright (C) 2014-2021 Free Software Foundation, Inc.
|
|
|
|
This file is part of GDB.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
#ifndef OBSD_NAT_H
|
|
#define OBSD_NAT_H
|
|
|
|
#include "inf-ptrace.h"
|
|
|
|
class obsd_nat_target : public inf_ptrace_target
|
|
{
|
|
/* Override some methods to support threads. */
|
|
std::string pid_to_str (ptid_t) override;
|
|
void update_thread_list () override;
|
|
ptid_t wait (ptid_t, struct target_waitstatus *, target_wait_flags) override;
|
|
|
|
void follow_fork (ptid_t, target_waitkind, bool, bool) override;
|
|
|
|
int insert_fork_catchpoint (int) override;
|
|
|
|
int remove_fork_catchpoint (int) override;
|
|
|
|
void post_startup_inferior (ptid_t) override;
|
|
|
|
void post_attach (int) override;
|
|
};
|
|
|
|
#endif /* obsd-nat.h */
|