This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: RFA: Breakpoint infrastructure cleanups [4/8] - update read_memory_nobpt


On Wed, Oct 08, 2003 at 01:13:51PM -0400, Daniel Jacobowitz wrote:
> This simple patch converts read_memory_nobpt to use ALL_IMPL_BREAKPOINTS,
> since all it cares about are software breakpoints and their shadow contents.
> 
> This patch contains an actual bug fix.  It used to be that hardware
> breakpoints would cause read_memory_nobpt to access uninitialized
> shadow_contents.  Not a one of our target_insert_hw_breakpoints uses the
> shadow_contents buffer (although at least one target_insert_breakpoint
> fails to initialize it, in remote-mips!).  Now we only check for software
> breakpoints.

Here's #4.

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer

2003-11-06  Daniel Jacobowitz  <drow@mvista.com>

	* breakpoint.c (read_memory_nobpt): Use ALL_BP_LOCATIONS
	instead of ALL_BREAKPOINTS.  Check for software breakpoints only.

Index: gdb/breakpoint.c
===================================================================
--- gdb.orig/breakpoint.c	2003-11-06 10:49:15.000000000 -0500
+++ gdb/breakpoint.c	2003-11-06 10:49:52.000000000 -0500
@@ -625,7 +625,7 @@ int
 read_memory_nobpt (CORE_ADDR memaddr, char *myaddr, unsigned len)
 {
   int status;
-  struct breakpoint *b;
+  struct bp_location *b;
   CORE_ADDR bp_addr = 0;
   int bp_size = 0;
 
@@ -633,20 +633,15 @@ read_memory_nobpt (CORE_ADDR memaddr, ch
     /* No breakpoints on this machine. */
     return target_read_memory (memaddr, myaddr, len);
 
-  ALL_BREAKPOINTS (b)
+  ALL_BP_LOCATIONS (b)
   {
-    if (b->type == bp_none)
-      warning ("reading through apparently deleted breakpoint #%d?", 
-	       b->number);
+    if (b->owner->type == bp_none)
+      warning ("reading through apparently deleted breakpoint #%d?",
+              b->owner->number);
 
-    /* memory breakpoint? */
-    if (b->type == bp_watchpoint
-	|| b->type == bp_hardware_watchpoint
-	|| b->type == bp_read_watchpoint
-	|| b->type == bp_access_watchpoint)
+    if (b->loc_type != bp_loc_software_breakpoint)
       continue;
-    /* bp in memory? */
-    if (!b->loc->inserted)
+    if (!b->inserted)
       continue;
     /* Addresses and length of the part of the breakpoint that
        we need to copy.  */
@@ -654,7 +649,7 @@ read_memory_nobpt (CORE_ADDR memaddr, ch
        breakpoint values.  BREAKPOINT_FROM_PC still manages to
        correctly determine the breakpoints memory address and size
        for these targets. */
-    bp_addr = b->loc->address;
+    bp_addr = b->address;
     bp_size = 0;
     if (BREAKPOINT_FROM_PC (&bp_addr, &bp_size) == NULL)
       continue;
@@ -690,7 +685,7 @@ read_memory_nobpt (CORE_ADDR memaddr, ch
 	}
 
       memcpy (myaddr + bp_addr - memaddr,
-	      b->loc->shadow_contents + bptoffset, bp_size);
+	      b->shadow_contents + bptoffset, bp_size);
 
       if (bp_addr > memaddr)
 	{


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]