diff options
Diffstat (limited to 'gnu/usr.bin/binutils/gdb')
-rw-r--r-- | gnu/usr.bin/binutils/gdb/alphabsd-nat.c | 35 | ||||
-rw-r--r-- | gnu/usr.bin/binutils/gdb/config/alpha/obsd.mh | 6 | ||||
-rw-r--r-- | gnu/usr.bin/binutils/gdb/configure.host | 2 |
3 files changed, 42 insertions, 1 deletions
diff --git a/gnu/usr.bin/binutils/gdb/alphabsd-nat.c b/gnu/usr.bin/binutils/gdb/alphabsd-nat.c index 5792ecc5344..13273cc6296 100644 --- a/gnu/usr.bin/binutils/gdb/alphabsd-nat.c +++ b/gnu/usr.bin/binutils/gdb/alphabsd-nat.c @@ -150,6 +150,38 @@ alphabsd_store_inferior_registers (int regno) perror_with_name (_("Couldn't write floating point status")); } } + + +/* Support for debugging kernel virtual memory images. */ + +#include <sys/types.h> +#include <machine/pcb.h> + +#include "bsd-kvm.h" + +static int +alphabsd_supply_pcb (struct regcache *regcache, struct pcb *pcb) +{ + int regnum; + + /* The following is true for OpenBSD 3.9: + + The pcb contains the register state at the context switch inside + cpu_switch(). */ + + /* The stack pointer shouldn't be zero. */ + if (pcb->pcb_hw.apcb_ksp == 0) + return 0; + + regcache_raw_supply (regcache, ALPHA_SP_REGNUM, &pcb->pcb_hw.apcb_ksp); + + for (regnum = 9; regnum < 16; regnum ++) /* s0-s6 */ + regcache_raw_supply (regcache, regnum, &pcb->pcb_context[regnum - 9]); + regcache_raw_supply (regcache, ALPHA_RA_REGNUM, &pcb->pcb_context[7]); + + return 1; +} + /* Provide a prototype to silence -Wmissing-prototypes. */ void _initialize_alphabsd_nat (void); @@ -163,4 +195,7 @@ _initialize_alphabsd_nat (void) t->to_fetch_registers = alphabsd_fetch_inferior_registers; t->to_store_registers = alphabsd_store_inferior_registers; add_target (t); + + /* Support debugging kernel virtual memory images. */ + bsd_kvm_add_target (alphabsd_supply_pcb); } diff --git a/gnu/usr.bin/binutils/gdb/config/alpha/obsd.mh b/gnu/usr.bin/binutils/gdb/config/alpha/obsd.mh new file mode 100644 index 00000000000..5b13449a801 --- /dev/null +++ b/gnu/usr.bin/binutils/gdb/config/alpha/obsd.mh @@ -0,0 +1,6 @@ +# Host: OpenBSD/alpha +NATDEPFILES= fork-child.o inf-ptrace.o \ + alphabsd-nat.o bsd-kvm.o +NAT_FILE= nm-nbsd.h + +LOADLIBES= -lkvm diff --git a/gnu/usr.bin/binutils/gdb/configure.host b/gnu/usr.bin/binutils/gdb/configure.host index 559973ee3cb..5d9d6506d09 100644 --- a/gnu/usr.bin/binutils/gdb/configure.host +++ b/gnu/usr.bin/binutils/gdb/configure.host @@ -43,7 +43,7 @@ alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu) gdb_host=fbsd ;; alpha*-*-netbsd* | alpha*-*-knetbsd*-gnu) gdb_host=nbsd ;; -alpha*-*-openbsd*) gdb_host=nbsd ;; +alpha*-*-openbsd*) gdb_host=obsd ;; arm*-*-linux*) gdb_host=linux ;; arm*-*-netbsdelf* | arm*-*-knetbsd*-gnu) |