From b4fa4770b8c2145ec040cb87ead3bd467cb4fa7b Mon Sep 17 00:00:00 2001 From: Stephane Carrez Date: Sun, 20 May 2001 11:53:42 +0000 Subject: * m68hc11-tdep.c (m68hc11_pop_frame): Fix stack pointer computation. (m68hc11_analyze_instruction): Update the pc correctly. (m68hc11_guess_from_prologue): Take into account the stack correction for the saving address. --- gdb/m68hc11-tdep.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'gdb/m68hc11-tdep.c') diff --git a/gdb/m68hc11-tdep.c b/gdb/m68hc11-tdep.c index a636b34c0e8..863dc907e02 100644 --- a/gdb/m68hc11-tdep.c +++ b/gdb/m68hc11-tdep.c @@ -334,7 +334,7 @@ m68hc11_pop_frame (void) read_memory_integer (frame->saved_regs[regnum], 2)); write_register (HARD_PC_REGNUM, frame->extra_info->return_pc); - sp = fp + frame->extra_info->size; + sp = (fp + frame->extra_info->size + 2) & 0x0ffff; write_register (HARD_SP_REGNUM, sp); } flush_cached_frames (); @@ -489,10 +489,12 @@ m68hc11_analyze_instruction (struct insn_sequence *seq, CORE_ADDR *pc, v = read_memory_unsigned_integer (*pc + j + 1, 1); if (buffer[j] & 1) v |= 0xff00; + *pc = *pc + 1; } else if (buffer[j] == 0xf2) { v = read_memory_unsigned_integer (*pc + j + 1, 2); + *pc = *pc + 2; } cur_val = v; break; @@ -587,7 +589,7 @@ m68hc11_guess_from_prologue (CORE_ADDR pc, CORE_ADDR fp, func_end = pc + 128; found_frame_point = 0; *frame_offset = 0; - save_addr = fp; + save_addr = fp + STACK_CORRECTION; while (!done && pc + 2 < func_end) { struct insn_sequence *seq; -- cgit v1.2.1