* breakpoint.c (update_watchpoint): Do not attempt to recreate

per-frame locations while within a function epilogue.
This commit is contained in:
Ulrich Weigand 2011-02-21 14:59:34 +00:00
parent b800ec70e3
commit b5db5dfca6
2 changed files with 19 additions and 6 deletions

View file

@ -1,3 +1,8 @@
2011-02-21 Ulrich Weigand <uweigand@de.ibm.com>
* breakpoint.c (update_watchpoint): Do not attempt to recreate
per-frame locations while within a function epilogue.
2011-02-21 Pierre Muller <muller@ics.u-strasbg.fr>
* ser-mingw.c (ser_windows_close): Reformat comment to better conform

View file

@ -1369,11 +1369,6 @@ update_watchpoint (struct breakpoint *b, int reparse)
if (!watchpoint_in_thread_scope (b))
return;
/* We don't free locations. They are stored in the bp_location array
and update_global_location_list will eventually delete them and
remove breakpoints if needed. */
b->loc = NULL;
if (b->disposition == disp_del_at_next_stop)
return;
@ -1384,7 +1379,15 @@ update_watchpoint (struct breakpoint *b, int reparse)
within_current_scope = 1;
else
{
struct frame_info *fi;
struct frame_info *fi = get_current_frame ();
struct gdbarch *frame_arch = get_frame_arch (fi);
CORE_ADDR frame_pc = get_frame_pc (fi);
/* If we're in a function epilogue, unwinding may not work
properly, so do not attempt to recreate locations at this
point. See similar comments in watchpoint_check. */
if (gdbarch_in_function_epilogue_p (frame_arch, frame_pc))
return;
/* Save the current frame's ID so we can restore it after
evaluating the watchpoint expression on its own frame. */
@ -1400,6 +1403,11 @@ update_watchpoint (struct breakpoint *b, int reparse)
select_frame (fi);
}
/* We don't free locations. They are stored in the bp_location array
and update_global_location_list will eventually delete them and
remove breakpoints if needed. */
b->loc = NULL;
if (within_current_scope && reparse)
{
char *s;