This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


This is v2 of the series first posted at:
  https://sourceware.org/ml/gdb-patches/2015-04/msg00073.html

While v1 had only been tested on x86-64 GNU/Linux, v2 was tested on:

     x86-64 GNU/Linux
     x86-64 GNU/Linux on top of software single-step branch
     PPC64 GNU/Linux
     S/390 GNU/Linux

The extra testing showed a few problems, mostly exposing prexisting
problems with displaced stepping support, but it caught a few bugs in
new code too here and there.  As a result, the series grew a few new
patches:

 - Patches #1, #8, #9 #10, #20, #21 and #22 are new in v2.

 - Old v1 patch #3 has been pushed to master meanwhile.

I tried to mention the differences to v1 in each patch that had
changes, if any (scroll past ChangeLog).

Due to extra testing and fixing I'm also much more confident in this
series.

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
convenience.

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
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 (23):
  Fix gdb.base/sigstep.exp with displaced stepping on software
    single-step targets
  Fix and test "checkpoint" in non-stop mode
  PR13858 - Can't do displaced stepping with no symbols
  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
  Test step-over-{lands-on-breakpoint|trips-on-watchpoint}.exp with
    displaced stepping
  Make gdb.threads/step-over-trips-on-watchpoint.exp effective on !x86
  PPC64: Fix step-over-trips-on-watchpoint.exp with displaced stepping
    on
  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: symbol-file + exec-file results in broken displaced stepping
  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/gdbthread.h                                    |   57 +-
 gdb/gnu-nat.c                                      |    7 -
 gdb/inf-ptrace.c                                   |    6 +-
 gdb/infcmd.c                                       |    6 +-
 gdb/inferior.h                                     |    8 +
 gdb/infrun.c                                       | 2199 +++++++++++++++-----
 gdb/infrun.h                                       |    3 +
 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/symfile.c                                      |   21 +
 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/sigstep.exp                 |   86 +-
 gdb/testsuite/gdb.base/step-over-no-symbols.exp    |   88 +
 gdb/testsuite/gdb.base/symbol-file-exec-file.c     |   30 +
 gdb/testsuite/gdb.base/symbol-file-exec-file.exp   |  126 ++
 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 |   20 +-
 .../gdb.threads/step-over-lands-on-breakpoint.c    |   17 +-
 .../gdb.threads/step-over-lands-on-breakpoint.exp  |   24 +-
 .../gdb.threads/step-over-trips-on-watchpoint.c    |   19 +-
 .../gdb.threads/step-over-trips-on-watchpoint.exp  |   65 +-
 gdb/thread.c                                       |  206 +-
 gdb/windows-nat.c                                  |    6 +-
 41 files changed, 3036 insertions(+), 768 deletions(-)
 create mode 100644 gdb/testsuite/gdb.base/checkpoint-ns.exp
 create mode 100644 gdb/testsuite/gdb.base/step-over-no-symbols.exp
 create mode 100644 gdb/testsuite/gdb.base/symbol-file-exec-file.c
 create mode 100644 gdb/testsuite/gdb.base/symbol-file-exec-file.exp
 create mode 100644 gdb/testsuite/gdb.base/valgrind-disp-step.c
 create mode 100644 gdb/testsuite/gdb.base/valgrind-disp-step.exp

-- 
1.9.3


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]