diff options
Diffstat (limited to 'gdb/frv-linux-tdep.c')
-rw-r--r-- | gdb/frv-linux-tdep.c | 65 |
1 files changed, 32 insertions, 33 deletions
diff --git a/gdb/frv-linux-tdep.c b/gdb/frv-linux-tdep.c index d2a59771319..015ac533738 100644 --- a/gdb/frv-linux-tdep.c +++ b/gdb/frv-linux-tdep.c @@ -165,7 +165,7 @@ frv_linux_pc_in_sigtramp (CORE_ADDR pc, char *name) } __attribute__((aligned(8))); */ static LONGEST -frv_linux_sigcontext_reg_addr (struct frame_info *next_frame, int regno, +frv_linux_sigcontext_reg_addr (struct frame_info *this_frame, int regno, CORE_ADDR *sc_addr_cache_ptr) { CORE_ADDR sc_addr; @@ -180,10 +180,10 @@ frv_linux_sigcontext_reg_addr (struct frame_info *next_frame, int regno, char buf[4]; int tramp_type; - pc = frame_pc_unwind (next_frame); + pc = get_frame_pc (this_frame); tramp_type = frv_linux_pc_in_sigtramp (pc, 0); - frame_unwind_register (next_frame, sp_regnum, buf); + get_frame_register (this_frame, sp_regnum, buf); sp = extract_unsigned_integer (buf, sizeof buf); if (tramp_type == NORMAL_SIGTRAMP) @@ -253,10 +253,10 @@ frv_linux_sigcontext_reg_addr (struct frame_info *next_frame, int regno, /* Signal trampolines. */ static struct trad_frame_cache * -frv_linux_sigtramp_frame_cache (struct frame_info *next_frame, void **this_cache) +frv_linux_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache) { struct trad_frame_cache *cache; - struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (next_frame)); + struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame)); CORE_ADDR addr; char buf[4]; int regnum; @@ -266,20 +266,20 @@ frv_linux_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); /* FIXME: cagney/2004-05-01: This is is long standing broken code. The frame ID's code address should be the start-address of the signal trampoline and not the current PC within that trampoline. */ - frame_unwind_register (next_frame, sp_regnum, buf); + get_frame_register (this_frame, sp_regnum, buf); this_id = frame_id_build (extract_unsigned_integer (buf, sizeof buf), - frame_pc_unwind (next_frame)); + get_frame_pc (this_frame)); trad_frame_set_id (cache, this_id); for (regnum = 0; regnum < frv_num_regs; regnum++) { - LONGEST reg_addr = frv_linux_sigcontext_reg_addr (next_frame, regnum, + LONGEST reg_addr = frv_linux_sigcontext_reg_addr (this_frame, regnum, &sc_addr_cache_val); if (reg_addr != -1) trad_frame_set_reg_addr (cache, regnum, reg_addr); @@ -290,48 +290,47 @@ frv_linux_sigtramp_frame_cache (struct frame_info *next_frame, void **this_cache } static void -frv_linux_sigtramp_frame_this_id (struct frame_info *next_frame, void **this_cache, +frv_linux_sigtramp_frame_this_id (struct frame_info *this_frame, void **this_cache, struct frame_id *this_id) { struct trad_frame_cache *cache = - frv_linux_sigtramp_frame_cache (next_frame, this_cache); + frv_linux_sigtramp_frame_cache (this_frame, this_cache); trad_frame_get_id (cache, this_id); } -static void -frv_linux_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 * +frv_linux_sigtramp_frame_prev_register (struct frame_info *this_frame, + void **this_cache, int regnum) { /* Make sure we've initialized the cache. */ struct trad_frame_cache *cache = - frv_linux_sigtramp_frame_cache (next_frame, this_cache); - trad_frame_get_register (cache, next_frame, regnum, optimizedp, lvalp, - addrp, realnump, valuep); + frv_linux_sigtramp_frame_cache (this_frame, this_cache); + return trad_frame_get_register (cache, this_frame, regnum); } -static const struct frame_unwind frv_linux_sigtramp_frame_unwind = -{ - SIGTRAMP_FRAME, - frv_linux_sigtramp_frame_this_id, - frv_linux_sigtramp_frame_prev_register -}; - -static const struct frame_unwind * -frv_linux_sigtramp_frame_sniffer (struct frame_info *next_frame) +static int +frv_linux_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); char *name; find_pc_partial_function (pc, &name, NULL, NULL); if (frv_linux_pc_in_sigtramp (pc, name)) - return &frv_linux_sigtramp_frame_unwind; + return 1; - return NULL; + return 0; } +static const struct frame_unwind frv_linux_sigtramp_frame_unwind = +{ + SIGTRAMP_FRAME, + frv_linux_sigtramp_frame_this_id, + frv_linux_sigtramp_frame_prev_register, + NULL, + frv_linux_sigtramp_frame_sniffer +}; /* The FRV kernel defines ELF_NGREG as 46. We add 2 in order to include the loadmap addresses in the register set. (See below for more info.) */ @@ -485,7 +484,7 @@ static void frv_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { /* Set the sigtramp frame sniffer. */ - frame_unwind_append_sniffer (gdbarch, frv_linux_sigtramp_frame_sniffer); + frame_unwind_append_unwinder (gdbarch, &frv_linux_sigtramp_frame_unwind); set_gdbarch_regset_from_core_section (gdbarch, frv_linux_regset_from_core_section); } |