aboutsummaryrefslogtreecommitdiff
path: root/gdb/breakpoint.c
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2006-12-18 22:10:13 +0000
committerDaniel Jacobowitz <drow@false.org>2006-12-18 22:10:13 +0000
commit69fbadd53d1404744d3e6032c42397c894d66be3 (patch)
tree6f115b4082bce63d732c29181053beec72fa944e /gdb/breakpoint.c
parente565971c4eea628ca031ca4230b00b792d7bfffb (diff)
downloadgdb-69fbadd53d1404744d3e6032c42397c894d66be3.zip
gdb-69fbadd53d1404744d3e6032c42397c894d66be3.tar.gz
gdb-69fbadd53d1404744d3e6032c42397c894d66be3.tar.bz2
* breakpoint.c (watchpoint_check): Double-check the found frame.
Diffstat (limited to 'gdb/breakpoint.c')
-rw-r--r--gdb/breakpoint.c7
1 files changed, 7 insertions, 0 deletions
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