* breakpoint.c (watchpoint_check): Check for pc being in an
authorCorinna Vinschen <corinna@vinschen.de>
Thu, 4 Sep 2003 17:24:53 +0000 (17:24 +0000)
committerCorinna Vinschen <corinna@vinschen.de>
Thu, 4 Sep 2003 17:24:53 +0000 (17:24 +0000)
epilogue if watchpoint frame couldn't be found.

gdb/ChangeLog
gdb/breakpoint.c

index 2349c230898e53380431a1fce7091d4da125c625..103b422e4cd5137286e03eddbb328afbd44b8b10 100644 (file)
@@ -1,3 +1,8 @@
+2003-09-04  Corinna Vinschen  <vinschen@redhat.com>
+
+       * breakpoint.c (watchpoint_check): Check for pc being in an
+       epilogue if watchpoint frame couldn't be found.
+
 2003-09-04  Andrew Cagney  <cagney@redhat.com>
 
        * Makefile.in: Re-generate all dependencies.
index 8aa8a5ce275b8f1c5c27062036202e55a33a94ea..82e5b117f722abc7f1823b56ca17ee70acb228ca 100644 (file)
@@ -2393,6 +2393,9 @@ watchpoint_check (void *p)
   struct breakpoint *b;
   struct frame_info *fr;
   int within_current_scope;
+#if 0
+  struct frame_id current_frame_id;
+#endif
 
   b = bs->breakpoint_at;
 
@@ -2405,16 +2408,27 @@ watchpoint_check (void *p)
          the frame chain (so we can determine if we're in scope).  */
       reinit_frame_cache ();
       fr = frame_find_by_id (b->watchpoint_frame);
+#if 0
+      current_frame_id = get_frame_id (get_current_frame ());
+      within_current_scope = frame_id_eq (current_frame_id, b->watchpoint_frame)
+                            || frame_id_inner (current_frame_id,
+                                               b->watchpoint_frame);
+#else
       within_current_scope = (fr != NULL);
+#endif
       /* in_function_epilogue_p() returns a non-zero value if we're still
         in the function but the stack frame has already been invalidated.
         Since we can't rely on the values of local variables after the
         stack has been destroyed, we are treating the watchpoint in that
         state as `not changed' without further checking. */
-      if (within_current_scope && fr == get_current_frame ()
+#if 0
+      if (within_current_scope && (!fr || fr == get_current_frame ())
+#else
+      if ((!within_current_scope || fr == get_current_frame ())
+#endif
           && gdbarch_in_function_epilogue_p (current_gdbarch, read_pc ()))
        return WP_VALUE_NOT_CHANGED;
-      if (within_current_scope)
+      if (fr && within_current_scope)
        /* If we end up stopping, the current frame will get selected
           in normal_stop.  So this call to select_frame won't affect
           the user.  */
This page took 0.035267 seconds and 4 git commands to generate.