From 4816ec693b135323fdac7646368873c269d8eb8e Mon Sep 17 00:00:00 2001 From: Mark Kettenis Date: Mon, 31 Jul 2006 20:15:50 +0000 Subject: [PATCH] * alpha-tdep.h (ALPHA_S0_REGNUM): New define. * alphabsd-nat.c: Include , , and "bsd-kvm.h". (alphabsd_supply_pcb): New function. (_initialize_alphabsd_nat): Enable libkvm interface. * Makefile.in (alphabsd-nat.o): Update dependencies. * config/alpha/fbsd.mh (NATDEPFILES): Add bsd-kvm.o. (LOADLIBES): New variable. * config/alpha/nbsd.mh (NATDEPFILES): Add bsd-kvm.o. (LOADLIBES): New variable. --- gdb/ChangeLog | 13 +++++++++++++ gdb/Makefile.in | 3 ++- gdb/alpha-tdep.h | 1 + gdb/alphabsd-nat.c | 40 +++++++++++++++++++++++++++++++++++++++- gdb/config/alpha/fbsd.mh | 4 +++- gdb/config/alpha/nbsd.mh | 4 +++- 6 files changed, 61 insertions(+), 4 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 73ce895..c16fd24 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,16 @@ +2006-07-31 Mark Kettenis + + * alpha-tdep.h (ALPHA_S0_REGNUM): New define. + * alphabsd-nat.c: Include , , + and "bsd-kvm.h". + (alphabsd_supply_pcb): New function. + (_initialize_alphabsd_nat): Enable libkvm interface. + * Makefile.in (alphabsd-nat.o): Update dependencies. + * config/alpha/fbsd.mh (NATDEPFILES): Add bsd-kvm.o. + (LOADLIBES): New variable. + * config/alpha/nbsd.mh (NATDEPFILES): Add bsd-kvm.o. + (LOADLIBES): New variable. + 2006-07-31 Fred Fish * arm-tdep.c (arm_make_prologue_cache): Use FRAME_OBSTACK_ZALLOC diff --git a/gdb/Makefile.in b/gdb/Makefile.in index f6f24b7..3f3673f 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -1694,7 +1694,8 @@ aix-thread.o: aix-thread.c $(defs_h) $(gdb_assert_h) $(gdbthread_h) \ $(target_h) $(inferior_h) $(regcache_h) $(gdbcmd_h) $(ppc_tdep_h) \ $(gdb_string_h) alphabsd-nat.o: alphabsd-nat.c $(defs_h) $(inferior_h) $(regcache_h) \ - $(alpha_tdep_h) $(alphabsd_tdep_h) $(inf_ptrace_h) $(gregset_h) + $(alpha_tdep_h) $(alphabsd_tdep_h) $(inf_ptrace_h) $(gregset_h) \ + $(bsd_kvm_h) alphabsd-tdep.o: alphabsd-tdep.c $(defs_h) $(alpha_tdep_h) \ $(alphabsd_tdep_h) alphafbsd-tdep.o: alphafbsd-tdep.c $(defs_h) $(value_h) $(osabi_h) \ diff --git a/gdb/alpha-tdep.h b/gdb/alpha-tdep.h index 69fc9d2..13b40fa 100644 --- a/gdb/alpha-tdep.h +++ b/gdb/alpha-tdep.h @@ -40,6 +40,7 @@ #define ALPHA_V0_REGNUM 0 /* Function integer return value */ #define ALPHA_T7_REGNUM 8 /* Return address register for OSF/1 __add* */ +#define ALPHA_S0_REGNUM 9 /* First saved register */ #define ALPHA_GCC_FP_REGNUM 15 /* Used by gcc as frame register */ #define ALPHA_A0_REGNUM 16 /* Loc of first arg during a subr call */ #define ALPHA_T9_REGNUM 23 /* Return address register for OSF/1 __div* */ diff --git a/gdb/alphabsd-nat.c b/gdb/alphabsd-nat.c index 2b8c96d..8db1230 100644 --- a/gdb/alphabsd-nat.c +++ b/gdb/alphabsd-nat.c @@ -1,6 +1,7 @@ /* Native-dependent code for Alpha BSD's. - Copyright (C) 2000, 2001, 2002, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006 + Free Software Foundation, Inc. This file is part of GDB. @@ -150,6 +151,40 @@ alphabsd_store_inferior_registers (int regno) perror_with_name (_("Couldn't write floating point status")); } } + + +/* Support for debugging kernel virtual memory images. */ + +#include +#include +#include + +#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 = ALPHA_S0_REGNUM; regnum < ALPHA_A0_REGNUM; regnum++) + regcache_raw_supply (regcache, regnum, + &pcb->pcb_context[regnum - ALPHA_S0_REGNUM]); + 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 +198,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/gdb/config/alpha/fbsd.mh b/gdb/config/alpha/fbsd.mh index 9765ad9..e189426 100644 --- a/gdb/config/alpha/fbsd.mh +++ b/gdb/config/alpha/fbsd.mh @@ -1,4 +1,6 @@ # Host: FreeBSD/alpha NATDEPFILES= fork-child.o inf-ptrace.o \ - fbsd-nat.o alphabsd-nat.o \ + fbsd-nat.o alphabsd-nat.o bsd-kvm.o \ gcore.o corelow.o core-regset.o + +LOADLIBES= -lkvm diff --git a/gdb/config/alpha/nbsd.mh b/gdb/config/alpha/nbsd.mh index b6ab74b..b4185a7 100644 --- a/gdb/config/alpha/nbsd.mh +++ b/gdb/config/alpha/nbsd.mh @@ -1,2 +1,4 @@ # Host: NetBSD/alpha -NATDEPFILES= fork-child.o inf-ptrace.o alphabsd-nat.o +NATDEPFILES= fork-child.o inf-ptrace.o alphabsd-nat.o bsd-kvm.o + +LOADLIBES= -lkvm -- 2.7.4