2012-02-24 Luis Machado <lgustavo@codesourcery>
* server.c (handle_query): Advertise support for target-side breakpoint condition evaluation. (process_point_options): New function. (process_serial_event): When inserting a breakpoint, check for a target-side condition that should be evaluated. * mem-break.c: Include regcache.h and ax.h. (point_cond_list_t): New data structure. (breakpoint) <cond_list>: New field. (find_gdb_breakpoint_at): Make non-static. (delete_gdb_breakpoint_at): Clear any target-side conditions. (clear_gdb_breakpoint_conditions): New function. (add_condition_to_breakpoint): Likewise. (add_breakpoint_condition): Likewise. (gdb_condition_true_at_breakpoint): Likewise. (gdb_breakpoint_here): Return result directly instead of going through a local variable. * mem-break.h (find_gdb_breakpoint_at): New prototype. (clear_gdb_breakpoint_conditions): Likewise. (add_breakpoint_condition): Likewise. (gdb_condition_true_at_breakpoint): Likewise. * linux-low.c (linux_wait_1): Evaluate target-side breakpoint condition. (need_step_over_p): Take target-side breakpoint condition into consideration.
This commit is contained in:
parent
9f14eebc6a
commit
9f3a5c850e
5 changed files with 249 additions and 8 deletions
|
@ -2398,7 +2398,8 @@ Check if we're already there.\n",
|
|||
|| event_child->stopped_by_watchpoint
|
||||
|| (!step_over_finished
|
||||
&& !bp_explains_trap && !trace_event)
|
||||
|| gdb_breakpoint_here (event_child->stop_pc));
|
||||
|| (gdb_breakpoint_here (event_child->stop_pc)
|
||||
&& gdb_condition_true_at_breakpoint (event_child->stop_pc)));
|
||||
|
||||
/* We found no reason GDB would want us to stop. We either hit one
|
||||
of our own breakpoints, or finished an internal step GDB
|
||||
|
@ -3261,8 +3262,10 @@ need_step_over_p (struct inferior_list_entry *entry, void *dummy)
|
|||
if (breakpoint_here (pc) || fast_tracepoint_jump_here (pc))
|
||||
{
|
||||
/* Don't step over a breakpoint that GDB expects to hit
|
||||
though. */
|
||||
if (gdb_breakpoint_here (pc))
|
||||
though. If the condition is being evaluated on the target's side
|
||||
and it evaluate to false, step over this breakpoint as well. */
|
||||
if (gdb_breakpoint_here (pc)
|
||||
&& gdb_condition_true_at_breakpoint (pc))
|
||||
{
|
||||
if (debug_threads)
|
||||
fprintf (stderr,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue