aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2009-11-13 22:05:06 +0000
committerDaniel Jacobowitz <drow@false.org>2009-11-13 22:05:06 +0000
commit66076460436b4f9f7917fce7b073fcc79cb81ce9 (patch)
treebd8252aea5cffe3a5a730d0fc645b01d2c1ab485 /gdb
parent55409f9d5fa988a19cd0b69fff68fe83b306bfd2 (diff)
downloadgdb-66076460436b4f9f7917fce7b073fcc79cb81ce9.zip
gdb-66076460436b4f9f7917fce7b073fcc79cb81ce9.tar.gz
gdb-66076460436b4f9f7917fce7b073fcc79cb81ce9.tar.bz2
2009-11-13 Maciej W. Rozycki <macro@codesourcery.com>
* breakpoint.c (update_watchpoint): Only fiddle with frames for local watchpoints.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/breakpoint.c20
2 files changed, 18 insertions, 7 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index cf4d2c0..e55b4d3 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2009-11-13 Maciej W. Rozycki <macro@codesourcery.com>
+
+ * breakpoint.c (update_watchpoint): Only fiddle with frames for
+ local watchpoints.
+
2009-11-13 Pedro Alves <pedro@codesourcery.com>
* infrun.c (handle_inferior_event): Set stop_print_frame on
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 757c76d..cadc536 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -1000,6 +1000,7 @@ update_watchpoint (struct breakpoint *b, int reparse)
int within_current_scope;
struct frame_id saved_frame_id;
struct bp_location *loc;
+ int frame_saved;
bpstat bs;
struct program_space *frame_pspace;
@@ -1011,12 +1012,7 @@ update_watchpoint (struct breakpoint *b, int reparse)
if (b->disposition == disp_del_at_next_stop)
return;
- /* Save the current frame's ID so we can restore it after
- evaluating the watchpoint expression on its own frame. */
- /* FIXME drow/2003-09-09: It would be nice if evaluate_expression
- took a frame parameter, so that we didn't have to change the
- selected frame. */
- saved_frame_id = get_frame_id (get_selected_frame (NULL));
+ frame_saved = 0;
/* Determine if the watchpoint is within scope. */
if (b->exp_valid_block == NULL)
@@ -1024,6 +1020,15 @@ update_watchpoint (struct breakpoint *b, int reparse)
else
{
struct frame_info *fi;
+
+ /* Save the current frame's ID so we can restore it after
+ evaluating the watchpoint expression on its own frame. */
+ /* FIXME drow/2003-09-09: It would be nice if evaluate_expression
+ took a frame parameter, so that we didn't have to change the
+ selected frame. */
+ frame_saved = 1;
+ saved_frame_id = get_frame_id (get_selected_frame (NULL));
+
fi = frame_find_by_id (b->watchpoint_frame);
within_current_scope = (fi != NULL);
if (within_current_scope)
@@ -1169,7 +1174,8 @@ in which its expression is valid.\n"),
}
/* Restore the selected frame. */
- select_frame (frame_find_by_id (saved_frame_id));
+ if (frame_saved)
+ select_frame (frame_find_by_id (saved_frame_id));
}