diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2007-06-15 22:32:02 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@de.ibm.com> | 2007-06-15 22:32:02 +0000 |
commit | e103ff33dd5144e1246cf72bc661f1c06b8ca4d1 (patch) | |
tree | b9d885a53b56045181059ae1214cfe5e5236410c /gdb/mips-tdep.c | |
parent | f822643168e1daa972a5e4e9f885537af61eb0dd (diff) | |
download | gdb-e103ff33dd5144e1246cf72bc661f1c06b8ca4d1.tar.gz |
* mips-tdep.c (mips16_scan_prologue): Replace read_next_frame_reg
by frame_unwind_register_signed calls.
(mips32_scan_prologue): Likewise. Skip analysis of alloca stack
frame allocations when called with NULL NEXT_FRAME parameter.
(read_next_frame_reg): Remove.
* sh-tdep.c (sh_analyze_prologue): Add FPSCR parameter. Use it
instead of reading the FPSCR register.
(sh_frame_cache): Pass unwound FPSCR register value to
sh_analyze_prologue.
(sh_skip_prologue): Pass dummy FPSCR value to sh_analyze_prologue.
* v850-tdep.c (v850_analyze_prologue): Add CTBP parameter. Use it
instead of reading the CTBP register.
(v850_frame_cache): Pass unwound CTBP register value to
v850_analyze_prologue.
Diffstat (limited to 'gdb/mips-tdep.c')
-rw-r--r-- | gdb/mips-tdep.c | 46 |
1 files changed, 16 insertions, 30 deletions
diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c index 89e91c0f045..493f0115065 100644 --- a/gdb/mips-tdep.c +++ b/gdb/mips-tdep.c @@ -452,8 +452,6 @@ mips2_fp_compat (void) static CORE_ADDR heuristic_proc_start (CORE_ADDR); -static CORE_ADDR read_next_frame_reg (struct frame_info *, int); - static void reinit_frame_cache_sfunc (char *, int, struct cmd_list_element *); static struct type *mips_float_register_type (void); @@ -1571,8 +1569,9 @@ mips16_scan_prologue (CORE_ADDR start_pc, CORE_ADDR limit_pc, /* Can be called when there's no process, and hence when there's no NEXT_FRAME. */ if (next_frame != NULL) - sp = read_next_frame_reg (next_frame, gdbarch_num_regs (current_gdbarch) - + MIPS_SP_REGNUM); + sp = frame_unwind_register_signed (next_frame, + gdbarch_num_regs (current_gdbarch) + + MIPS_SP_REGNUM); else sp = 0; @@ -1892,8 +1891,9 @@ mips32_scan_prologue (CORE_ADDR start_pc, CORE_ADDR limit_pc, /* Can be called when there's no process, and hence when there's no NEXT_FRAME. */ if (next_frame != NULL) - sp = read_next_frame_reg (next_frame, gdbarch_num_regs (current_gdbarch) - + MIPS_SP_REGNUM); + sp = frame_unwind_register_signed (next_frame, + gdbarch_num_regs (current_gdbarch) + + MIPS_SP_REGNUM); else sp = 0; @@ -1943,14 +1943,15 @@ restart: /* Old gcc frame, r30 is virtual frame pointer. */ if ((long) low_word != frame_offset) frame_addr = sp + low_word; - else if (frame_reg == MIPS_SP_REGNUM) + else if (next_frame && frame_reg == MIPS_SP_REGNUM) { unsigned alloca_adjust; frame_reg = 30; - frame_addr = read_next_frame_reg (next_frame, - gdbarch_num_regs - (current_gdbarch) + 30); + frame_addr = frame_unwind_register_signed + (next_frame, + gdbarch_num_regs (current_gdbarch) + 30); + alloca_adjust = (unsigned) (frame_addr - (sp + low_word)); if (alloca_adjust > 0) { @@ -1973,14 +1974,15 @@ restart: else if (inst == 0x03A0F021 || inst == 0x03a0f025 || inst == 0x03a0f02d) { /* New gcc frame, virtual frame pointer is at r30 + frame_size. */ - if (frame_reg == MIPS_SP_REGNUM) + if (next_frame && frame_reg == MIPS_SP_REGNUM) { unsigned alloca_adjust; frame_reg = 30; - frame_addr = read_next_frame_reg (next_frame, - gdbarch_num_regs - (current_gdbarch) + 30); + frame_addr = frame_unwind_register_signed + (next_frame, + gdbarch_num_regs (current_gdbarch) + 30); + alloca_adjust = (unsigned) (frame_addr - sp); if (alloca_adjust > 0) { @@ -2288,22 +2290,6 @@ mips_stub_frame_base_sniffer (struct frame_info *next_frame) return NULL; } -static CORE_ADDR -read_next_frame_reg (struct frame_info *fi, int regno) -{ - /* Always a pseudo. */ - gdb_assert (regno >= gdbarch_num_regs (current_gdbarch)); - if (fi == NULL) - { - LONGEST val; - regcache_cooked_read_signed (current_regcache, regno, &val); - return val; - } - else - return frame_unwind_register_signed (fi, regno); - -} - /* mips_addr_bits_remove - remove useless address bits */ static CORE_ADDR |