* m68hc11-tdep.c (m68hc11_pop_frame): Fix stack pointer computation.
authorStephane Carrez <stcarrez@nerim.fr>
Sun, 20 May 2001 11:53:42 +0000 (11:53 +0000)
committerStephane Carrez <stcarrez@nerim.fr>
Sun, 20 May 2001 11:53:42 +0000 (11:53 +0000)
(m68hc11_analyze_instruction): Update the pc correctly.
(m68hc11_guess_from_prologue): Take into account the stack correction
for the saving address.

gdb/ChangeLog
gdb/m68hc11-tdep.c

index 57df488468de7e0ec21ac4c250225cb9832cc805..9d12c9a266e09c5e31caa5f54358c5e6720a56e0 100644 (file)
@@ -1,3 +1,10 @@
+2001-05-20  Stephane Carrez  <Stephane.Carrez@worldnet.fr>
+
+       * 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  <dan@cgsoftware.com>
 
        Changes by Jim Ingham:
index a636b34c0e8268dd4b568b95b875629b38738183..863dc907e020871a1cf8a5ebef5579a43271b248 100644 (file)
@@ -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;