Fix frame unwinding for 68hc11
This commit is contained in:
parent
4d72d17a49
commit
6148eca7f8
|
@ -1,3 +1,9 @@
|
||||||
|
2000-09-06 Stephane Carrez <Stephane.Carrez@worldnet.fr>
|
||||||
|
|
||||||
|
* m68hc11-tdep.c (m68hc11_frame_chain): Check for pc in call dummy.
|
||||||
|
(m68hc11_guess_from_prologue): 'des' instruction to allocate 1 byte
|
||||||
|
on the stack can appear in the prologue.
|
||||||
|
|
||||||
2000-09-05 Michael Snyder <msnyder@cleaver.cygnus.com>
|
2000-09-05 Michael Snyder <msnyder@cleaver.cygnus.com>
|
||||||
|
|
||||||
* sol-thread.c (ps_pdmodel): Protect with an ifdef.
|
* sol-thread.c (ps_pdmodel): Protect with an ifdef.
|
||||||
|
|
|
@ -378,6 +378,7 @@ m68hc11_guess_from_prologue (CORE_ADDR pc, CORE_ADDR fp,
|
||||||
#define OP_ADDD (0xc3)
|
#define OP_ADDD (0xc3)
|
||||||
#define OP_TXS (0x35)
|
#define OP_TXS (0x35)
|
||||||
#define OP_TYS (0x35)
|
#define OP_TYS (0x35)
|
||||||
|
#define OP_DES (0x34)
|
||||||
|
|
||||||
/* The 68hc11 stack is as follows:
|
/* The 68hc11 stack is as follows:
|
||||||
|
|
||||||
|
@ -469,6 +470,12 @@ m68hc11_guess_from_prologue (CORE_ADDR pc, CORE_ADDR fp,
|
||||||
add_sp_mode = 1;
|
add_sp_mode = 1;
|
||||||
pc += 2;
|
pc += 2;
|
||||||
}
|
}
|
||||||
|
/* des to allocate 1 byte on the stack */
|
||||||
|
else if (op0 == OP_DES)
|
||||||
|
{
|
||||||
|
pc += 1;
|
||||||
|
size += 1;
|
||||||
|
}
|
||||||
else if (op0 == OP_PAGE2 && op1 == OP_TSY && op2 == OP_PAGE2)
|
else if (op0 == OP_PAGE2 && op1 == OP_TSY && op2 == OP_PAGE2)
|
||||||
{
|
{
|
||||||
op0 = read_memory_unsigned_integer (pc + 3, 1);
|
op0 = read_memory_unsigned_integer (pc + 3, 1);
|
||||||
|
@ -615,6 +622,9 @@ m68hc11_frame_chain (struct frame_info *frame)
|
||||||
{
|
{
|
||||||
CORE_ADDR addr;
|
CORE_ADDR addr;
|
||||||
|
|
||||||
|
if (PC_IN_CALL_DUMMY (frame->pc, frame->frame, frame->frame))
|
||||||
|
return frame->frame; /* dummy frame same as caller's frame */
|
||||||
|
|
||||||
if (frame->extra_info->return_pc == 0
|
if (frame->extra_info->return_pc == 0
|
||||||
|| inside_entry_file (frame->extra_info->return_pc))
|
|| inside_entry_file (frame->extra_info->return_pc))
|
||||||
return (CORE_ADDR) 0;
|
return (CORE_ADDR) 0;
|
||||||
|
|
Loading…
Reference in New Issue