From b4fa4770b8c2145ec040cb87ead3bd467cb4fa7b Mon Sep 17 00:00:00 2001 From: Stephane Carrez Date: Sun, 20 May 2001 11:53:42 +0000 Subject: [PATCH] * 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/ChangeLog | 7 +++++++ gdb/m68hc11-tdep.c | 6 ++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 57df488468d..9d12c9a266e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2001-05-20 Stephane Carrez + + * 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. + 2001-05-07 Daniel Berlin Changes by Jim Ingham: 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; -- 2.30.2