gdb/
authorJan Kratochvil <jan.kratochvil@redhat.com>
Tue, 8 Sep 2009 17:52:27 +0000 (17:52 +0000)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Tue, 8 Sep 2009 17:52:27 +0000 (17:52 +0000)
* ia64-tdep.c (ia64_memory_insert_breakpoint)
(ia64_memory_remove_breakpoint): Return immediately if any of memory
reads fail.  Do not combine the VAL values.

gdb/ChangeLog
gdb/ia64-tdep.c

index d84702d5e743d43925a1bbe28614783d4372c912..d4cdc95ad541a5288d389a368f8a64c04cc20023 100644 (file)
@@ -1,3 +1,9 @@
+2009-09-08  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       * ia64-tdep.c (ia64_memory_insert_breakpoint)
+       (ia64_memory_remove_breakpoint): Return immediately if any of memory
+       reads fail.  Do not combine the VAL values.
+
 2009-09-08  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        Fix ia64 shadowing of breakpoints in multiple slots of a single bundle.
index 29601bde2d516bd463574892b45e4187a3f4f902..d68c04483c8172752fb9a9a99fd5da6ec00d2c2e 100644 (file)
@@ -629,6 +629,11 @@ ia64_memory_insert_breakpoint (struct gdbarch *gdbarch,
      breakpoint instruction bits region.  */
   cleanup = make_show_memory_breakpoints_cleanup (0);
   val = target_read_memory (addr, bundle, BUNDLE_LEN);
+  if (val != 0)
+    {
+      do_cleanups (cleanup);
+      return val;
+    }
 
   /* Slot number 2 may skip at most 2 bytes at the beginning.  */
   bp_tgt->shadow_len = BUNDLE_LEN - 2;
@@ -645,7 +650,12 @@ ia64_memory_insert_breakpoint (struct gdbarch *gdbarch,
      adjacent placed breakpoints.  It is due to our SHADOW_CONTENTS overlapping
      the real breakpoint instruction bits region.  */
   make_show_memory_breakpoints_cleanup (1);
-  val |= target_read_memory (addr, bundle, BUNDLE_LEN);
+  val = target_read_memory (addr, bundle, BUNDLE_LEN);
+  if (val != 0)
+    {
+      do_cleanups (cleanup);
+      return val;
+    }
 
   /* Check for L type instruction in slot 1, if present then bump up the slot
      number to the slot 2.  */
@@ -666,9 +676,8 @@ ia64_memory_insert_breakpoint (struct gdbarch *gdbarch,
 
   bp_tgt->placed_size = bp_tgt->shadow_len;
 
-  if (val == 0)
-    val = target_write_memory (addr + slotnum, bundle + slotnum,
-                              bp_tgt->shadow_len);
+  val = target_write_memory (addr + slotnum, bundle + slotnum,
+                            bp_tgt->shadow_len);
 
   do_cleanups (cleanup);
   return val;
@@ -695,6 +704,11 @@ ia64_memory_remove_breakpoint (struct gdbarch *gdbarch,
      breakpoint instruction bits region.  */
   cleanup = make_show_memory_breakpoints_cleanup (1);
   val = target_read_memory (addr, bundle_mem, BUNDLE_LEN);
+  if (val != 0)
+    {
+      do_cleanups (cleanup);
+      return val;
+    }
 
   /* Check for L type instruction in slot 1, if present then bump up the slot
      number to the slot 2.  */
@@ -723,8 +737,7 @@ ia64_memory_remove_breakpoint (struct gdbarch *gdbarch,
   /* In BUNDLE_MEM be careful to modify only the bits belonging to SLOTNUM and
      never any other possibly also stored in SHADOW_CONTENTS.  */
   replace_slotN_contents (bundle_mem, instr_saved, slotnum);
-  if (val == 0)
-    val = target_write_memory (addr, bundle_mem, BUNDLE_LEN);
+  val = target_write_memory (addr, bundle_mem, BUNDLE_LEN);
 
   do_cleanups (cleanup);
   return val;