diff options
author | Pedro Alves <palves@redhat.com> | 2014-12-29 19:41:05 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2015-01-09 14:40:11 +0000 |
commit | f7ce857f51e33c66100bcf91b346ee1baf734e53 (patch) | |
tree | e1a93b64c89156418acb486a082836ce647fb64d /gdb/breakpoint.c | |
parent | a7b796db4fab28c2fa52bee86b97cf2b29d9c675 (diff) | |
download | gdb-f7ce857f51e33c66100bcf91b346ee1baf734e53.zip gdb-f7ce857f51e33c66100bcf91b346ee1baf734e53.tar.gz gdb-f7ce857f51e33c66100bcf91b346ee1baf734e53.tar.bz2 |
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.
Diffstat (limited to 'gdb/breakpoint.c')
-rw-r--r-- | gdb/breakpoint.c | 60 |
1 files changed, 35 insertions, 25 deletions
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 1e13c42..46d19d3 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -4226,29 +4226,45 @@ moribund_breakpoint_here_p (struct address_space *aspace, CORE_ADDR pc) 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. */ int 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 && bl->loc_type != bp_loc_hardware_breakpoint) continue; - if (bl->inserted - && 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; - } + if (bp_location_inserted_here_p (bl, aspace, pc)) + return 1; } return 0; } @@ -4260,24 +4276,18 @@ int software_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) continue; - 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)) - continue; /* unmapped overlay -- can't be a match */ - else - return 1; - } + if (bp_location_inserted_here_p (bl, aspace, pc)) + return 1; } return 0; |