This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [RFA] Submit process record and replay fourth time, 5/8
- From: Hui Zhu <teawater at gmail dot com>
- To: "gdb-patches at sourceware dot org" <gdb-patches at sourceware dot org>
- Cc: Pedro Alves <pedro at codesourcery dot com>, Marc Khouzam <marc dot khouzam at ericsson dot com>, Michael Snyder <msnyder at vmware dot com>, Thiago Jung Bauermann <bauerman at br dot ibm dot com>, Eli Zaretskii <eliz at gnu dot org>, paawan1982 at yahoo dot com, Mark Kettenis <mark dot kettenis at xs4all dot nl>
- Date: Thu, 16 Apr 2009 01:04:48 +0800
- Subject: Re: [RFA] Submit process record and replay fourth time, 5/8
- References: <daef60380903210902v31f4afe4o96678e89b1d16710@mail.gmail.com> <daef60380903250021ge06043ei27e89a46239ef8a7@mail.gmail.com>
Add RECORD_IS_USED.
---
infrun.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
--- a/infrun.c
+++ b/infrun.c
@@ -48,6 +48,7 @@
#include "gdb_assert.h"
#include "mi/mi-common.h"
#include "event-top.h"
+#include "record.h"
/* Prototypes for local functions */
@@ -603,7 +604,8 @@ use_displaced_stepping (struct gdbarch *
return (((can_use_displaced_stepping == can_use_displaced_stepping_auto
&& non_stop)
|| can_use_displaced_stepping == can_use_displaced_stepping_on)
- && gdbarch_displaced_step_copy_insn_p (gdbarch));
+ && gdbarch_displaced_step_copy_insn_p (gdbarch)
+ && !RECORD_IS_USED);
}
/* Clean out any stray displaced stepping state. */
@@ -2130,6 +2132,10 @@ adjust_pc_after_break (struct execution_
if (software_breakpoint_inserted_here_p (breakpoint_pc)
|| (non_stop && moribund_breakpoint_here_p (breakpoint_pc)))
{
+ struct cleanup *old_cleanups = NULL;
+ if (RECORD_IS_USED)
+ old_cleanups = record_gdb_operation_disable_set ();
+
/* When using hardware single-step, a SIGTRAP is reported for both
a completed single-step and a software breakpoint. Need to
differentiate between the two, as the latter needs adjusting
@@ -2153,6 +2159,9 @@ adjust_pc_after_break (struct execution_
|| !currently_stepping (ecs->event_thread)
|| ecs->event_thread->prev_pc == breakpoint_pc)
regcache_write_pc (regcache, breakpoint_pc);
+
+ if (old_cleanups)
+ do_cleanups (old_cleanups);
}
}