Fix frame unwinding for 68hc11
authorStephane Carrez <stcarrez@nerim.fr>
Tue, 5 Sep 2000 20:57:25 +0000 (20:57 +0000)
committerStephane Carrez <stcarrez@nerim.fr>
Tue, 5 Sep 2000 20:57:25 +0000 (20:57 +0000)
gdb/ChangeLog
gdb/m68hc11-tdep.c

index 3575217f8021b714e83ee93930f34a12674ec18f..583bf6bf1c28121c4d0e971c675d79b3b5c2757f 100644 (file)
@@ -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>
 
        * sol-thread.c (ps_pdmodel): Protect with an ifdef.
index 7b19979f8d7da0822a110e207aa8748a843edb33..611fb3e08d6e902fde6b058ca144ac26c9a1bf9e 100644 (file)
@@ -378,6 +378,7 @@ m68hc11_guess_from_prologue (CORE_ADDR pc, CORE_ADDR fp,
 #define OP_ADDD (0xc3)
 #define OP_TXS  (0x35)
 #define OP_TYS  (0x35)
+#define OP_DES  (0x34)
 
   /* The 68hc11 stack is as follows:
 
@@ -469,6 +470,12 @@ m68hc11_guess_from_prologue (CORE_ADDR pc, CORE_ADDR fp,
           add_sp_mode  = 1;
           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)
         {
           op0 = read_memory_unsigned_integer (pc + 3, 1);
@@ -615,6 +622,9 @@ m68hc11_frame_chain (struct frame_info *frame)
 {
   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
       || inside_entry_file (frame->extra_info->return_pc))
     return (CORE_ADDR) 0;