From 1de34ab72d7fe2c5a98a72f0e2b02d05828687a5 Mon Sep 17 00:00:00 2001 From: Joel Brobecker Date: Tue, 29 Apr 2008 21:14:06 +0000 Subject: [PATCH] * ia64-tdep.c (ia64_memory_remove_breakpoint): Set show_memory_breakpoints to 1 while reading the instruction bundle. --- gdb/ChangeLog | 5 +++++ gdb/ia64-tdep.c | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 35c6cea..b5a31dd 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 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 the FUNCTYPE parameter might be NULL. * gdbarch.h: Regenerated. diff --git a/gdb/ia64-tdep.c b/gdb/ia64-tdep.c index 37ed4fc..dd2064c 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; } -- 2.7.4