From fa5281d02b823b7a847bea43a39d6bcc7b75580a Mon Sep 17 00:00:00 2001 From: Daniel Jacobowitz Date: Sun, 1 Feb 2004 18:05:09 +0000 Subject: [PATCH] * breakpoint.c (bpstat_stop_status): Take a ptid_t argument, and check the specified thread for each breakpoint. * breakpoint.h (bpstat_stop_status): Update prototype. * infrun.c (handle_inferior_event): Update calls to bpstat_stop_status. --- gdb/ChangeLog | 8 ++++++++ gdb/breakpoint.c | 9 ++++++++- gdb/breakpoint.h | 2 +- gdb/infrun.c | 6 +++--- 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a190150790..f3f39f021c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2004-02-01 Daniel Jacobowitz + + * breakpoint.c (bpstat_stop_status): Take a ptid_t argument, + and check the specified thread for each breakpoint. + * breakpoint.h (bpstat_stop_status): Update prototype. + * infrun.c (handle_inferior_event): Update calls to + bpstat_stop_status. + 2004-02-01 Daniel Jacobowitz * Makefile.in (cli-cmds.o): Add $(readline_h). diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 11827f471f..ebd73f18a5 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -2588,7 +2588,7 @@ which its expression is valid.\n"); commands, FIXME??? fields. */ bpstat -bpstat_stop_status (CORE_ADDR bp_addr) +bpstat_stop_status (CORE_ADDR bp_addr, ptid_t ptid) { struct breakpoint *b, *temp; /* True if we've hit a breakpoint (as opposed to a watchpoint). */ @@ -2597,6 +2597,7 @@ bpstat_stop_status (CORE_ADDR bp_addr) struct bpstats root_bs[1]; /* Pointer to the last thing in the chain currently. */ bpstat bs = root_bs; + int thread_id = pid_to_thread_id (ptid); ALL_BREAKPOINTS_SAFE (b, temp) { @@ -2850,6 +2851,12 @@ bpstat_stop_status (CORE_ADDR bp_addr) /* Don't consider this a hit. */ --(b->hit_count); } + else if (b->thread != -1 && b->thread != thread_id) + { + bs->stop = 0; + /* Don't consider this a hit. */ + --(b->hit_count); + } else if (b->ignore_count > 0) { b->ignore_count--; diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h index b3253c73c8..1a4fada42f 100644 --- a/gdb/breakpoint.h +++ b/gdb/breakpoint.h @@ -403,7 +403,7 @@ extern void bpstat_clear (bpstat *); is part of the bpstat is copied as well. */ extern bpstat bpstat_copy (bpstat); -extern bpstat bpstat_stop_status (CORE_ADDR pc); +extern bpstat bpstat_stop_status (CORE_ADDR pc, ptid_t ptid); /* This bpstat_what stuff tells wait_for_inferior what to do with a breakpoint (a challenging task). */ diff --git a/gdb/infrun.c b/gdb/infrun.c index 5ab604c903..f16f42395f 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -1589,7 +1589,7 @@ handle_inferior_event (struct execution_control_state *ecs) stop_pc = read_pc (); - stop_bpstat = bpstat_stop_status (stop_pc); + stop_bpstat = bpstat_stop_status (stop_pc, ecs->ptid); ecs->random_signal = !bpstat_explains_signal (stop_bpstat); @@ -1638,7 +1638,7 @@ handle_inferior_event (struct execution_control_state *ecs) ecs->saved_inferior_ptid = inferior_ptid; inferior_ptid = ecs->ptid; - stop_bpstat = bpstat_stop_status (stop_pc); + stop_bpstat = bpstat_stop_status (stop_pc, ecs->ptid); ecs->random_signal = !bpstat_explains_signal (stop_bpstat); inferior_ptid = ecs->saved_inferior_ptid; @@ -2028,7 +2028,7 @@ handle_inferior_event (struct execution_control_state *ecs) else { /* See if there is a breakpoint at the current PC. */ - stop_bpstat = bpstat_stop_status (stop_pc); + stop_bpstat = bpstat_stop_status (stop_pc, ecs->ptid); /* Following in case break condition called a function. */