* mips-tdep.c (mips_stub_frame_cache): Correct the saved return
address register. Correct the call to frame_id_build. (mips_stub_frame_sniffer): Use the stub unwinder when the PC is invalid.
This commit is contained in:
parent
fd462a6189
commit
aa6c981f95
2 changed files with 15 additions and 2 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2007-09-19 Daniel Jacobowitz <dan@codesourcery.com>
|
||||||
|
|
||||||
|
* mips-tdep.c (mips_stub_frame_cache): Correct the saved return
|
||||||
|
address register. Correct the call to frame_id_build.
|
||||||
|
(mips_stub_frame_sniffer): Use the stub unwinder when the PC
|
||||||
|
is invalid.
|
||||||
|
|
||||||
2007-09-18 Joel Brobecker <brobecker@adacore.com>
|
2007-09-18 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
* ia64-tdep.c (refine_prologue_limit): Make sure we don't scan
|
* ia64-tdep.c (refine_prologue_limit): Make sure we don't scan
|
||||||
|
|
|
@ -2174,14 +2174,15 @@ mips_stub_frame_cache (struct frame_info *next_frame, void **this_cache)
|
||||||
/* The return address is in the link register. */
|
/* The return address is in the link register. */
|
||||||
trad_frame_set_reg_realreg (this_trad_cache,
|
trad_frame_set_reg_realreg (this_trad_cache,
|
||||||
gdbarch_pc_regnum (current_gdbarch),
|
gdbarch_pc_regnum (current_gdbarch),
|
||||||
MIPS_RA_REGNUM);
|
(gdbarch_num_regs (current_gdbarch)
|
||||||
|
+ MIPS_RA_REGNUM));
|
||||||
|
|
||||||
/* Frame ID, since it's a frameless / stackless function, no stack
|
/* Frame ID, since it's a frameless / stackless function, no stack
|
||||||
space is allocated and SP on entry is the current SP. */
|
space is allocated and SP on entry is the current SP. */
|
||||||
pc = frame_pc_unwind (next_frame);
|
pc = frame_pc_unwind (next_frame);
|
||||||
find_pc_partial_function (pc, NULL, &start_addr, NULL);
|
find_pc_partial_function (pc, NULL, &start_addr, NULL);
|
||||||
stack_addr = frame_unwind_register_signed (next_frame, MIPS_SP_REGNUM);
|
stack_addr = frame_unwind_register_signed (next_frame, MIPS_SP_REGNUM);
|
||||||
trad_frame_set_id (this_trad_cache, frame_id_build (start_addr, stack_addr));
|
trad_frame_set_id (this_trad_cache, frame_id_build (stack_addr, start_addr));
|
||||||
|
|
||||||
/* Assume that the frame's base is the same as the
|
/* Assume that the frame's base is the same as the
|
||||||
stack-pointer. */
|
stack-pointer. */
|
||||||
|
@ -2222,9 +2223,14 @@ static const struct frame_unwind mips_stub_frame_unwind =
|
||||||
static const struct frame_unwind *
|
static const struct frame_unwind *
|
||||||
mips_stub_frame_sniffer (struct frame_info *next_frame)
|
mips_stub_frame_sniffer (struct frame_info *next_frame)
|
||||||
{
|
{
|
||||||
|
gdb_byte dummy[4];
|
||||||
struct obj_section *s;
|
struct obj_section *s;
|
||||||
CORE_ADDR pc = frame_unwind_address_in_block (next_frame, NORMAL_FRAME);
|
CORE_ADDR pc = frame_unwind_address_in_block (next_frame, NORMAL_FRAME);
|
||||||
|
|
||||||
|
/* Use the stub unwinder for unreadable code. */
|
||||||
|
if (target_read_memory (frame_pc_unwind (next_frame), dummy, 4) != 0)
|
||||||
|
return &mips_stub_frame_unwind;
|
||||||
|
|
||||||
if (in_plt_section (pc, NULL))
|
if (in_plt_section (pc, NULL))
|
||||||
return &mips_stub_frame_unwind;
|
return &mips_stub_frame_unwind;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue