diff options
-rw-r--r-- | gdb/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/breakpoint.c | 7 |
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 |