public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Don Breazeal <donb@codesourcery.com>
To: <gdb-patches@sourceware.org>
Subject: [Patch 00/16 v2] Linux extended-remote fork and exec events
Date: Thu, 21 Aug 2014 00:29:00 -0000	[thread overview]
Message-ID: <1408580964-27916-1-git-send-email-donb@codesourcery.com> (raw)
In-Reply-To: <1407434395-19089-1-git-send-email-donb@codesourcery.com>

This is an update to the patch series implementing fork events for 
extended-remote Linux targets.  Changes from the previous version:

 * Exec Events: integrated the previous patch series that implemented exec
   events for extended-remote Linux targets.  The exec patches had
   significant overlap with the fork event patch series, and it no longer
   made sense to maintain them separately.

 * Exec Catchpoints: the previous exec event patch series did not 
   implement 'catch exec'.  That is included here.

 * GDBserver Extended Feature Query: patch 4 has been completely rewritten.
   The previous version attempted to determine whether extended events
   were supported by gdbserver using information only on the host.  This
   approach was flawed and did not work at all once follow-exec was 
   introduced.  This mechanism now uses an new RSP message to determine
   which extended events are supported prior to attempting any activity
   that would require that support.  There is more detail in the patch
   4 description.

 * Coding Style: fixed a number of coding style violations.

 * Line Breaks in Descriptions: formatted the patch descriptions with line
   breaks in each paragraph, which might make them more accessible via
   web pages.

Maintainers may find it useful to consider this patch series as having
three parts:

 1) Patches 1-3: these refactor existing code without making any
    significant functional changes (aside from some new verbose 
    messages).

 2) Patches 4-10: these implement all the fork event functionality.

 3) Patches 11-16: these implement all the exec event functionality.

Dividing it like this may help make the large size of the patch series
more manageable.  Again, please let me know if there is anything I can do
to make this easier to review.

Eli approved patches 10 and 15 when they were posted previously.  The only
changes to these patches since then were those that he requested.

====================================================================
 
This patch series implements fork and exec events for extended-remote linux
targets.  Features that are enabled include:

 * follow-fork-mode
 * detach-on-fork
 * follow-exec-mode
 * catch fork/vfork/exec

This work addresses PR gdb/13584, and is part of the local/remote debugging
feature parity project
(https://sourceware.org/gdb/wiki/LocalRemoteFeatureParity).

My final test results showed the following changes:

 * native: PASS +46
   - this is due the addition of non-stop mode tests to
     gdb.threads/non-ldr-exc-*.exp.

 * remote: no change

 * extended-remote: PASS: +329, FAIL: -134, KFAIL: +1,
                    UNTESTED: +8, UNSUPPORTED: -6

Some items to note about the extended-remote results:

 - there are some extended-remote failures in
   gdb.base/disp-step-syscall.exp that don't show up in the unmodified
   version on the native target.  Investigation shows that these tests
   are producing a bogus PASS result on the native target.  I did not
   pursue this further.

 - the new non-stop tests in gdb.threads/non-ldr-exc-*.exp give an
   UNTESTED result for extended-remote.  This is due to an RSP
   error in non-stop mode when running to main.  I spent some time
   investigating this and concluded that I should leave it alone for now,
   for fear of having an ever-growing, never-ending project.  My plan is
   to track this with a bug report once that is appropriate.

 - gdb.threads/thread-execl.exp gives a couple of failures related to
   scheduler locking.  As with the previous item, after spending some
   time on this I concluded that pursuing it further now would be
   feature-creep, and that this should be tracked with a bug report.

 - gdb.trace/tspeed.exp got some timeout failures one time, but I
   was unable to reproduce it.  I'm unsure whether this is significant.

I can provide test logs or .sum diffs if anybody is interested in
specifics.

The contents of the patch series are as follows:

Patch 1: refactor native follow-fork implementation to move
target-independent code from target-dependent file (linux-nat.c)
to make it useful for extended-remote targets.

Patch 2: encapsulate the code used to print verbose/debug messages
related to folow-fork into functions, and add a message in one case.
Also make messages distinguish between fork and vfork.

Patch 3: encapsulate code that identifies and extracts extended
ptrace events found in the Linux wait status into functions, and call
them everywhere that the hard-coded wait status processing was used.

Patch 4: implements a mechanism for determining what extended-mode
features gdbserver supports.  There are several issues that this addresses,
which are detailed in the patch 4 description.  Basically, the patch
implements a new RSP packet "qExtendedFeatures" that allows GDB to ask
gdbserver for the list of extended features that are enabled prior to 
doing anything that would require such a feature.  In gdbserver, it splits
checking whether the OS supports the features from actually enabling
them, and enables them only when it is clear that extended mode is
active.  To facilitate this the patch also extends the changes that Gary
Benson implemented to reduce the use of #ifdef GDBSERVER in linux-ptrace.c
here:
https://support urceware.org/ml/gdb-patches/2014-07/msg00633.html.

Patch 5: implements some functions to clone the breakpoint lists in
gdbserver.  These are needed because in gdbserver, each process maintains a
separate breakpoint list.  When a fork occurs, the child process needs a
copy of the parent's breakpoint list so that it can manage the breakpoints
using existing mechanisms in gdbserver.

Patch 6: implements follow-fork, but only for 'fork', not 'vfork'.  I split
these apart in an attempt to keep the size of the patches down to a
reviewable size.

Patch 7: adds the architecture-specific pieces of follow-fork.  This is the
mechanism that handles copying the debug register state from the parent to
the child.

Patch 8: adds follow-fork for vfork.

Patch 9: adds 'catch fork' and 'catch vfork', along with some code to make
sure that killing a process that has forked, but before the fork is
followed, also kills the child process.

Patch 10: implements changes to the manual and the NEWS file for the fork
event changes.

Patch 11: implements support for the extended ptrace event
PTRACE_EVENT_EXIT, which is a prerequisite for the exec event support.

Patch 12: implements exec event support and follow-exec.

Patch 13: implements exec catchpoints.

Patch 14: suppresses some spurious warnings that were generated after
an exec.  These warnings were caused when gdbserver attempted to check
the version number from the r_debug structure in the new image before
the structure had been initialized.

Patch 15: implements changed to the manual and NEWS file for the exec
event changes.

Patch 16: changes how gdb.base/foll-exec.exp starts GDB and loads the
program so that it will work with extended-remote.  It also extends the
tests gdb.threads/non-ldr-exc-[1-4].exp to test in non-stop mode as well as
in all-stop mode.

thanks
--Don

 gdb/NEWS                                          |   18 +
 gdb/doc/gdb.texinfo                               |   42 ++-
 gdb/gdbserver/gdbthread.h                         |    5 +
 gdb/gdbserver/linux-aarch64-low.c                 |   28 ++
 gdb/gdbserver/linux-arm-low.c                     |   26 +
 gdb/gdbserver/linux-low.c                         |  511 +++++++++++++++++++--
 gdb/gdbserver/linux-low.h                         |    8 +
 gdb/gdbserver/linux-mips-low.c                    |   76 +++-
 gdb/gdbserver/linux-x86-low.c                     |   29 ++
 gdb/gdbserver/lynx-low.c                          |    4 +
 gdb/gdbserver/mem-break.c                         |  104 +++++
 gdb/gdbserver/mem-break.h                         |    6 +
 gdb/gdbserver/nto-low.c                           |    4 +
 gdb/gdbserver/remote-utils.c                      |   45 ++-
 gdb/gdbserver/server.c                            |   92 ++++
 gdb/gdbserver/server.h                            |    3 +
 gdb/gdbserver/spu-low.c                           |    4 +
 gdb/gdbserver/target.h                            |   33 ++
 gdb/gdbserver/win32-low.c                         |    4 +
 gdb/infrun.c                                      |  296 +++++++++++-
 gdb/infrun.h                                      |    2 -
 gdb/linux-nat.c                                   |  264 ++----------
 gdb/nat/linux-procfs.c                            |   18 +
 gdb/nat/linux-procfs.h                            |    4 +
 gdb/nat/linux-ptrace.c                            |  150 +++++--
 gdb/nat/linux-ptrace.h                            |   10 +-
 gdb/remote.c                                      |  337 +++++++++++++--
 gdb/testsuite/gdb.base/foll-exec.exp              |   44 +--
 gdb/testsuite/gdb.base/foll-fork.exp              |   12 +-
 gdb/testsuite/gdb.base/foll-vfork.exp             |    8 +-
 gdb/testsuite/gdb.threads/fork-thread-pending.exp |   23 +-
 gdb/testsuite/gdb.threads/non-ldr-exc-1.exp       |   20 +-
 gdb/testsuite/gdb.threads/non-ldr-exc-2.exp       |   36 ++-
 gdb/testsuite/gdb.threads/non-ldr-exc-3.exp       |   36 ++-
 gdb/testsuite/gdb.threads/non-ldr-exc-4.exp       |   20 +-
 35 files changed, 1891 insertions(+), 431 deletions(-)

  parent reply	other threads:[~2014-08-21  0:29 UTC|newest]

Thread overview: 110+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-07 18:00 [PATCH 00/10] Linux extended-remote fork events Don Breazeal
2014-08-07 18:00 ` [PATCH 04/10] Enhance extended ptrace event setup Don Breazeal
2014-08-13 17:50   ` Breazeal, Don
2014-08-07 18:00 ` [PATCH 02/10] Refactor follow-fork message printing Don Breazeal
2014-08-07 18:00 ` [PATCH 01/10] Refactor native follow-fork Don Breazeal
2014-08-07 18:00 ` [PATCH 06/10] Extended-remote follow fork Don Breazeal
2014-08-07 18:00 ` [PATCH 03/10] Refactor extended ptrace event status Don Breazeal
2014-08-07 18:00 ` [PATCH 05/10] GDBserver clone breakpoint list Don Breazeal
2014-08-07 18:00 ` [PATCH 07/10] Extended-remote arch-specific follow fork Don Breazeal
2014-08-07 18:01 ` [PATCH 10/10] Extended-remote fork event documentation Don Breazeal
2014-08-07 19:31   ` Eli Zaretskii
2014-08-08 15:35     ` Breazeal, Don
2014-08-07 18:01 ` [PATCH 09/10] Extended-remote fork catchpoints Don Breazeal
2014-08-07 18:01 ` [PATCH 08/10] Extended-remote follow vfork Don Breazeal
2014-08-21  0:29 ` [PATCH 01/16 v2] Refactor native follow-fork Don Breazeal
2014-09-05 14:20   ` Pedro Alves
2014-09-05 18:56     ` Breazeal, Don
2014-09-05 20:20       ` Breazeal, Don
2014-09-09 10:57       ` Pedro Alves
2014-09-08 23:54     ` Breazeal, Don
2014-09-09 11:09       ` Pedro Alves
2014-09-12 16:50         ` Breazeal, Don
2014-09-22 15:53           ` Breazeal, Don
2014-09-26 18:13           ` Pedro Alves
2014-09-29 18:08             ` Breazeal, Don
2014-09-30 10:56               ` Pedro Alves
2014-09-30 18:43                 ` Breazeal, Don
2014-08-21  0:29 ` Don Breazeal [this message]
2014-09-04 20:57   ` [Patch 00/16 v2] Linux extended-remote fork and exec events Breazeal, Don
2014-10-31 23:29   ` [PATCH 05/16 v3] GDBserver clone breakpoint list Don Breazeal
2014-10-31 23:29   ` [PATCH 06/16 v3] Extended-remote Linux follow fork Don Breazeal
2014-11-13 13:00     ` Pedro Alves
2014-11-13 18:53       ` Breazeal, Don
2014-11-13 18:59         ` Pedro Alves
2014-11-13 19:06           ` Breazeal, Don
2014-12-06  0:31             ` Breazeal, Don
2015-01-23 12:53               ` Pedro Alves
2015-01-23 17:18                 ` Breazeal, Don
     [not found]                 ` <1422222420-25421-1-git-send-email-donb@codesourcery.com>
2015-01-25 21:49                   ` [PATCH v4 5/7] Arch-specific remote " Don Breazeal
2015-02-10 16:37                     ` Pedro Alves
2015-01-25 21:49                   ` [PATCH v4 6/7] Remote follow vfork Don Breazeal
2015-02-10 16:39                     ` Pedro Alves
2015-01-25 21:50                   ` [PATCH v4 1/7] Identify remote fork event support Don Breazeal
2015-02-10 16:34                     ` Pedro Alves
2015-01-25 21:50                   ` [PATCH v4 2/7] Clone remote breakpoints Don Breazeal
2015-01-25 21:58                   ` [PATCH v4 7/7] Remote fork catch Don Breazeal
2015-01-26  0:07                   ` [PATCH v4 3/7 v3] Extended-remote Linux follow fork Don Breazeal
2015-02-10 16:36                     ` Pedro Alves
2015-01-26  0:20                   ` [PATCH v4 4/7] Target remote " Don Breazeal
2015-01-12 22:39             ` [PATCH 06/16 v3] Extended-remote Linux " Don Breazeal
2015-01-12 22:49               ` Breazeal, Don
2014-10-31 23:29   ` [PATCH 00/16 v3] Linux extended-remote fork and exec events Don Breazeal
2014-11-12 15:54     ` Pedro Alves
2014-11-13 13:41     ` Pedro Alves
2014-11-13 13:51       ` Pedro Alves
2014-11-13 14:58         ` Pedro Alves
2014-11-13 19:14     ` Pedro Alves
2014-10-31 23:29   ` [PATCH 08/16 v3] Extended-remote follow vfork Don Breazeal
2014-10-31 23:29   ` [PATCH 04/16 v3] Determine supported extended-remote features Don Breazeal
2014-11-13 12:59     ` Pedro Alves
2014-11-13 18:28       ` Breazeal, Don
2014-11-13 18:33         ` Pedro Alves
2014-11-13 19:08           ` Pedro Alves
2014-11-13 18:37         ` Breazeal, Don
2014-11-13 18:48           ` Pedro Alves
2014-12-06  0:30             ` Breazeal, Don
2015-01-12 22:36           ` Don Breazeal
2015-01-21 21:02             ` Breazeal, Don
2014-10-31 23:29   ` [PATCH 07/16 v3] Extended-remote arch-specific follow fork Don Breazeal
2014-10-31 23:30   ` [PATCH 10/16 v3] Extended-remote fork event documentation Don Breazeal
2014-10-31 23:30   ` [PATCH 12/16 v3] Extended-remote follow exec Don Breazeal
2014-10-31 23:30   ` [PATCH 13/16 v3] Extended-remote exec catchpoints Don Breazeal
2014-10-31 23:30   ` [PATCH 09/16 v3] Extended-remote fork catchpoints Don Breazeal
2014-10-31 23:30   ` [PATCH 11/16 v3] Extended-remote Linux exit events Don Breazeal
2014-11-13 19:18     ` Pedro Alves
2014-10-31 23:31   ` [PATCH 14/16 v3] Suppress spurious warnings with extended-remote follow exec Don Breazeal
2014-10-31 23:31   ` [PATCH 15/16 v3] Extended-remote exec event documentation Don Breazeal
2014-10-31 23:31   ` [PATCH 16/16 v3] Non-stop follow exec tests Don Breazeal
2014-08-21  0:30 ` [PATCH 03/16 v2] Refactor ptrace extended event status Don Breazeal
2014-09-09 11:31   ` Pedro Alves
2014-09-19 18:14     ` [pushed] " Breazeal, Don
2014-08-21  0:30 ` [PATCH 04/16 v2] Determine supported extended-remote features Don Breazeal
2014-10-15 16:17   ` Pedro Alves
2014-10-21 23:23     ` Breazeal, Don
2014-10-22 21:48       ` Pedro Alves
2014-10-31 23:38         ` Breazeal, Don
2014-08-21  0:30 ` [PATCH 02/16 v2] Refactor follow-fork message printing Don Breazeal
2014-09-26 19:52   ` Pedro Alves
2014-09-26 20:14     ` Breazeal, Don
2014-10-03 23:51       ` Breazeal, Don
2014-10-15 16:08       ` Pedro Alves
2014-10-22 23:47         ` Breazeal, Don
2014-10-24 12:35           ` Pedro Alves
2014-10-24 18:45             ` Breazeal, Don
2014-08-21  0:31 ` [PATCH 06/16 v2] Extended-remote Linux follow fork Don Breazeal
2014-09-19 20:57   ` Breazeal, Don
2014-08-21  0:31 ` [PATCH 07/16 v2] Extended-remote arch-specific " Don Breazeal
2014-09-19 21:26   ` Breazeal, Don
2014-08-21  0:31 ` [PATCH 05/16 v2] GDBserver clone breakpoint list Don Breazeal
2014-10-15 17:40   ` Pedro Alves
2014-10-31 23:44     ` Breazeal, Don
2014-08-21  0:32 ` [PATCH 08/16 v2] Extended-remote follow vfork Don Breazeal
2014-08-21  0:33 ` [PATCH 09/16 v2] Extended-remote fork catchpoints Don Breazeal
2014-08-21  0:33 ` [PATCH 10/16 v2] Extended-remote fork event documentation Don Breazeal
2014-08-21  0:33 ` [PATCH 11/16 v2] Extended-remote Linux exit events Don Breazeal
2014-08-21  0:34 ` [PATCH 13/16 v2] Extended-remote exec catchpoints Don Breazeal
2014-08-21  0:34 ` [PATCH 12/16 v2] Extended-remote follow exec Don Breazeal
2014-08-21  0:35 ` [PATCH 14/16 v2] Suppress spurious warnings with extended-remote " Don Breazeal
2014-08-21  0:36 ` [PATCH 15/16 v2] Extended-remote exec event documentation Don Breazeal
2014-08-21  0:36 ` [PATCH 16/16 v2] Non-stop follow exec tests Don Breazeal

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1408580964-27916-1-git-send-email-donb@codesourcery.com \
    --to=donb@codesourcery.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).