aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2017-09-04 19:34:48 -0700
committerJohn Baldwin <jhb@FreeBSD.org>2017-09-04 19:34:48 -0700
commita379bfd00effbbb0fb4df02dc686c2c110023cea (patch)
treed952f87cb734f58eca2aa4a937f75879f00fffe3
parentf7efc967ba45350b688e0f661a31eecc15d5e052 (diff)
downloadgdb-a379bfd00effbbb0fb4df02dc686c2c110023cea.zip
gdb-a379bfd00effbbb0fb4df02dc686c2c110023cea.tar.gz
gdb-a379bfd00effbbb0fb4df02dc686c2c110023cea.tar.bz2
Enable support for x86 debug registers on NetBSD.
NetBSD recently added PT_GETDBREGS and PT_SETDBREGS ptrace operations that match the existing ones supported by x86-bsd-nat.c. NetBSD's headers do not provide the DBREG_DRX helper macro, so define a local version in x86-bsd-nat.c. In addition, add the x86-nat.o and x86-dregs.o object files to the native NetBSD x86 build targets. gdb/ChangeLog: * configure.nat: Add "x86-nat.o x86-dregs.o" for NetBSD/amd64 and NetBSD/i386. * x86-bsd-nat.c [!DBREG_DRX && __NetBSD__]: Define DBREG_DRX.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/configure.nat8
-rw-r--r--gdb/x86-bsd-nat.c9
3 files changed, 17 insertions, 6 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index ed89fbc..de1945a 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@
2017-09-04 John Baldwin <jhb@FreeBSD.org>
+ * configure.nat: Add "x86-nat.o x86-dregs.o" for NetBSD/amd64 and
+ NetBSD/i386.
+ * x86-bsd-nat.c [!DBREG_DRX && __NetBSD__]: Define DBREG_DRX.
+
+2017-09-04 John Baldwin <jhb@FreeBSD.org>
+
* bsd-kvm.o: Make <sys/user.h> conditional on HAVE_SYS_USER_H.
2017-09-04 John Baldwin <jhb@FreeBSD.org>
diff --git a/gdb/configure.nat b/gdb/configure.nat
index b32c9aa..b1dda30 100644
--- a/gdb/configure.nat
+++ b/gdb/configure.nat
@@ -338,8 +338,8 @@ case ${gdb_host} in
case ${gdb_host_cpu} in
i386)
# Host: NetBSD/amd64
- NATDEPFILES="${NATDEPFILES} nbsd-nat.o amd64-nat.o \
- x86-bsd-nat.o amd64-bsd-nat.o amd64-nbsd-nat.o"
+ NATDEPFILES="${NATDEPFILES} nbsd-nat.o amd64-nat.o x86-nat.o \
+ x86-dregs.o x86-bsd-nat.o amd64-bsd-nat.o amd64-nbsd-nat.o"
;;
sparc)
# Host: NetBSD/sparc64
@@ -358,8 +358,8 @@ case ${gdb_host} in
;;
i386)
# Host: NetBSD/i386 ELF
- NATDEPFILES="${NATDEPFILES} nbsd-nat.o x86-bsd-nat.o \
- i386-bsd-nat.o i386-nbsd-nat.o bsd-kvm.o"
+ NATDEPFILES="${NATDEPFILES} nbsd-nat.o x86-nat.o x86-dregs.o \
+ x86-bsd-nat.o i386-bsd-nat.o i386-nbsd-nat.o bsd-kvm.o"
LOADLIBES='-lkvm'
;;
m68k)
diff --git a/gdb/x86-bsd-nat.c b/gdb/x86-bsd-nat.c
index 2ff661c..1d37b2f 100644
--- a/gdb/x86-bsd-nat.c
+++ b/gdb/x86-bsd-nat.c
@@ -51,11 +51,16 @@ x86bsd_mourn_inferior (struct target_ops *ops)
super_mourn_inferior (ops);
}
-/* Not all versions of FreeBSD/i386 that support the debug registers
- have this macro. */
+/* Helper macro to access debug register X. FreeBSD/amd64 and modern
+ versions of FreeBSD/i386 provide this macro in system headers. Define
+ a local version for systems that do not provide it. */
#ifndef DBREG_DRX
+#ifdef __NetBSD__
+#define DBREG_DRX(d, x) ((d)->dr[x])
+#else
#define DBREG_DRX(d, x) ((&d->dr0)[x])
#endif
+#endif
static unsigned long
x86bsd_dr_get (ptid_t ptid, int regnum)