aboutsummaryrefslogtreecommitdiff
path: root/gdb/ppcobsd-tdep.c
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2008-05-01 00:40:39 +0000
committerUlrich Weigand <uweigand@de.ibm.com>2008-05-01 00:40:39 +0000
commit1af5d7ceb5960c714e55c2fdf80c22b52db84738 (patch)
tree4be5363091d3b4c4f042215550da84fbe3c9d724 /gdb/ppcobsd-tdep.c
parente4e5049b7bb41c36b6696a59f59eaafee95aedb1 (diff)
downloadgdb-1af5d7ceb5960c714e55c2fdf80c22b52db84738.zip
gdb-1af5d7ceb5960c714e55c2fdf80c22b52db84738.tar.gz
gdb-1af5d7ceb5960c714e55c2fdf80c22b52db84738.tar.bz2
* rs6000-tdep.c: Update for unwinder changes.
* ppcobsd-tdep.c: Likewise.
Diffstat (limited to 'gdb/ppcobsd-tdep.c')
-rw-r--r--gdb/ppcobsd-tdep.c54
1 files changed, 22 insertions, 32 deletions
diff --git a/gdb/ppcobsd-tdep.c b/gdb/ppcobsd-tdep.c
index c510f5d..d83e428 100644
--- a/gdb/ppcobsd-tdep.c
+++ b/gdb/ppcobsd-tdep.c
@@ -121,9 +121,11 @@ static const int ppcobsd_sigreturn_offset[] = {
};
static int
-ppcobsd_sigtramp_p (struct frame_info *next_frame)
+ppcobsd_sigtramp_frame_sniffer (const struct frame_unwind *self,
+ struct frame_info *this_frame,
+ void **this_cache)
{
- CORE_ADDR pc = frame_pc_unwind (next_frame);
+ CORE_ADDR pc = get_frame_pc (this_frame);
CORE_ADDR start_pc = (pc & ~(ppcobsd_page_size - 1));
const int *offset;
char *name;
@@ -137,7 +139,7 @@ ppcobsd_sigtramp_p (struct frame_info *next_frame)
gdb_byte buf[2 * PPC_INSN_SIZE];
unsigned long insn;
- if (!safe_frame_unwind_memory (next_frame, start_pc + *offset,
+ if (!safe_frame_unwind_memory (this_frame, start_pc + *offset,
buf, sizeof buf))
continue;
@@ -158,9 +160,9 @@ ppcobsd_sigtramp_p (struct frame_info *next_frame)
}
static struct trad_frame_cache *
-ppcobsd_sigtramp_frame_cache (struct frame_info *next_frame, void **this_cache)
+ppcobsd_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache)
{
- struct gdbarch *gdbarch = get_frame_arch (next_frame);
+ struct gdbarch *gdbarch = get_frame_arch (this_frame);
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
struct trad_frame_cache *cache;
CORE_ADDR addr, base, func;
@@ -171,12 +173,12 @@ ppcobsd_sigtramp_frame_cache (struct frame_info *next_frame, void **this_cache)
if (*this_cache)
return *this_cache;
- cache = trad_frame_cache_zalloc (next_frame);
+ cache = trad_frame_cache_zalloc (this_frame);
*this_cache = cache;
- func = frame_pc_unwind (next_frame);
+ func = get_frame_pc (this_frame);
func &= ~(ppcobsd_page_size - 1);
- if (!safe_frame_unwind_memory (next_frame, func, buf, sizeof buf))
+ if (!safe_frame_unwind_memory (this_frame, func, buf, sizeof buf))
return cache;
/* Calculate the offset where we can find `struct sigcontext'. We
@@ -185,8 +187,7 @@ ppcobsd_sigtramp_frame_cache (struct frame_info *next_frame, void **this_cache)
insn = extract_unsigned_integer (buf, PPC_INSN_SIZE);
sigcontext_offset = (0x10000 - (insn & 0x0000ffff)) + 8;
- base = frame_unwind_register_unsigned (next_frame,
- gdbarch_sp_regnum (gdbarch));
+ base = get_frame_register_unsigned (this_frame, gdbarch_sp_regnum (gdbarch));
addr = base + sigcontext_offset + 2 * tdep->wordsize;
for (i = 0; i < ppc_num_gprs; i++, addr += tdep->wordsize)
{
@@ -212,43 +213,32 @@ ppcobsd_sigtramp_frame_cache (struct frame_info *next_frame, void **this_cache)
}
static void
-ppcobsd_sigtramp_frame_this_id (struct frame_info *next_frame,
+ppcobsd_sigtramp_frame_this_id (struct frame_info *this_frame,
void **this_cache, struct frame_id *this_id)
{
struct trad_frame_cache *cache =
- ppcobsd_sigtramp_frame_cache (next_frame, this_cache);
+ ppcobsd_sigtramp_frame_cache (this_frame, this_cache);
trad_frame_get_id (cache, this_id);
}
-static void
-ppcobsd_sigtramp_frame_prev_register (struct frame_info *next_frame,
- void **this_cache, int regnum,
- int *optimizedp, enum lval_type *lvalp,
- CORE_ADDR *addrp, int *realnump,
- gdb_byte *valuep)
+static struct value *
+ppcobsd_sigtramp_frame_prev_register (struct frame_info *this_frame,
+ void **this_cache, int regnum)
{
struct trad_frame_cache *cache =
- ppcobsd_sigtramp_frame_cache (next_frame, this_cache);
+ ppcobsd_sigtramp_frame_cache (this_frame, this_cache);
- trad_frame_get_register (cache, next_frame, regnum,
- optimizedp, lvalp, addrp, realnump, valuep);
+ return trad_frame_get_register (cache, this_frame, regnum);
}
static const struct frame_unwind ppcobsd_sigtramp_frame_unwind = {
SIGTRAMP_FRAME,
ppcobsd_sigtramp_frame_this_id,
- ppcobsd_sigtramp_frame_prev_register
+ ppcobsd_sigtramp_frame_prev_register,
+ NULL,
+ ppcobsd_sigtramp_frame_sniffer
};
-
-static const struct frame_unwind *
-ppcobsd_sigtramp_frame_sniffer (struct frame_info *next_frame)
-{
- if (ppcobsd_sigtramp_p (next_frame))
- return &ppcobsd_sigtramp_frame_unwind;
-
- return NULL;
-}
static void
@@ -268,7 +258,7 @@ ppcobsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
set_gdbarch_regset_from_core_section
(gdbarch, ppcobsd_regset_from_core_section);
- frame_unwind_append_sniffer (gdbarch, ppcobsd_sigtramp_frame_sniffer);
+ frame_unwind_append_unwinder (gdbarch, &ppcobsd_sigtramp_frame_unwind);
}