public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Andrew Burgess <aburgess@redhat.com>
To: Aaron Merey via Gdb-patches <gdb-patches@sourceware.org>,
	gdb-patches@sourceware.org
Cc: Aaron Merey <amerey@redhat.com>
Subject: Re: [PATCH 2/7] gdb: add 'lazy' setting for command 'set debuginfod enabled'
Date: Wed, 24 May 2023 10:31:48 +0100	[thread overview]
Message-ID: <871qj6848r.fsf@redhat.com> (raw)
In-Reply-To: <20230227194212.348003-2-amerey@redhat.com>

Aaron Merey via Gdb-patches <gdb-patches@sourceware.org> writes:

> 'set debuginfod enabled lazy' turns on debuginfod downloading like
> 'set debuginfod enabled on' but also enables ELF/DWARFs section
> downloading via debuginfod_section_query.

If I understand correctly, 'lazy' can still download the full files
(when needed), but might first download some of the sections (e.g. the
index), which might allow us to skip downloading the full files?

I'm not sure that adding the 'lazy' setting as another option is the
correct way to go.  I'll explain more below...

>
> If support for debuginfod section queries was not found at configure
> time, 'set debuginfod enabled lazy' will print an error message
> indicating the missing support and default to 'set debuginfod enabled on'.
>
> Also update the help text and gdb.texinfo section for 'set debuginfod enabled'
> with information on the lazy setting.
> ---
>  gdb/debuginfod-support.c | 20 +++++++++++++++++---
>  gdb/doc/gdb.texinfo      |  9 +++++++--
>  2 files changed, 24 insertions(+), 5 deletions(-)
>
> diff --git a/gdb/debuginfod-support.c b/gdb/debuginfod-support.c
> index f909742362f..12025fcf0c0 100644
> --- a/gdb/debuginfod-support.c
> +++ b/gdb/debuginfod-support.c
> @@ -34,12 +34,14 @@ static cmd_list_element *show_debuginfod_prefix_list;
>  static const char debuginfod_on[] = "on";
>  static const char debuginfod_off[] = "off";
>  static const char debuginfod_ask[] = "ask";
> +static const char debuginfod_lazy[] = "lazy";
>  
>  static const char *debuginfod_enabled_enum[] =
>  {
>    debuginfod_on,
>    debuginfod_off,
>    debuginfod_ask,
> +  debuginfod_lazy,
>    nullptr
>  };
>  
> @@ -411,7 +413,7 @@ debuginfod_section_query (const unsigned char *build_id,
>    return scoped_fd (-ENOSYS);
>  #else
>  
> - if (!debuginfod_is_enabled ())
> + if (debuginfod_enabled != debuginfod_lazy || !debuginfod_is_enabled ())
>      return scoped_fd (-ENOSYS);

Because you check for debuginfod_lazy first, and due to the
short-circuit evaluation, then if debuginfod_enabled is set to 'on',
'off', or 'ask' we will always return -ENOSYS.

As the default is 'ask' this feature is off by default, which I think is
a shame.

Even if we could call debuginfod_is_enabled here, and it asked the user,
it would just set the value to 'on', which apparently still isn't good
enough.

I would suggest that this option (debuginfod_enabled) should remain as a
yes/no/ask choice.  If the user selects 'yes', and section downloading
is supported by the current version of debuginfod then we should just do
that.  I don't think this level of control is something that users will
normally care about -- they'll either be OK with downloading stuff (and
select 'on'), or they are against downloading stuff (and select 'off').
I doubt there are many users who say ... I'm OK downloading full debug
files, but not the individual sections.

You could possibly add a new setting to individually control downloading
the sections, though I'm so convinced that this isn't something a user
will care about that I would suggest this should be a maintenance
setting:

  maintenance set debuginfod download-sections on
  maintenance set debuginfod download-sections off
  maintenance show debuginfod download-sections

We can always move maintenance commands into the user space later if
needed,

>  
>    debuginfod_client *c = get_debuginfod_client ();
> @@ -451,6 +453,14 @@ static void
>  set_debuginfod_enabled (const char *value)
>  {
>  #if defined(HAVE_LIBDEBUGINFOD)
> +#if !defined(HAVE_DEBUGINFOD_FIND_SECTION)
> +  if (value == debuginfod_lazy)
> +    {
> +      debuginfod_enabled = debuginfod_on;
> +      error (_("Support for lazy downloading is not compiled into GDB. " \
> +"Defaulting to \"on\"."));
> +    }
> +#endif
>    debuginfod_enabled = value;
>  #else
>    /* Disabling debuginfod when gdb is not built with it is a no-op.  */
> @@ -550,8 +560,12 @@ _initialize_debuginfod ()
>  			_("Set whether to use debuginfod."),
>  			_("Show whether to use debuginfod."),
>  			_("\
> -When on, enable the use of debuginfod to download missing debug info and\n\
> -source files."),
> +When set to \"on\", enable the use of debuginfod to download missing\n\
> +debug info and source files. \"off\" disables the use of debuginfod.\n\
> +When set to \"ask\", a prompt may ask whether to enable or disable\n\
> +debuginfod.  When set to \"lazy\", debug info downloading will be\n\
> +deferred until it is required. GDB may also download components of\n\
> +debug info instead of entire files." ),
>  			set_debuginfod_enabled,
>  			get_debuginfod_enabled,
>  			show_debuginfod_enabled,
> diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
> index c1ca45521ea..ac0636e3115 100644
> --- a/gdb/doc/gdb.texinfo
> +++ b/gdb/doc/gdb.texinfo
> @@ -48757,10 +48757,15 @@ debug info or source files.  By default, @code{debuginfod enabled} is set to
>  attempting to perform the next query.  By default, @code{debuginfod enabled}
>  is set to @code{ask} for interactive sessions.
>  
> +@item set debuginfod enabled lazy
> +@value{GDBN} will attempt to defer downloading entire debug info files until
> +necessary. @value{GDBN} may instead download individual components of the
> +debug info files such as @code{.gdb_index}.

Given how the code is currently written I would expect some changes to
'on' to make it clear that some functionality is missing in this mode.

But if you take my advice then the docs would end up different anyway..

Thanks,
Andrew

> +
>  @kindex show debuginfod enabled
>  @item show debuginfod enabled
> -Display whether @code{debuginfod enabled} is set to @code{on}, @code{off} or
> -@code{ask}.
> +Display whether @code{debuginfod enabled} is set to @code{on}, @code{off},
> +@code{ask} or @code{lazy}.
>  
>  @kindex set debuginfod urls
>  @cindex configure debuginfod URLs
> -- 
> 2.39.2


  parent reply	other threads:[~2023-05-24  9:31 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-27 19:42 [PATCH 1/7] gdb/debuginfod: Add debuginfod_section_query Aaron Merey
2023-02-27 19:42 ` [PATCH 2/7] gdb: add 'lazy' setting for command 'set debuginfod enabled' Aaron Merey
2023-02-27 19:54   ` Eli Zaretskii
2023-05-24  9:31   ` Andrew Burgess [this message]
2023-02-27 19:42 ` [PATCH 3/7] gdb/debuginfod: disable pagination during downloads Aaron Merey
2023-03-03 21:33   ` Tom Tromey
2023-03-06 23:07     ` Aaron Merey
2023-05-24  9:38   ` Andrew Burgess
2023-05-24 18:57     ` Aaron Merey
2023-02-27 19:42 ` [PATCH 4/7] gdb/ui-file: Add newline tracking Aaron Merey
2023-03-07 19:33   ` Tom Tromey
2023-03-07 20:30     ` Aaron Merey
2023-03-07 20:47       ` Tom Tromey
2023-02-27 19:42 ` [PATCH 5/7] gdb/debuginfod: Support on-demand debuginfo downloading Aaron Merey
2023-03-07 20:20   ` Tom Tromey
2023-03-09  0:22     ` Aaron Merey
2023-02-27 19:42 ` [PATCH 6/7] gdb/testsuite/gdb.debuginfod: Add lazy downloading tests Aaron Merey
2023-05-02 15:48   ` Andrew Burgess
2023-05-02 16:24     ` Aaron Merey
2023-05-24 10:12   ` Andrew Burgess
2023-02-27 19:42 ` [PATCH 7/7] gdb/debuginfod: Add .debug_line downloading Aaron Merey
2023-03-07 20:36   ` Tom Tromey
2023-03-09  0:26     ` Aaron Merey
2023-02-28 11:11 ` [PATCH 1/7] gdb/debuginfod: Add debuginfod_section_query Alexandra Petlanova Hajkova
2023-05-24  9:01 ` Andrew Burgess

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=871qj6848r.fsf@redhat.com \
    --to=aburgess@redhat.com \
    --cc=amerey@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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).