From: Joel Brobecker Date: Tue, 29 Apr 2008 21:14:06 +0000 (+0000) Subject: * ia64-tdep.c (ia64_memory_remove_breakpoint): Set X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1de34ab72d7fe2c5a98a72f0e2b02d05828687a5;p=binutils-gdb.git * ia64-tdep.c (ia64_memory_remove_breakpoint): Set show_memory_breakpoints to 1 while reading the instruction bundle. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 35c6ceac104..b5a31dda5c2 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2008-04-29 Joel Brobecker + + * ia64-tdep.c (ia64_memory_remove_breakpoint): Set + show_memory_breakpoints to 1 while reading the instruction bundle. + 2008-04-29 Joel Brobecker * gdbarch.sh: Document the return_value method. Explain that diff --git a/gdb/ia64-tdep.c b/gdb/ia64-tdep.c index 37ed4fcbabd..dd2064c9ba9 100644 --- a/gdb/ia64-tdep.c +++ b/gdb/ia64-tdep.c @@ -598,9 +598,15 @@ ia64_memory_remove_breakpoint (struct gdbarch *gdbarch, long long instr; int val; int template; + struct cleanup *cleanup; addr &= ~0x0f; + /* Disable the automatic memory restoration from breakpoints while + we read our instruction bundle. Otherwise, the general restoration + mechanism kicks in and ends up corrupting our bundle, because it + is not aware of the concept of instruction bundles. */ + cleanup = make_show_memory_breakpoints_cleanup (1); val = target_read_memory (addr, bundle, BUNDLE_LEN); /* Check for L type instruction in 2nd slot, if present then @@ -616,6 +622,7 @@ ia64_memory_remove_breakpoint (struct gdbarch *gdbarch, if (val == 0) target_write_memory (addr, bundle, BUNDLE_LEN); + do_cleanups (cleanup); return val; }