* breakpoint.c (update_global_location_list): Fix duplicate
locations detection.
This commit is contained in:
parent
db82e815be
commit
c7d46a38b6
2 changed files with 37 additions and 19 deletions
|
@ -1,3 +1,8 @@
|
|||
2009-11-20 Pedro Alves <pedro@codesourcery.com>
|
||||
|
||||
* breakpoint.c (update_global_location_list): Fix duplicate
|
||||
locations detection.
|
||||
|
||||
2009-11-20 Pedro Alves <pedro@codesourcery.com>
|
||||
|
||||
* infrun.c (handle_inferior_event): Hardware hatchpoint traps are
|
||||
|
|
|
@ -8214,10 +8214,11 @@ update_global_location_list (int should_insert)
|
|||
old_locp++)
|
||||
{
|
||||
struct bp_location *old_loc = *old_locp;
|
||||
struct bp_location **loc2p;
|
||||
|
||||
/* Tells if 'old_loc' is found amoung the new locations. If not, we
|
||||
have to free it. */
|
||||
int found_object;
|
||||
int found_object = 0;
|
||||
/* Tells if the location should remain inserted in the target. */
|
||||
int keep_in_target = 0;
|
||||
int removed = 0;
|
||||
|
@ -8225,9 +8226,20 @@ update_global_location_list (int should_insert)
|
|||
/* Skip LOCP entries which will definitely never be needed. Stop either
|
||||
at or being the one matching OLD_LOC. */
|
||||
while (locp < bp_location + bp_location_count
|
||||
&& bp_location_compare (*locp, old_loc) < 0)
|
||||
&& (*locp)->address < old_loc->address)
|
||||
locp++;
|
||||
found_object = locp < bp_location + bp_location_count && *locp == old_loc;
|
||||
|
||||
for (loc2p = locp;
|
||||
(loc2p < bp_location + bp_location_count
|
||||
&& (*loc2p)->address == old_loc->address);
|
||||
loc2p++)
|
||||
{
|
||||
if (*loc2p == old_loc)
|
||||
{
|
||||
found_object = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* If this location is no longer present, and inserted, look if there's
|
||||
maybe a new location at the same address. If so, mark that one
|
||||
|
@ -8253,27 +8265,28 @@ update_global_location_list (int should_insert)
|
|||
|
||||
if (breakpoint_address_is_meaningful (old_loc->owner))
|
||||
{
|
||||
struct bp_location **loc2p;
|
||||
|
||||
for (loc2p = locp;
|
||||
loc2p < bp_location + bp_location_count
|
||||
&& breakpoint_address_match ((*loc2p)->pspace->aspace,
|
||||
(*loc2p)->address,
|
||||
old_loc->pspace->aspace,
|
||||
old_loc->address);
|
||||
(loc2p < bp_location + bp_location_count
|
||||
&& (*loc2p)->address == old_loc->address);
|
||||
loc2p++)
|
||||
{
|
||||
struct bp_location *loc2 = *loc2p;
|
||||
|
||||
/* For the sake of should_be_inserted.
|
||||
Duplicates check below will fix up this later. */
|
||||
loc2->duplicate = 0;
|
||||
if (loc2 != old_loc && should_be_inserted (loc2))
|
||||
{
|
||||
loc2->inserted = 1;
|
||||
loc2->target_info = old_loc->target_info;
|
||||
keep_in_target = 1;
|
||||
break;
|
||||
if (breakpoint_address_match (loc2->pspace->aspace,
|
||||
loc2->address,
|
||||
old_loc->pspace->aspace,
|
||||
old_loc->address))
|
||||
{
|
||||
/* For the sake of should_be_inserted.
|
||||
Duplicates check below will fix up this later. */
|
||||
loc2->duplicate = 0;
|
||||
if (loc2 != old_loc && should_be_inserted (loc2))
|
||||
{
|
||||
loc2->inserted = 1;
|
||||
loc2->target_info = old_loc->target_info;
|
||||
keep_in_target = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue