[2/2] Set debug registers on all threads belonging to the current inferior.

Message ID 20160628225507.80772-3-jhb@FreeBSD.org
State New, archived
Headers

Commit Message

John Baldwin June 28, 2016, 10:55 p.m. UTC
  gdb/ChangeLog:

	* x86bsd-nat.c: Include 'gdbthread.h'.
	(x86bsd_dr_set): Set debug registers on all threads belonging to
	the current inferior.
---
 gdb/ChangeLog    |  6 ++++++
 gdb/x86bsd-nat.c | 12 +++++++++---
 2 files changed, 15 insertions(+), 3 deletions(-)
  

Patch

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 50c441f..0d9a68b 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@ 
 2016-06-27  John Baldwin  <jhb@FreeBSD.org>
 
+	* x86bsd-nat.c: Include 'gdbthread.h'.
+	(x86bsd_dr_set): Set debug registers on all threads belonging to
+	the current inferior.
+
+2016-06-27  John Baldwin  <jhb@FreeBSD.org>
+
 	* Makefile.in [HFILES_NO_SRCDIR]: Replace 'amd64bsd-nat.h' with
 	'x86bsd-nat.h'.
 	* amd64bsd-nat.c: Include 'x86bsd-nat.h' instead of
diff --git a/gdb/x86bsd-nat.c b/gdb/x86bsd-nat.c
index 0c56848..7703ed5 100644
--- a/gdb/x86bsd-nat.c
+++ b/gdb/x86bsd-nat.c
@@ -19,6 +19,7 @@ 
 
 #include "defs.h"
 #include "inferior.h"
+#include "gdbthread.h"
 
 /* We include <signal.h> to make sure `struct fxsave64' is defined on
    NetBSD, since NetBSD's <machine/reg.h> needs it.  */
@@ -71,6 +72,7 @@  x86bsd_dr_get (ptid_t ptid, int regnum)
 static void
 x86bsd_dr_set (int regnum, unsigned long value)
 {
+  struct thread_info *thread;
   struct dbreg dbregs;
 
   if (ptrace (PT_GETDBREGS, get_ptrace_pid (inferior_ptid),
@@ -84,9 +86,13 @@  x86bsd_dr_set (int regnum, unsigned long value)
 
   DBREG_DRX ((&dbregs), regnum) = value;
 
-  if (ptrace (PT_SETDBREGS, get_ptrace_pid (inferior_ptid),
-              (PTRACE_TYPE_ARG3) &dbregs, 0) == -1)
-    perror_with_name (_("Couldn't write debug registers"));
+  ALL_NON_EXITED_THREADS(thread)
+    if (thread->inf == current_inferior ())
+      {
+	if (ptrace (PT_SETDBREGS, get_ptrace_pid (thread->ptid),
+		    (PTRACE_TYPE_ARG3) &dbregs, 0) == -1)
+	  perror_with_name (_("Couldn't write debug registers"));
+      }
 }
 
 static void