2012-01-24 Pedro Alves <palves@redhat.com>

* breakpoint.c (bpstat_check_location, bpstat_stop_status,
	pc_at_non_inline_function): Add `ws' parameter, and pass it down.
	(breakpoint_hit_catch_fork, breakpoint_hit_catch_vfork)
	(breakpoint_hit_catch_syscall, breakpoint_hit_catch_exec): Add
	`ws' parameter.
	(breakpoint_hit_ranged_breakpoint): Add `ws' parameter.  Return
	false for events other than TARGET_SIGNAL_TRAP.
	(breakpoint_hit_watchpoint, base_breakpoint_breakpoint_hit):
	Add `ws' parameter.
	(bkpt_breakpoint_hit): Add `ws' parameter.  Return false for
	events other than TARGET_SIGNAL_TRAP.
	(tracepoint_breakpoint_hit): Add `ws' parameter.
	* breakpoint.h (struct breakpoint_ops) <breakpoint_hit>: Add `ws'
	parameter.
	(bpstat_stop_status): Same.
	(pc_at_non_inline_function): Same.
	* infrun.c (handle_syscall_event, handle_inferior_event): Adjust
	to pass the current event's waitstatus to bpstat_stop_status
	and pc_at_non_inline_function.
This commit is contained in:
Tom Tromey
2012-01-24 21:31:24 +00:00
parent 86eb7e951a
commit 09ac7c10d4
4 changed files with 78 additions and 27 deletions

View File

@@ -438,9 +438,14 @@ struct breakpoint_ops
/* Return true if it the target has stopped due to hitting
breakpoint location BL. This function does not check if we
should stop, only if BL explains the stop. */
int (*breakpoint_hit) (const struct bp_location *bl, struct address_space *,
CORE_ADDR);
should stop, only if BL explains the stop. ASPACE is the address
space in which the event occurred, BP_ADDR is the address at
which the inferior stopped, and WS is the target_waitstatus
describing the event. */
int (*breakpoint_hit) (const struct bp_location *bl,
struct address_space *aspace,
CORE_ADDR bp_addr,
const struct target_waitstatus *ws);
/* Check internal conditions of the breakpoint referred to by BS.
If we should not stop for this breakpoint, set BS->stop to 0. */
@@ -774,7 +779,8 @@ extern void bpstat_clear (bpstat *);
extern bpstat bpstat_copy (bpstat);
extern bpstat bpstat_stop_status (struct address_space *aspace,
CORE_ADDR pc, ptid_t ptid);
CORE_ADDR pc, ptid_t ptid,
const struct target_waitstatus *ws);
/* This bpstat_what stuff tells wait_for_inferior what to do with a
breakpoint (a challenging task).
@@ -1405,7 +1411,8 @@ extern struct breakpoint *iterate_over_breakpoints (int (*) (struct breakpoint *
have been inlined. */
extern int pc_at_non_inline_function (struct address_space *aspace,
CORE_ADDR pc);
CORE_ADDR pc,
const struct target_waitstatus *ws);
extern int user_breakpoint_p (struct breakpoint *);