mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-20 18:08:24 +08:00
* breakpoint.c (update_watchpoint): Do not attempt to recreate
per-frame locations while within a function epilogue.
This commit is contained in:
@ -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>
|
2011-02-21 Pierre Muller <muller@ics.u-strasbg.fr>
|
||||||
|
|
||||||
* ser-mingw.c (ser_windows_close): Reformat comment to better conform
|
* ser-mingw.c (ser_windows_close): Reformat comment to better conform
|
||||||
|
@ -1369,11 +1369,6 @@ update_watchpoint (struct breakpoint *b, int reparse)
|
|||||||
if (!watchpoint_in_thread_scope (b))
|
if (!watchpoint_in_thread_scope (b))
|
||||||
return;
|
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)
|
if (b->disposition == disp_del_at_next_stop)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1384,7 +1379,15 @@ update_watchpoint (struct breakpoint *b, int reparse)
|
|||||||
within_current_scope = 1;
|
within_current_scope = 1;
|
||||||
else
|
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
|
/* Save the current frame's ID so we can restore it after
|
||||||
evaluating the watchpoint expression on its own frame. */
|
evaluating the watchpoint expression on its own frame. */
|
||||||
@ -1400,6 +1403,11 @@ update_watchpoint (struct breakpoint *b, int reparse)
|
|||||||
select_frame (fi);
|
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)
|
if (within_current_scope && reparse)
|
||||||
{
|
{
|
||||||
char *s;
|
char *s;
|
||||||
|
Reference in New Issue
Block a user