[PATCH v3 00/23] All-stop on top of non-stop

Simon Marchi simon.marchi@ericsson.com
Mon Apr 20 17:35:00 GMT 2015


On 15-04-17 06:45 AM, Pedro Alves wrote:
> This is v3 of the series first posted at:
>   https://sourceware.org/ml/gdb-patches/2015-04/msg00073.html
> v2 here:
>   https://sourceware.org/ml/gdb-patches/2015-04/msg00198.html
> 
> Compared to v2, this version:
> 
> - Fixes problems on software single-step targets, first exposed by
>   Yao's ARM testing.
> 
> - Makes the per-inferior displaced stepping queue work correctly
>   again.  v1 and v2 has borked that.
> 
> - General cleanups.
> 
> A few patches in v2 were pushed to master meanwhile.  This one in v2
> was dropped in v3:
> 
>   https://sourceware.org/ml/gdb-patches/2015-04/msg00207.html
>   PPC64: symbol-file + exec-file results in broken displaced stepping
> 
> because we now don't trip on that issue anymore, since this went in:
> 
>   https://sourceware.org/ml/gdb-patches/2015-04/msg00341.html
>   [PATCH][AT_ENTRY version] PR13858 - Can't do displaced stepping with no symbols
> 
> The bug is still present, but is now latent, so I'll probably resend
> that one out separately at some point.
> 
> I tried to mention the differences to v2 in each patch that had
> changes, if any (scroll past ChangeLog).
> 
> Documentation changes have not changed, and have already been
> approved.
> 
> Note most of these patches can go in without the final bits that
> actually do all-stop-on-top-of-non-stop, as they fix problems that
> exist e.g., with "set non-stop on" or "set displaced-stepping on" too.
> 
> I've (force) pushed this to users/palves/all-stop-non-stop for review
> and testing convenience.
> 
> Tested on:
> 
>      x86-64 GNU/Linux
>      x86-64 GNU/Linux on top of software single-step branch
>      PPC64 GNU/Linux
>      S/390 GNU/Linux
> 
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> Series-intro proper follows:
> 
> This series implements user-visible all-stop mode running with the
> target_ops backend always in non-stop mode.  This is a stepping stone
> towards finer-grained control of threads, being able to do interesting
> things like inferior and thread groups/sets (itsets), associating
> groups with breakpoints (which threads cause a stop, which threads are
> implicitly paused when a breakpoint triggers), etc.  From the user's
> perspective, all-stop mode is really just a special case of being able
> to stop and resume specific sets of threads, so it makes sense to do
> this step first.
> 
> After this series, even in all-stop mode ("set non-stop off", the
> default) the target is no longer in charge of stopping all threads
> before reporting an event to the core -- the core takes care of it
> when it sees fit.  For example, when "next"- or "step"-ing, we can
> avoid stopping and resuming all threads at each internal single-step,
> and instead only stop all threads when we're about to present the stop
> to the user.
> 
> In order to get there, the series teaches GDB to do non-stop mode even
> without displaced stepping (stop all threads, step over breakpoint,
> restart threads), as displaced stepping isn't implemented everywhere,
> and doesn't work in some scenarios (as in, we can't use it, not that
> it's buggy).
> 
> And then it fixes all testsuite regressions (on native x86-64, ppc64
> and s390 GNU/Linux) this new mode causes, compared to all-stop ("set
> non-stop off") with the target backend in all-stop mode too (i.e., the
> current default).  Making "target remote" work in always non-stop mode
> is deferred for later (this will be even more useful for remote as the
> all-stop mode RSP variant can't really do asynchronous debugging).
> 
> Tested on x86_64 Fedora 20, native, with and without "set displaced
> off", and with and without "maint set target-non-stop on"; and also
> against gdbserver.  Tested on x86-64 GNU/Linux native on top of x86
> software single-step branch.  Tested on PPC64 Fedora 18.  Tested on
> S/390 RHEL 7.1.
> 
> Pedro Alves (17):
>   Fix and test "checkpoint" in non-stop mode
>   Change adjust_pc_after_break's prototype
>   remote.c/all-stop: Implement TARGET_WAITKIND_NO_RESUMED and
>     TARGET_WNOHANG
>   Make thread_still_needs_step_over consider stepping_over_watchpoint
>     too
>   Embed the pending step-over chain in thread_info objects
>   Use keep_going in proceed and start_step_over too
>   Misc switch_back_to_stepped_thread cleanups
>   Factor out code to re-resume stepped thread
>   Teach non-stop to do in-line step-overs (stop all, step, restart)
>   Implement all-stop on top of a target running non-stop mode
>   Fix signal-while-stepping-over-bp-other-thread.exp on targets always
>     in non-stop
>   Fix interrupt-noterm.exp on targets always in non-stop
>   Fix step-over-{trips-on-watchpoint|lands-on-breakpoint}.exp race
>   Disable displaced stepping if trying it fails
>   PPC64: Fix gdb.arch/ppc64-atomic-inst.exp with displaced stepping
>   S/390: displaced stepping and PC-relative RIL-b/RIL-c instructions
>   native Linux: enable always non-stop by default
> 
>  gdb/NEWS                                           |    6 +
>  gdb/breakpoint.c                                   |   11 +-
>  gdb/darwin-nat.c                                   |    6 +-
>  gdb/doc/gdb.texinfo                                |   24 +
>  gdb/gdbarch.h                                      |    6 +-
>  gdb/gdbarch.sh                                     |    4 +
>  gdb/gdbthread.h                                    |   60 +-
>  gdb/gnu-nat.c                                      |    7 -
>  gdb/inf-ptrace.c                                   |    6 +-
>  gdb/infcmd.c                                       |    6 +-
>  gdb/infrun.c                                       | 2290 +++++++++++++++-----
>  gdb/infrun.h                                       |    7 +
>  gdb/linux-nat.c                                    |   33 +-
>  gdb/monitor.c                                      |    4 +-
>  gdb/nto-procfs.c                                   |   14 +-
>  gdb/procfs.c                                       |    4 +-
>  gdb/remote-m32r-sdi.c                              |    6 +-
>  gdb/remote-sim.c                                   |   20 +-
>  gdb/remote.c                                       |   57 +-
>  gdb/rs6000-tdep.c                                  |   68 +-
>  gdb/s390-linux-tdep.c                              |  115 +-
>  gdb/target-delegates.c                             |   59 +
>  gdb/target.c                                       |   83 +
>  gdb/target.h                                       |   24 +-
>  gdb/target/waitstatus.h                            |    5 +-
>  gdb/testsuite/gdb.arch/ppc64-atomic-inst.exp       |   50 +-
>  gdb/testsuite/gdb.base/checkpoint-ns.exp           |   27 +
>  gdb/testsuite/gdb.base/checkpoint.exp              |   31 +-
>  gdb/testsuite/gdb.base/valgrind-disp-step.c        |   32 +
>  gdb/testsuite/gdb.base/valgrind-disp-step.exp      |  131 ++
>  .../signal-while-stepping-over-bp-other-thread.exp |    2 +-
>  .../gdb.threads/step-over-lands-on-breakpoint.c    |   17 +-
>  .../gdb.threads/step-over-lands-on-breakpoint.exp  |    6 +-
>  .../gdb.threads/step-over-trips-on-watchpoint.c    |   17 +-
>  .../gdb.threads/step-over-trips-on-watchpoint.exp  |    9 +-
>  gdb/thread.c                                       |  197 +-
>  gdb/windows-nat.c                                  |    6 +-
>  37 files changed, 2741 insertions(+), 709 deletions(-)
>  create mode 100644 gdb/testsuite/gdb.base/checkpoint-ns.exp
>  create mode 100644 gdb/testsuite/gdb.base/valgrind-disp-step.c
>  create mode 100644 gdb/testsuite/gdb.base/valgrind-disp-step.exp

FYI, I ran the Eclipse CDT testsuite using this branch and it's all green. :)

Simon



More information about the Gdb-patches mailing list