From: "Breazeal, Don" <donb@codesourcery.com>
To: Gary Benson <gbenson@redhat.com>, gdb-patches@sourceware.org
Subject: Re: [PATCH 02/15] Remove some GDBSERVER checks from linux-ptrace
Date: Wed, 09 Jul 2014 17:27:00 -0000 [thread overview]
Message-ID: <53BD7B6C.8030205@codesourcery.com> (raw)
In-Reply-To: <1404902255-11101-3-git-send-email-gbenson@redhat.com>
Hi,
On 7/9/2014 3:37 AM, Gary Benson wrote:
> This patch removes some GDBSERVER checks from nat/linux-ptrace.c.
> Currently the code uses a compile-time check to decide whether some
> flags should be used. This changes the code to instead let users of
> the module specify an additional set of flags; and then changes gdb's
> linux-nat.c to call this function. At some later date, when the back
> ends are fully merged, we will be able to remove this function again.
I just want to point out that I'm doing something similar as part of my
work on follow-fork for extended remote, based on Tom's suggestion here:
https://sourceware.org/ml/gdb-patches/2014-05/msg00486.html
In my case it adds "base" options and the capability to set the ptrace
options to the "additional" options at the caller's discretion, such as
when gdbserver receives the enable-extended-mode packet. So, no
objection, just wanted to let you know that I hope to submit somewhat
different changes to the same code soon.
--Don
>
> gdb/
> 2014-07-09 Tom Tromey <tromey@redhat.com>
> Gary Benson <gbenson@redhat.com>
>
> * nat/linux-ptrace.c (additional_flags): New global.
> (linux_test_for_tracesysgood, linux_test_for_tracefork): Use
> additional_flags; don't check GDBSERVER.
> (linux_ptrace_set_additional_flags): New function.
> * nat/linux-ptrace.h (linux_ptrace_set_additional_flags):
> Declare.
> * linux-nat.c (_initialize_linux_nat): Call
> linux_ptrace_set_additional_flags.
> ---
> gdb/ChangeLog | 12 +++++++++
> gdb/linux-nat.c | 6 ++++
> gdb/nat/linux-ptrace.c | 64 ++++++++++++++++++++++++-----------------------
> gdb/nat/linux-ptrace.h | 1 +
> 4 files changed, 52 insertions(+), 31 deletions(-)
>
> diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
> index 0ab0362..5c7a21a 100644
> --- a/gdb/linux-nat.c
> +++ b/gdb/linux-nat.c
> @@ -5025,6 +5025,12 @@ Enables printf debugging output."),
> sigdelset (&suspend_mask, SIGCHLD);
>
> sigemptyset (&blocked_mask);
> +
> + linux_ptrace_set_additional_flags (PTRACE_O_TRACESYSGOOD
> + | PTRACE_O_TRACEVFORKDONE
> + | PTRACE_O_TRACEVFORK
> + | PTRACE_O_TRACEFORK
> + | PTRACE_O_TRACEEXEC);
> }
> \f
>
> diff --git a/gdb/nat/linux-ptrace.c b/gdb/nat/linux-ptrace.c
> index 3ad2113..59c9bfa 100644
> --- a/gdb/nat/linux-ptrace.c
> +++ b/gdb/nat/linux-ptrace.c
> @@ -37,6 +37,10 @@
> there are no supported features. */
> static int current_ptrace_options = -1;
>
> +/* Additional flags to test. */
> +
> +static int additional_flags;
> +
> /* Find all possible reasons we could fail to attach PID and append
> these as strings to the already initialized BUFFER. '\0'
> termination of BUFFER must be done by the caller. */
> @@ -359,16 +363,15 @@ linux_check_ptrace_features (void)
> static void
> linux_test_for_tracesysgood (int child_pid)
> {
> -#ifdef GDBSERVER
> - /* gdbserver does not support PTRACE_O_TRACESYSGOOD. */
> -#else
> - int ret;
> + if ((additional_flags & PTRACE_O_TRACESYSGOOD) != 0)
> + {
> + int ret;
>
> - ret = ptrace (PTRACE_SETOPTIONS, child_pid, (PTRACE_TYPE_ARG3) 0,
> - (PTRACE_TYPE_ARG4) PTRACE_O_TRACESYSGOOD);
> - if (ret == 0)
> - current_ptrace_options |= PTRACE_O_TRACESYSGOOD;
> -#endif
> + ret = ptrace (PTRACE_SETOPTIONS, child_pid, (PTRACE_TYPE_ARG3) 0,
> + (PTRACE_TYPE_ARG4) PTRACE_O_TRACESYSGOOD);
> + if (ret != 0)
> + additional_flags &= ~PTRACE_O_TRACESYSGOOD;
> + }
> }
>
> /* Determine if PTRACE_O_TRACEFORK can be used to follow fork
> @@ -388,16 +391,15 @@ linux_test_for_tracefork (int child_pid)
> if (ret != 0)
> return;
>
> -#ifdef GDBSERVER
> - /* gdbserver does not support PTRACE_O_TRACEVFORKDONE yet. */
> -#else
> - /* Check if the target supports PTRACE_O_TRACEVFORKDONE. */
> - ret = ptrace (PTRACE_SETOPTIONS, child_pid, (PTRACE_TYPE_ARG3) 0,
> - (PTRACE_TYPE_ARG4) (PTRACE_O_TRACEFORK
> - | PTRACE_O_TRACEVFORKDONE));
> - if (ret == 0)
> - current_ptrace_options |= PTRACE_O_TRACEVFORKDONE;
> -#endif
> + if ((additional_flags & PTRACE_O_TRACEVFORKDONE) != 0)
> + {
> + /* Check if the target supports PTRACE_O_TRACEVFORKDONE. */
> + ret = ptrace (PTRACE_SETOPTIONS, child_pid, (PTRACE_TYPE_ARG3) 0,
> + (PTRACE_TYPE_ARG4) (PTRACE_O_TRACEFORK
> + | PTRACE_O_TRACEVFORKDONE));
> + if (ret != 0)
> + additional_flags &= ~PTRACE_O_TRACEVFORKDONE;
> + }
>
> /* Setting PTRACE_O_TRACEFORK did not cause an error, however we
> don't know for sure that the feature is available; old
> @@ -433,18 +435,7 @@ linux_test_for_tracefork (int child_pid)
>
> /* We got the PID from the grandchild, which means fork
> tracing is supported. */
> -#ifdef GDBSERVER
> - /* Do not enable all the options for now since gdbserver does not
> - properly support them. This restriction will be lifted when
> - gdbserver is augmented to support them. */
> - current_ptrace_options |= PTRACE_O_TRACECLONE;
> -#else
> - current_ptrace_options |= PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK
> - | PTRACE_O_TRACECLONE | PTRACE_O_TRACEEXEC;
> -
> - /* Do not enable PTRACE_O_TRACEEXIT until GDB is more prepared to
> - support read-only process state. */
> -#endif
> + current_ptrace_options |= PTRACE_O_TRACECLONE | additional_flags;
>
> /* Do some cleanup and kill the grandchild. */
> my_waitpid (second_pid, &second_status, 0);
> @@ -551,3 +542,14 @@ linux_ptrace_init_warnings (void)
>
> linux_ptrace_test_ret_to_nx ();
> }
> +
> +/* Set additional ptrace flags to use. Some such flags may be checked
> + by the implementation above. This function must be called before
> + any other function in this file; otherwise the flags may not take
> + effect appropriately. */
> +
> +void
> +linux_ptrace_set_additional_flags (int flags)
> +{
> + additional_flags = flags;
> +}
> diff --git a/gdb/nat/linux-ptrace.h b/gdb/nat/linux-ptrace.h
> index cffb5ce..41b3198 100644
> --- a/gdb/nat/linux-ptrace.h
> +++ b/gdb/nat/linux-ptrace.h
> @@ -91,5 +91,6 @@ extern int linux_supports_tracefork (void);
> extern int linux_supports_traceclone (void);
> extern int linux_supports_tracevforkdone (void);
> extern int linux_supports_tracesysgood (void);
> +extern void linux_ptrace_set_additional_flags (int);
>
> #endif /* COMMON_LINUX_PTRACE_H */
>
next prev parent reply other threads:[~2014-07-09 17:27 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-09 11:25 [PATCH 00/15] Common code cleanups Gary Benson
2014-07-09 10:38 ` [PATCH 03/15] Make gdbserver CORE_ADDR unsigned Gary Benson
2014-07-11 19:34 ` Doug Evans
2014-07-09 10:38 ` [PATCH 02/15] Remove some GDBSERVER checks from linux-ptrace Gary Benson
2014-07-09 17:27 ` Breazeal, Don [this message]
2014-07-09 18:20 ` Gary Benson
2014-07-09 18:23 ` Breazeal, Don
2014-07-11 19:30 ` Doug Evans
2014-07-15 12:30 ` Gary Benson
2014-07-09 10:38 ` [PATCH 01/15] Introduce common/errors.h Gary Benson
2014-07-09 10:38 ` [PATCH 04/15] Introduce common-types.h Gary Benson
2014-07-09 10:39 ` [PATCH 11/15] More target unification Gary Benson
2014-07-14 19:17 ` Doug Evans
2014-07-16 10:23 ` Gary Benson
2014-07-09 10:39 ` [PATCH 09/15] Mostly remove GDBSERVER from linux-waitpid.c Gary Benson
2014-07-14 19:01 ` Doug Evans
2014-07-15 17:17 ` Gary Benson
2014-07-09 10:39 ` [PATCH 15/15] Finally remove GDBSERVER (mostly) from linux-btrace.c Gary Benson
2014-07-09 10:41 ` [PATCH 10/15] Add target/target.h Gary Benson
2014-07-10 17:50 ` Tom Tromey
2014-07-16 8:55 ` Gary Benson
2014-07-17 16:49 ` Tom Tromey
2014-07-09 10:41 ` [PATCH 08/15] Make btrace-common.h not use GDBSERVER Gary Benson
2014-07-14 18:59 ` Doug Evans
2014-07-09 10:41 ` [PATCH 07/15] Remove GDBSERVER use from nat/i386-dregs.c Gary Benson
2014-07-10 17:49 ` Tom Tromey
2014-07-11 12:57 ` Gary Benson
2014-07-11 15:38 ` Tom Tromey
2014-07-14 8:36 ` Gary Benson
2014-07-14 18:49 ` Doug Evans
2014-07-09 10:41 ` [PATCH 06/15] Remove simple GDBSERVER uses from common, nat and target Gary Benson
2014-07-14 18:49 ` Doug Evans
2014-07-15 15:42 ` Gary Benson
2014-07-09 10:52 ` [PATCH 05/15] Introduce and use debug_printf and debug_vprintf Gary Benson
2014-07-11 19:57 ` Doug Evans
2014-07-15 15:21 ` Gary Benson
2014-07-09 11:25 ` [PATCH 14/15] Introduce common_get_thread_regcache Gary Benson
2014-07-14 20:32 ` Doug Evans
2014-07-16 13:32 ` Gary Benson
2014-07-09 11:25 ` [PATCH 12/15] Add target/symbol.h, update users Gary Benson
2014-07-10 17:52 ` Tom Tromey
2014-07-10 18:55 ` Doug Evans
2014-07-10 19:16 ` Tom Tromey
2014-07-11 13:25 ` Gary Benson
2014-07-11 19:29 ` Doug Evans
2014-07-16 13:01 ` Gary Benson
2014-07-17 18:14 ` Tom Tromey
2014-07-16 10:38 ` Gary Benson
2014-07-17 16:50 ` Tom Tromey
2014-07-09 11:32 ` [PATCH 13/15] Finally remove GDBSERVER (mostly) from agent.c Gary Benson
2014-07-14 19:35 ` Doug Evans
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=53BD7B6C.8030205@codesourcery.com \
--to=donb@codesourcery.com \
--cc=gbenson@redhat.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