aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog4
-rw-r--r--gdb/breakpoint.c7
2 files changed, 11 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 084534e..bf28d52 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,7 @@
+2006-12-18 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * breakpoint.c (watchpoint_check): Double-check the found frame.
+
2006-12-17 Nick Hudson <skrll@netbsd.org>
Mark Kettenis <kettenis@gnu.org>
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index e68878b..ed91c1e 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -2564,6 +2564,13 @@ watchpoint_check (void *p)
reinit_frame_cache ();
fr = frame_find_by_id (b->watchpoint_frame);
within_current_scope = (fr != NULL);
+
+ /* If we've gotten confused in the unwinder, we might have
+ returned a frame that can't describe this variable. */
+ if (within_current_scope
+ && block_function (b->exp_valid_block) != get_frame_function (fr))
+ within_current_scope = 0;
+
/* 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