cleanup and speed up (software_)breakpoint_inserted_here_p
authorPedro Alves <palves@redhat.com>
Mon, 29 Dec 2014 19:41:05 +0000 (19:41 +0000)
committerPedro Alves <palves@redhat.com>
Fri, 9 Jan 2015 14:40:11 +0000 (14:40 +0000)
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.

gdb/ChangeLog
gdb/breakpoint.c

index d71375565fe2bcd1f494bc1df510808f808def27..eef41b54a7be05e16d02c711fa2fe769305b9c30 100644 (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>
 
        Skip enabling event reporting if the kernel supports
index 1e13c429c0b9a9636882630454ffcb5395922948..46d19d379032938764be71e9c2d7005ce7b01f51 100644 (file)
@@ -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;