cleanup and speed up (software_)breakpoint_inserted_here_p

Factor out common code, and use the more efficient
ALL_BP_LOCATIONS_AT_ADDR.

gdb/
2015-01-09  Pedro Alves  <palves@redhat.com>

	* breakpoint.c (bp_location_inserted_here_p): New function,
	factored out from ...
	(breakpoint_inserted_here_p): ... here.  Use
	ALL_BP_LOCATIONS_AT_ADDR.
	(software_breakpoint_inserted_here_p): Use
	bp_location_inserted_here_p and ALL_BP_LOCATIONS_AT_ADDR.
This commit is contained in:
Pedro Alves
2014-12-29 19:41:05 +00:00
parent a7b796db4f
commit f7ce857f51
2 changed files with 44 additions and 25 deletions

View File

@ -1,3 +1,12 @@
2015-01-09 Pedro Alves <palves@redhat.com>
* breakpoint.c (bp_location_inserted_here_p): New function,
factored out from ...
(breakpoint_inserted_here_p): ... here. Use
ALL_BP_LOCATIONS_AT_ADDR.
(software_breakpoint_inserted_here_p): Use
bp_location_inserted_here_p and ALL_BP_LOCATIONS_AT_ADDR.
2014-01-09 Pedro Alves <palves@redhat.com> 2014-01-09 Pedro Alves <palves@redhat.com>
Skip enabling event reporting if the kernel supports Skip enabling event reporting if the kernel supports

View File

@ -4226,30 +4226,46 @@ moribund_breakpoint_here_p (struct address_space *aspace, CORE_ADDR pc)
return 0; return 0;
} }
/* Returns non-zero iff BL is inserted at PC, in address space
ASPACE. */
static int
bp_location_inserted_here_p (struct bp_location *bl,
struct address_space *aspace, CORE_ADDR pc)
{
if (bl->inserted
&& breakpoint_address_match (bl->pspace->aspace, bl->address,
aspace, pc))
{
if (overlay_debugging
&& section_is_overlay (bl->section)
&& !section_is_mapped (bl->section))
return 0; /* unmapped overlay -- can't be a match */
else
return 1;
}
return 0;
}
/* Returns non-zero iff there's a breakpoint inserted at PC. */ /* Returns non-zero iff there's a breakpoint inserted at PC. */
int int
breakpoint_inserted_here_p (struct address_space *aspace, CORE_ADDR pc) breakpoint_inserted_here_p (struct address_space *aspace, CORE_ADDR pc)
{ {
struct bp_location *bl, **blp_tmp; struct bp_location **blp, **blp_tmp = NULL;
struct bp_location *bl;
ALL_BP_LOCATIONS (bl, blp_tmp) ALL_BP_LOCATIONS_AT_ADDR (blp, blp_tmp, pc)
{ {
struct bp_location *bl = *blp;
if (bl->loc_type != bp_loc_software_breakpoint if (bl->loc_type != bp_loc_software_breakpoint
&& bl->loc_type != bp_loc_hardware_breakpoint) && bl->loc_type != bp_loc_hardware_breakpoint)
continue; continue;
if (bl->inserted if (bp_location_inserted_here_p (bl, aspace, pc))
&& breakpoint_location_address_match (bl, aspace, pc))
{
if (overlay_debugging
&& section_is_overlay (bl->section)
&& !section_is_mapped (bl->section))
continue; /* unmapped overlay -- can't be a match */
else
return 1; return 1;
} }
}
return 0; return 0;
} }
@ -4260,25 +4276,19 @@ int
software_breakpoint_inserted_here_p (struct address_space *aspace, software_breakpoint_inserted_here_p (struct address_space *aspace,
CORE_ADDR pc) CORE_ADDR pc)
{ {
struct bp_location *bl, **blp_tmp; struct bp_location **blp, **blp_tmp = NULL;
struct bp_location *bl;
ALL_BP_LOCATIONS (bl, blp_tmp) ALL_BP_LOCATIONS_AT_ADDR (blp, blp_tmp, pc)
{ {
struct bp_location *bl = *blp;
if (bl->loc_type != bp_loc_software_breakpoint) if (bl->loc_type != bp_loc_software_breakpoint)
continue; continue;
if (bl->inserted if (bp_location_inserted_here_p (bl, aspace, pc))
&& breakpoint_address_match (bl->pspace->aspace, bl->address,
aspace, pc))
{
if (overlay_debugging
&& section_is_overlay (bl->section)
&& !section_is_mapped (bl->section))
continue; /* unmapped overlay -- can't be a match */
else
return 1; return 1;
} }
}
return 0; return 0;
} }