From 36728e82bd9bb5b472eb569dc11b8f2296d5e3df Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Wed, 15 Oct 2014 20:18:32 +0100 Subject: [PATCH] Non-stop + software single-step archs: don't force displaced-stepping for all single-steps This finally reverts this bit of commit 929dfd4f: 2009-07-31 Pedro Alves Julian Brown ... (resume): If this is a software single-stepping arch, and displaced-stepping is enabled, use it for all single-step requests. ... That means that in non-stop (or really displaced-stepping) mode, on software single-step archs - even those that only use sss breakpoints to deal with atomic sequences, like PPC - if we have more than one thread single-stepping, we'll always serialize the threads' single-steps, as only one thread may be displaced stepping at a given time, because there's only one scratch pad. We originally did that because GDB didn't support having multiple threads software-single-stepping simultaneously. The previous patches fixed that limitation, so we can now finally revert this too. Tested on: - x86_64 Fedora 20, on top of the 'software single-step on x86' series. gdb/ 2014-10-15 Pedro Alves * infrun.c (resume): Don't force displaced-stepping for all single-steps on software single-stepping archs. --- gdb/ChangeLog | 5 +++++ gdb/infrun.c | 3 +-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a2b197cb740..d4827d6d32a 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2014-10-15 Pedro Alves + + * infrun.c (resume): Don't force displaced-stepping for all + single-steps on software single-stepping archs. + 2014-10-15 Pedro Alves * breakpoint.c (single_step_breakpoints): Delete global. diff --git a/gdb/infrun.c b/gdb/infrun.c index 0f30a623f25..23c79f210e5 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -2089,8 +2089,7 @@ a command like `return' or `jump' to continue execution.")); event, displaced stepping breaks the vfork child similarly as single step software breakpoint. */ if (use_displaced_stepping (gdbarch) - && (tp->control.trap_expected - || (step && gdbarch_software_single_step_p (gdbarch))) + && tp->control.trap_expected && sig == GDB_SIGNAL_0 && !current_inferior ()->waiting_for_vfork_done) { -- 2.30.2