[RFC/WIP PATCH 02/14] Mask software breakpoints from memory writes too

Pedro Alves pedro@codesourcery.com
Wed Dec 14 15:06:00 GMT 2011


On Wednesday 14 December 2011 12:53:04, Andreas Schwab wrote:
> Pedro Alves <pedro@codesourcery.com> writes:
> 
> > Does this fix it?
> >
> > --- a/gdb/ppc-linux-tdep.c
> > +++ b/gdb/ppc-linux-tdep.c
> > @@ -218,7 +218,7 @@ ppc_linux_memory_remove_breakpoint (struct gdbarch *gdbarch,
> >       program modified the code on us, so it is wrong to put back the
> >       old value.  */
> >    if (val == 0 && memcmp (bp, old_contents, bplen) == 0)
> > -    val = target_write_memory (addr, bp_tgt->shadow_contents, bplen);
> > +    val = target_write_raw_memory (addr, bp_tgt->shadow_contents, bplen);
> >  
> >    do_cleanups (cleanup);
> >    return val;
> 
> Looks good, thanks.

Thanks.  I've applied the patch below to do the same adjustment to
all memory_remove_breakpoint callbacks.  Applied to both mainline
and the 7.4 branch.

-- 
Pedro Alves

2011-12-14  Pedro Alves  <pedro@codesourcery.com>

	* ia64-tdep.c (ia64_memory_remove_breakpoint): Use
	target_write_raw_memory.
	* m32r-tdep.c (m32r_memory_remove_breakpoint): Use
	target_write_raw_memory.
	* microblaze-linux-tdep.c
	(microblaze_linux_memory_remove_breakpoint): Use
	target_write_raw_memory.
	* ppc-linux-tdep.c (ppc_linux_memory_remove_breakpoint): Use
	target_write_raw_memory.
---
 gdb/ia64-tdep.c             |    2 +-
 gdb/m32r-tdep.c             |    2 +-
 gdb/microblaze-linux-tdep.c |    2 +-
 gdb/ppc-linux-tdep.c        |    2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/gdb/ia64-tdep.c b/gdb/ia64-tdep.c
index 68e5021..d1940e6 100644
--- a/gdb/ia64-tdep.c
+++ b/gdb/ia64-tdep.c
@@ -811,7 +811,7 @@ ia64_memory_remove_breakpoint (struct gdbarch *gdbarch,
   /* In BUNDLE_MEM, be careful to modify only the bits belonging to SLOTNUM
      and not any of the other ones that are stored in SHADOW_CONTENTS.  */
   replace_slotN_contents (bundle_mem, instr_saved, slotnum);
-  val = target_write_memory (addr, bundle_mem, BUNDLE_LEN);
+  val = target_write_raw_memory (addr, bundle_mem, BUNDLE_LEN);
 
   do_cleanups (cleanup);
   return val;
diff --git a/gdb/m32r-tdep.c b/gdb/m32r-tdep.c
index 136fd7b..b417db0 100644
--- a/gdb/m32r-tdep.c
+++ b/gdb/m32r-tdep.c
@@ -163,7 +163,7 @@ m32r_memory_remove_breakpoint (struct gdbarch *gdbarch,
     }
 
   /* Write contents.  */
-  val = target_write_memory (addr & 0xfffffffc, buf, 4);
+  val = target_write_raw_memory (addr & 0xfffffffc, buf, 4);
   return val;
 }
 
diff --git a/gdb/microblaze-linux-tdep.c b/gdb/microblaze-linux-tdep.c
index c14e01b..7b2662d 100644
--- a/gdb/microblaze-linux-tdep.c
+++ b/gdb/microblaze-linux-tdep.c
@@ -58,7 +58,7 @@ microblaze_linux_memory_remove_breakpoint (struct gdbarch *gdbarch,
      program modified the code on us, so it is wrong to put back the
      old value.  */
   if (val == 0 && memcmp (bp, old_contents, bplen) == 0)
-    val = target_write_memory (addr, bp_tgt->shadow_contents, bplen);
+    val = target_write_raw_memory (addr, bp_tgt->shadow_contents, bplen);
 
   return val;
 }
diff --git a/gdb/ppc-linux-tdep.c b/gdb/ppc-linux-tdep.c
index e623742..9968621 100644
--- a/gdb/ppc-linux-tdep.c
+++ b/gdb/ppc-linux-tdep.c
@@ -218,7 +218,7 @@ ppc_linux_memory_remove_breakpoint (struct gdbarch *gdbarch,
      program modified the code on us, so it is wrong to put back the
      old value.  */
   if (val == 0 && memcmp (bp, old_contents, bplen) == 0)
-    val = target_write_memory (addr, bp_tgt->shadow_contents, bplen);
+    val = target_write_raw_memory (addr, bp_tgt->shadow_contents, bplen);
 
   do_cleanups (cleanup);
   return val;



More information about the Gdb-patches mailing list