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.
This commit is contained in:
John Baldwin 2017-09-04 19:34:48 -07:00
parent f7efc967ba
commit a379bfd00e
3 changed files with 17 additions and 6 deletions

View File

@ -1,3 +1,9 @@
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.

View File

@ -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)

View File

@ -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)