diff options
author | Kamil Rytarowski <n54@gmx.com> | 2020-03-14 14:17:16 +0100 |
---|---|---|
committer | Kamil Rytarowski <n54@gmx.com> | 2020-03-14 14:20:40 +0100 |
commit | 013f99f035c49b000ca058db80ad15e00aa330dc (patch) | |
tree | c69c897cd3d013b2c4f3168c6cd699ee852a706f | |
parent | 6227b330d563add042066259e5f933c89a85b3b5 (diff) | |
download | gdb-013f99f035c49b000ca058db80ad15e00aa330dc.zip gdb-013f99f035c49b000ca058db80ad15e00aa330dc.tar.gz gdb-013f99f035c49b000ca058db80ad15e00aa330dc.tar.bz2 |
Add support for NetBSD threads in x86-bsd-nat.c
NetBSD ptrace(2) PT_GETDBREGS/PT_SETDBREGS accepts thread id (LWP)
as the 4th argument for threads.
gdb/ChangeLog:
* x86-bsd-nat.c (x86bsd_dr_get): New variable lwp and pass
it to the ptrace call.
* x86-bsd-nat.c (x86bsd_dr_set): Likewise.
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/x86-bsd-nat.c | 20 |
2 files changed, 23 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3421235..49e0335 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,11 @@ 2020-03-14 Kamil Rytarowski <n54@gmx.com> + * x86-bsd-nat.c (x86bsd_dr_get): New variable lwp and pass + it to the ptrace call. + * x86-bsd-nat.c (x86bsd_dr_set): Likewise. + +2020-03-14 Kamil Rytarowski <n54@gmx.com> + * vax-bsd-nat.c (vaxbsd_supply_gregset): New variable lwp and pass it to the ptrace call. * vax-bsd-nat.c (vaxbsd_collect_gregset): Likewise. diff --git a/gdb/x86-bsd-nat.c b/gdb/x86-bsd-nat.c index 2bb8f8a..640a3c2 100644 --- a/gdb/x86-bsd-nat.c +++ b/gdb/x86-bsd-nat.c @@ -56,9 +56,14 @@ static unsigned long x86bsd_dr_get (ptid_t ptid, int regnum) { struct dbreg dbregs; +#ifdef __NetBSD__ + int lwp = inferior_ptid.lwp (); +#else + int lwp = 0; +#endif if (ptrace (PT_GETDBREGS, get_ptrace_pid (inferior_ptid), - (PTRACE_TYPE_ARG3) &dbregs, 0) == -1) + (PTRACE_TYPE_ARG3) &dbregs, lwp) == -1) perror_with_name (_("Couldn't read debug registers")); return DBREG_DRX ((&dbregs), regnum); @@ -68,9 +73,14 @@ static void x86bsd_dr_set (int regnum, unsigned long value) { struct dbreg dbregs; +#ifdef __NetBSD__ + int lwp = inferior_ptid.lwp (); +#else + int lwp = 0; +#endif if (ptrace (PT_GETDBREGS, get_ptrace_pid (inferior_ptid), - (PTRACE_TYPE_ARG3) &dbregs, 0) == -1) + (PTRACE_TYPE_ARG3) &dbregs, lwp) == -1) perror_with_name (_("Couldn't get debug registers")); /* For some mysterious reason, some of the reserved bits in the @@ -82,8 +92,12 @@ x86bsd_dr_set (int regnum, unsigned long value) for (thread_info *thread : current_inferior ()->non_exited_threads ()) { +#ifdef __NetBSD__ + lwp = thread->ptid.lwp (); +#endif + if (ptrace (PT_SETDBREGS, get_ptrace_pid (thread->ptid), - (PTRACE_TYPE_ARG3) &dbregs, 0) == -1) + (PTRACE_TYPE_ARG3) &dbregs, lwp) == -1) perror_with_name (_("Couldn't write debug registers")); } } |