diff options
author | Mark Kettenis <kettenis@gnu.org> | 2006-07-31 20:15:50 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@gnu.org> | 2006-07-31 20:15:50 +0000 |
commit | 4816ec693b135323fdac7646368873c269d8eb8e (patch) | |
tree | a4103d85ac167c003d9d4ecd90d5c455361366f4 /gdb | |
parent | 35d5d4ee3dee63dffe7bba8ae8b00f9d2679932b (diff) | |
download | gdb-4816ec693b135323fdac7646368873c269d8eb8e.zip gdb-4816ec693b135323fdac7646368873c269d8eb8e.tar.gz gdb-4816ec693b135323fdac7646368873c269d8eb8e.tar.bz2 |
* alpha-tdep.h (ALPHA_S0_REGNUM): New define.
* alphabsd-nat.c: Include <sys/types.h>, <sys/signal.h>,
<machine/pcb.h> 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.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 13 | ||||
-rw-r--r-- | gdb/Makefile.in | 3 | ||||
-rw-r--r-- | gdb/alpha-tdep.h | 1 | ||||
-rw-r--r-- | gdb/alphabsd-nat.c | 40 | ||||
-rw-r--r-- | gdb/config/alpha/fbsd.mh | 4 | ||||
-rw-r--r-- | 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 <kettenis@gnu.org> + + * alpha-tdep.h (ALPHA_S0_REGNUM): New define. + * alphabsd-nat.c: Include <sys/types.h>, <sys/signal.h>, + <machine/pcb.h> 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 <fnf@specifix.com> * 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 <sys/types.h> +#include <sys/signal.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 = 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 |