diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2009-09-08 17:52:27 +0000 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2009-09-08 17:52:27 +0000 |
commit | fbfaaae50b163ac73cb266b6da39dd83e4721150 (patch) | |
tree | a9efd32f5e9a865de2d70482ae3bb0c64251408c | |
parent | b554e4bd5309b7a5bdfd36ab20c4c8f3edcb88d5 (diff) | |
download | gdb-fbfaaae50b163ac73cb266b6da39dd83e4721150.zip gdb-fbfaaae50b163ac73cb266b6da39dd83e4721150.tar.gz gdb-fbfaaae50b163ac73cb266b6da39dd83e4721150.tar.bz2 |
gdb/
* 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.
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/ia64-tdep.c | 25 |
2 files changed, 25 insertions, 6 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d84702d..d4cdc95 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,11 @@ 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. * ia64-tdep.c (ia64_memory_insert_breakpoint): New call of make_show_memory_breakpoints_cleanup with parameter 0. Move the diff --git a/gdb/ia64-tdep.c b/gdb/ia64-tdep.c index 29601bd..d68c044 100644 --- a/gdb/ia64-tdep.c +++ b/gdb/ia64-tdep.c @@ -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; |