diff options
author | Mark Kettenis <kettenis@gnu.org> | 2006-12-31 01:28:07 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@gnu.org> | 2006-12-31 01:28:07 +0000 |
commit | 6df5070e3fb226764cd0da485b5f596797b87936 (patch) | |
tree | d7e4114d33ded3254e24032ef401ce4428da53dc /gdb/sparc64nbsd-nat.c | |
parent | f9225e75c0c9a058b39772f59cdb62ed659e9472 (diff) | |
download | gdb-6df5070e3fb226764cd0da485b5f596797b87936.zip gdb-6df5070e3fb226764cd0da485b5f596797b87936.tar.gz gdb-6df5070e3fb226764cd0da485b5f596797b87936.tar.bz2 |
* sparc64-tdep.h (SPARC64_PSTATE_AG, SPARC64_PSTATE_IE)
(SPARC64_PSTATE_PRIV, SPARC64_PSTATE_AM, SPARC64_PSTATE_PEF)
(SPARC64_PSTATE_RED, SPARC64_PSTATE_TLE, SPARC64_PSTATE_CLE)
(SPARC64_PSTATE_PID0, SPARC64_PSTATE_PID1): New defines.
* sparc64nbsd-nat.c: Include "gdbcore.h".
(sparc64nbsd_supply_pcb): Get %pc from stack if necessary. Supply
processor state register.
* sparc64obsd-tdep.c (sparc64obsd_trapframe_cache)
(sparc64obsd_trapframe_this_id)
(sparc64obsd_trapframe_prev_register)
(sparc64obsd_trapframe_sniffer): New functions.
(sparc64obsd_trapframe_unwind): New variable.
(sparc64obsd_init_abi): Append trapframe unwinder.
* Makefile.in (sparc64nbsd-nat.o): Update dependencies.
Diffstat (limited to 'gdb/sparc64nbsd-nat.c')
-rw-r--r-- | gdb/sparc64nbsd-nat.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/gdb/sparc64nbsd-nat.c b/gdb/sparc64nbsd-nat.c index 739c724..a5d7fc7 100644 --- a/gdb/sparc64nbsd-nat.c +++ b/gdb/sparc64nbsd-nat.c @@ -1,6 +1,6 @@ /* Native-dependent code for NetBSD/sparc64. - Copyright (C) 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc. This file is part of GDB. @@ -20,6 +20,7 @@ Boston, MA 02110-1301, USA. */ #include "defs.h" +#include "gdbcore.h" #include "regcache.h" #include "target.h" @@ -136,6 +137,7 @@ sparc64nbsd_fpregset_supplies_p (int regnum) static int sparc64nbsd_supply_pcb (struct regcache *regcache, struct pcb *pcb) { + u_int64_t state; int regnum; /* The following is true for NetBSD 1.6.2: @@ -148,9 +150,19 @@ sparc64nbsd_supply_pcb (struct regcache *regcache, struct pcb *pcb) if (pcb->pcb_sp == 0) return 0; + /* If the program counter is zero, this is probably a core dump, and + we can get %pc from the stack. */ + if (pcb->pcb_pc == 0) + read_memory(pcb->pcb_sp + BIAS - 176 + (11 * 8), + (gdb_byte *)&pcb->pcb_pc, sizeof pcb->pcb_pc); + + regcache_raw_supply (regcache, SPARC_SP_REGNUM, &pcb->pcb_sp); regcache_raw_supply (regcache, SPARC64_PC_REGNUM, &pcb->pcb_pc); + state = pcb->pcb_pstate << 8 | pcb->pcb_cwp; + regcache_raw_supply (regcache, SPARC64_STATE_REGNUM, &state); + sparc_supply_rwindow (regcache, pcb->pcb_sp, -1); return 1; |