* breakpoint.c, breakpoint.h (breakpoint_init_inferior): New function
[deliverable/binutils-gdb.git] / gdb / mips-tdep.c
index 3ed7c4bd4ab60fdb2752c33ef439d22334b22214..82371aaecc3ffe68ccc286134ce345c6710c78ee 100644 (file)
@@ -341,9 +341,18 @@ mips_frame_chain(frame)
       return 0;
 
     cached_proc_desc = proc_desc;
-    /* If frame size is zero, we must be at end of stack (or otherwise hosed).
-       If we don't check frame size, we loop forever if we see it == 0.  */
-    if (PROC_FRAME_OFFSET (proc_desc) == 0)
+
+    /* If no frame pointer and frame size is zero, we must be at end
+       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
+       /* 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))
@@ -918,7 +927,7 @@ mips_store_return_value (valtype, valbuf)
   write_register_bytes(REGISTER_BYTE (regnum), raw_buffer, TYPE_LENGTH (valtype));
 }
 
-static void reinit_frame_cache_sfunc PARAMS ((char *, int
+static void reinit_frame_cache_sfunc PARAMS ((char *, int,
                                              struct cmd_list_element *));
 
 /* Just like reinit_frame_cache, but with the right arguments to be
This page took 0.023174 seconds and 4 git commands to generate.