summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2003-09-04 17:24:53 +0000
committerCorinna Vinschen <corinna@vinschen.de>2003-09-04 17:24:53 +0000
commitc1348a6426d23b25143b3dfdb1856f2c5124c1f9 (patch)
tree170b714531ff0ff7ece2c64ae2f3ed72c35db062
parent6547c4d087873b113bad1ba545503074a56138d9 (diff)
downloadgdb-c1348a6426d23b25143b3dfdb1856f2c5124c1f9.tar.gz
* breakpoint.c (watchpoint_check): Check for pc being in an
epilogue if watchpoint frame couldn't be found.
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/breakpoint.c18
2 files changed, 21 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 2349c230898..103b422e4cd 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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.
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 8aa8a5ce275..82e5b117f72 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -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. */