* mips-tdep.c (mips_frame_chain): If frame size zero, return zero.
authorJim Kingdon <jkingdon@engr.sgi.com>
Thu, 23 Sep 1993 19:03:38 +0000 (19:03 +0000)
committerJim Kingdon <jkingdon@engr.sgi.com>
Thu, 23 Sep 1993 19:03:38 +0000 (19:03 +0000)
* rs6000-tdep.c: Add comment about framelessness.

gdb/ChangeLog
gdb/mips-tdep.c
gdb/rs6000-tdep.c

index 6461cd53451fd7bfa8f25e0d889cadbf5f67c663..3bc857bfe876c12180de3c3bc66f568f9cef5cc3 100644 (file)
@@ -47,6 +47,7 @@ Wed Sep 22 10:28:06 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
        retval.step_resume.
 
        * mips-tdep.c (mips_frame_chain): If frame size zero, return zero.
+       * rs6000-tdep.c: Add comment about framelessness.
 
        * remote-nindy.c: Declare ninMemGet and ninMemPut.
 
index f9193ea288c21d4239cac54d45f4b2dac3fc2dd2..82371aaecc3ffe68ccc286134ce345c6710c78ee 100644 (file)
@@ -346,7 +346,13 @@ mips_frame_chain(frame)
        of stack (or otherwise hosed).  If we don't check frame size,
        we loop forever if we see a zero size frame.  */
     if (PROC_FRAME_REG (proc_desc) == SP_REGNUM
-       && PROC_FRAME_OFFSET (proc_desc) == 0)
+       && PROC_FRAME_OFFSET (proc_desc) == 0
+       /* Frameless functions, which can happen on the innermost frame
+          or a frame which was innermost when a signal happened, can
+          have frame size zero.  No need to check for non-frameless
+          functions in these situations, though (I don't think).  */
+       && frame->next != NULL
+       && !frame->next->signal_handler_caller)
       return 0;
     else
       return read_next_frame_reg(frame, PROC_FRAME_REG(proc_desc))
index 3198fc6b6046fd141a53947cbddaf5243f43e779..012f53b37b68539c925c83473871dec04df6dd3b 100644 (file)
@@ -949,6 +949,8 @@ int pcsaved;
 
   if (fi->next != NULL)
     /* Don't even think about framelessness except on the innermost frame.  */
+    /* FIXME: Can also be frameless if fi->next->signal_handler_caller (if
+       a signal happens while executing in a frameless function).  */
     return 0;
   
   func_start = get_pc_function_start (fi->pc) + FUNCTION_START_OFFSET;