public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Alexandra Petlanova Hajkova <ahajkova@redhat.com>
To: "Alexandra Hájková" <ahajkova@redhat.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH v2] Use styled_string when defering warnings when loading separate debug files
Date: Tue, 11 Apr 2023 14:40:05 +0200	[thread overview]
Message-ID: <CAJVr-EPxttGbRfFxupKDktMu_umpT3J7j9-yM_xbyTQfN_2E3Q@mail.gmail.com> (raw)
In-Reply-To: <CAJVr-EPbNzO7+DZKk1qvGWo6G8xTLmuXciTxTVKpmyrt+i88cQ@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 10644 bytes --]

Ping2

On Thu, Mar 30, 2023 at 10:11 AM Alexandra Petlanova Hajkova <
ahajkova@redhat.com> wrote:

> Ping
>
> On Mon, Mar 20, 2023 at 3:56 PM Alexandra Hájková via Gdb-patches <
> gdb-patches@sourceware.org> wrote:
>
>> This improves commit 6647f05df023b63bbe056e9167e9e234172fa2ca, the
>> filenames used in the warnings are styled properly now.
>> ---
>> This version uses ui_file rather instead of vector of callback functions
>> that emit warnings.
>> Addresses various cosmetic issues.
>>
>>  gdb/build-id.c | 16 ++++++++++------
>>  gdb/build-id.h |  4 ++--
>>  gdb/coffread.c |  4 ++--
>>  gdb/elfread.c  |  4 ++--
>>  gdb/symfile.c  | 26 ++++++++++++++++----------
>>  gdb/symfile.h  |  4 ++--
>>  gdb/ui-file.h  |  7 +++++++
>>  7 files changed, 41 insertions(+), 24 deletions(-)
>>
>> diff --git a/gdb/build-id.c b/gdb/build-id.c
>> index 00250c20ae9..5d5114e2ace 100644
>> --- a/gdb/build-id.c
>> +++ b/gdb/build-id.c
>> @@ -18,6 +18,7 @@
>>     along with this program.  If not, see <http://www.gnu.org/licenses/>.
>> */
>>
>>  #include "defs.h"
>> +#include "cli/cli-style.h"
>>  #include "bfd.h"
>>  #include "gdb_bfd.h"
>>  #include "build-id.h"
>> @@ -209,7 +210,7 @@ build_id_to_exec_bfd (size_t build_id_len, const
>> bfd_byte *build_id)
>>
>>  std::string
>>  find_separate_debug_file_by_buildid (struct objfile *objfile,
>> -                                    std::vector<std::string>
>> *warnings_vector)
>> +                                    std::vector<string_file>
>> *warnings_vector)
>>  {
>>    const struct bfd_build_id *build_id;
>>
>> @@ -228,12 +229,15 @@ find_separate_debug_file_by_buildid (struct objfile
>> *objfile,
>>           && filename_cmp (bfd_get_filename (abfd.get ()),
>>                            objfile_name (objfile)) == 0)
>>         {
>> -         std::string msg
>> -           = string_printf (_("\"%s\": separate debug info file has no "
>> -                              "debug info"), bfd_get_filename (abfd.get
>> ()));
>> +         string_file warnings (true);
>> +         warnings.printf ("\"%ps\":separate debug info file has no debug
>> info",
>> +                          styled_string (file_name_style.style (),
>> +                                         bfd_get_filename (abfd.get
>> ())));
>>           if (separate_debug_file_debug)
>> -           gdb_printf (gdb_stdlog, "%s", msg.c_str ());
>> -         warnings_vector->emplace_back (std::move (msg));
>> +           /* Avoid styling for the debug output.  */
>> +           gdb_printf (gdb_stdlog, _("%s: separate debug info file has
>> no debug info"),
>> +                       bfd_get_filename (abfd.get ()));
>> +         warnings_vector->emplace_back (std::move (warnings));
>>         }
>>        else if (abfd != NULL)
>>         return std::string (bfd_get_filename (abfd.get ()));
>> diff --git a/gdb/build-id.h b/gdb/build-id.h
>> index 191720ddf28..0c2c4181b4e 100644
>> --- a/gdb/build-id.h
>> +++ b/gdb/build-id.h
>> @@ -52,13 +52,13 @@ extern gdb_bfd_ref_ptr build_id_to_exec_bfd (size_t
>> build_id_len,
>>     separate debug file, otherwise, return an empty string.
>>
>>     Any warnings that are generated by the lookup process should be added
>> to
>> -   WARNINGS_VECTOR, one std::string per warning.  If some other
>> mechanism can
>> +   WARNINGS_VECTOR, one string_file per warning.  If some other
>> mechanism can
>>     be used to lookup the debug information then the warning will not be
>> shown,
>>     however, if GDB fails to find suitable debug information using any
>>     approach, then any warnings will be printed.  */
>>
>>  extern std::string find_separate_debug_file_by_buildid
>> -  (struct objfile *objfile, std::vector<std::string> *warnings_vector);
>> +  (struct objfile *objfile, std::vector<string_file> *warnings_vector);
>>
>>  /* Return an hex-string representation of BUILD_ID.  */
>>
>> diff --git a/gdb/coffread.c b/gdb/coffread.c
>> index e993b17db09..32705c215fd 100644
>> --- a/gdb/coffread.c
>> +++ b/gdb/coffread.c
>> @@ -729,7 +729,7 @@ coff_symfile_read (struct objfile *objfile,
>> symfile_add_flags symfile_flags)
>>    /* Try to add separate debug file if no symbols table found.   */
>>    if (!objfile->has_partial_symbols ())
>>      {
>> -      std::vector<std::string> warnings_vector;
>> +      std::vector<string_file> warnings_vector;
>>        std::string debugfile
>>         = find_separate_debug_file_by_buildid (objfile, &warnings_vector);
>>
>> @@ -747,7 +747,7 @@ coff_symfile_read (struct objfile *objfile,
>> symfile_add_flags symfile_flags)
>>        /* If all the methods to collect the debuginfo failed, print any
>>          warnings that were collected.  */
>>        if (debugfile.empty () && !warnings_vector.empty ())
>> -       for (const std::string &w : warnings_vector)
>> +       for (const string_file &w : warnings_vector)
>>           warning ("%s", w.c_str ());
>>      }
>>  }
>> diff --git a/gdb/elfread.c b/gdb/elfread.c
>> index b414da9ed21..4bc89d09d65 100644
>> --- a/gdb/elfread.c
>> +++ b/gdb/elfread.c
>> @@ -1217,7 +1217,7 @@ elf_symfile_read_dwarf2 (struct objfile *objfile,
>>            && objfile->separate_debug_objfile == NULL
>>            && objfile->separate_debug_objfile_backlink == NULL)
>>      {
>> -      std::vector<std::string> warnings_vector;
>> +      std::vector<string_file> warnings_vector;
>>
>>        std::string debugfile
>>         = find_separate_debug_file_by_buildid (objfile, &warnings_vector);
>> @@ -1269,7 +1269,7 @@ elf_symfile_read_dwarf2 (struct objfile *objfile,
>>        /* If all the methods to collect the debuginfo failed, print
>>          the warnings, if there're any. */
>>        if (debugfile.empty () && !has_dwarf2 && !warnings_vector.empty ())
>> -       for (const std::string &w : warnings_vector)
>> +       for (const string_file &w : warnings_vector)
>>           warning ("%s", w.c_str ());
>>      }
>>
>> diff --git a/gdb/symfile.c b/gdb/symfile.c
>> index bb9981a4634..64d29ea71f9 100644
>> --- a/gdb/symfile.c
>> +++ b/gdb/symfile.c
>> @@ -1244,7 +1244,7 @@ bool separate_debug_file_debug = false;
>>  static int
>>  separate_debug_file_exists (const std::string &name, unsigned long crc,
>>                             struct objfile *parent_objfile,
>> -                           std::vector<std::string> *warnings_vector)
>> +                           std::vector<string_file> *warnings_vector)
>>  {
>>    unsigned long file_crc;
>>    int file_crc_p;
>> @@ -1337,13 +1337,19 @@ separate_debug_file_exists (const std::string
>> &name, unsigned long crc,
>>
>>        if (verified_as_different || parent_crc != file_crc)
>>         {
>> -         std::string msg
>> -           = string_printf (_("the debug information found in \"%s\""
>> -                              " does not match \"%s\" (CRC
>> mismatch).\n"),
>> -                            name.c_str (), objfile_name
>> (parent_objfile));
>> +         string_file warnings (true);
>> +         warnings.printf (_("the debug information found in \"%ps\""
>> +                            " does not match \"%ps\" (CRC mismatch)."),
>> +                          styled_string (file_name_style.style (),
>> +                                         name.c_str ()),
>> +                          styled_string (file_name_style.style (),
>> +                                         objfile_name (parent_objfile)));
>> +         /* Avoid styling for the debug output.  */
>>           if (separate_debug_file_debug)
>> -           gdb_printf (gdb_stdlog, "%s", msg.c_str ());
>> -         warnings_vector->emplace_back (std::move (msg));
>> +           gdb_printf (gdb_stdlog, _("the debug information found in %s"
>> +                                     " does not match %s (CRC
>> mismatch).\n"),
>> +                       name.c_str(), objfile_name (parent_objfile));
>> +         warnings_vector->emplace_back (std::move (warnings));
>>         }
>>
>>        return 0;
>> @@ -1379,14 +1385,14 @@ show_debug_file_directory (struct ui_file *file,
>> int from_tty,
>>     string.
>>
>>     Any warnings generated as part of the lookup process are added to
>> -   WARNINGS_VECTOR, one std::string per warning.  */
>> +   WARNINGS_VECTOR, one string_file per warning.  */
>>
>>  static std::string
>>  find_separate_debug_file (const char *dir,
>>                           const char *canon_dir,
>>                           const char *debuglink,
>>                           unsigned long crc32, struct objfile *objfile,
>> -                         std::vector<std::string> *warnings_vector)
>> +                         std::vector<string_file> *warnings_vector)
>>  {
>>    if (separate_debug_file_debug)
>>      gdb_printf (gdb_stdlog,
>> @@ -1534,7 +1540,7 @@ terminate_after_last_dir_separator (char *path)
>>
>>  std::string
>>  find_separate_debug_file_by_debuglink
>> -  (struct objfile *objfile, std::vector<std::string> *warnings_vector)
>> +  (struct objfile *objfile, std::vector<string_file> *warnings_vector)
>>  {
>>    unsigned long crc32;
>>
>> diff --git a/gdb/symfile.h b/gdb/symfile.h
>> index b433e2be31a..041f6f74f9c 100644
>> --- a/gdb/symfile.h
>> +++ b/gdb/symfile.h
>> @@ -245,10 +245,10 @@ extern void symbol_file_add_separate (const
>> gdb_bfd_ref_ptr &, const char *,
>>     Returns pathname, or an empty string.
>>
>>     Any warnings generated as part of this lookup are added to
>> -   WARNINGS_VECTOR, one std::string per warning.  */
>> +   WARNINGS_VECTOR, one string_file per warning.  */
>>
>>  extern std::string find_separate_debug_file_by_debuglink
>> -  (struct objfile *objfile, std::vector<std::string> *warnings_vector);
>> +  (struct objfile *objfile, std::vector<string_file> *warnings_vector);
>>
>>  /* Build (allocate and populate) a section_addr_info struct from an
>>     existing section table.  */
>> diff --git a/gdb/ui-file.h b/gdb/ui-file.h
>> index de24620e247..4444c8adcdb 100644
>> --- a/gdb/ui-file.h
>> +++ b/gdb/ui-file.h
>> @@ -212,6 +212,13 @@ class string_file : public ui_file
>>      return *this;
>>    }
>>
>> +  string_file(string_file &&other)
>> +    : m_string (std::move (other.c_str ())),
>> +    m_term_out (other.m_term_out)
>> +  {
>> +
>> +  }
>> +
>>    /* Provide a few convenience methods with the same API as the
>>       underlying std::string.  */
>>    const char *data () const { return m_string.data (); }
>> --
>> 2.39.1
>>
>>

  reply	other threads:[~2023-04-11 12:40 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-20 14:56 Alexandra Hájková
2023-03-30  8:11 ` Alexandra Petlanova Hajkova
2023-04-11 12:40   ` Alexandra Petlanova Hajkova [this message]
2023-04-17 15:17 ` Tom Tromey
2023-04-18 12:20   ` Alexandra Petlanova Hajkova
2023-04-21 14:07     ` Tom Tromey
  -- strict thread matches above, loose matches on Subject: below --
2023-02-16 19:56 [PATCH] " Alexandra Hájková
2023-02-17 12:35 ` [PATCH v2] " Alexandra Hájková
2023-02-25 10:43   ` Andrew Burgess
2023-02-26 17:36   ` Tom Tromey

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=CAJVr-EPxttGbRfFxupKDktMu_umpT3J7j9-yM_xbyTQfN_2E3Q@mail.gmail.com \
    --to=ahajkova@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).