From: "Alexandra Hájková" <ahajkova@redhat.com>
To: gdb-patches@sourceware.org
Subject: [PATCH] Use styled_string when defering warnings when loading separate debug files
Date: Thu, 16 Feb 2023 20:56:04 +0100 [thread overview]
Message-ID: <20230216195604.2685177-1-ahajkova@redhat.com> (raw)
This improves commit 6647f05df023b63bbe056e9167e9e234172fa2ca, the
filenames used in the warnings are styled properly now.
---
gdb/build-id.c | 19 ++++++++++++++++---
gdb/build-id.h | 5 ++++-
gdb/coffread.c | 6 +++---
gdb/elfread.c | 6 +++---
gdb/symfile.c | 21 ++++++++++++++++-----
gdb/symfile.h | 5 ++++-
6 files changed, 46 insertions(+), 16 deletions(-)
diff --git a/gdb/build-id.c b/gdb/build-id.c
index 00250c20ae9..74605bb702c 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"
@@ -205,11 +206,21 @@ build_id_to_exec_bfd (size_t build_id_len, const bfd_byte *build_id)
return build_id_to_bfd_suffix (build_id_len, build_id, "");
}
+static void
+add_warning (warnings_vec *vec, std::string msg)
+{
+ vec->emplace_back ([msg] () {
+ gdb_printf (gdb_stdlog, "%ps",
+ styled_string (file_name_style. style (),
+ msg.c_str ()));
+ });
+}
+
/* See build-id.h. */
std::string
find_separate_debug_file_by_buildid (struct objfile *objfile,
- std::vector<std::string> *warnings_vector)
+ warnings_vec *vec)
{
const struct bfd_build_id *build_id;
@@ -232,8 +243,10 @@ find_separate_debug_file_by_buildid (struct objfile *objfile,
= string_printf (_("\"%s\": separate debug info file has no "
"debug info"), 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));
+ gdb_printf (gdb_stdlog, "%ps",
+ styled_string (file_name_style. style (),
+ msg.c_str ()));
+ add_warning(vec, msg);
}
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..8e72e6ecff6 100644
--- a/gdb/build-id.h
+++ b/gdb/build-id.h
@@ -47,6 +47,9 @@ extern gdb_bfd_ref_ptr build_id_to_debug_bfd (size_t build_id_len,
extern gdb_bfd_ref_ptr build_id_to_exec_bfd (size_t build_id_len,
const bfd_byte *build_id);
+using warning_cb = std::function<void (void)>;
+using warnings_vec = std::vector<warning_cb>;
+
/* Find the separate debug file for OBJFILE, by using the build-id
associated with OBJFILE's BFD. If successful, returns the file name for the
separate debug file, otherwise, return an empty string.
@@ -58,7 +61,7 @@ extern gdb_bfd_ref_ptr build_id_to_exec_bfd (size_t build_id_len,
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, warnings_vec *vec);
/* Return an hex-string representation of BUILD_ID. */
diff --git a/gdb/coffread.c b/gdb/coffread.c
index 65d7828e933..c534eb504cf 100644
--- a/gdb/coffread.c
+++ b/gdb/coffread.c
@@ -734,7 +734,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;
+ warnings_vec warnings_vector;
std::string debugfile
= find_separate_debug_file_by_buildid (objfile, &warnings_vector);
@@ -752,8 +752,8 @@ 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)
- warning ("%s", w.c_str ());
+ for (const auto &cb : warnings_vector)
+ cb ();
}
}
diff --git a/gdb/elfread.c b/gdb/elfread.c
index ca684aab57e..d1c231c2f8c 100644
--- a/gdb/elfread.c
+++ b/gdb/elfread.c
@@ -1213,7 +1213,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;
+ warnings_vec warnings_vector;
std::string debugfile
= find_separate_debug_file_by_buildid (objfile, &warnings_vector);
@@ -1265,8 +1265,8 @@ 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)
- warning ("%s", w.c_str ());
+ for (const auto &cb : warnings_vector)
+ cb ();
}
return has_dwarf2;
diff --git a/gdb/symfile.c b/gdb/symfile.c
index 373f5592107..1fcb5fd5ae4 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -1241,10 +1241,20 @@ symbol_file_clear (int from_tty)
bool separate_debug_file_debug = false;
+static void
+add_warning (warnings_vec *vec, std::string msg)
+{
+ vec->emplace_back ([msg] () {
+ gdb_printf (gdb_stdlog, "warning: %ps",
+ styled_string (file_name_style. style (),
+ msg.c_str ()));
+ });
+}
+
static int
separate_debug_file_exists (const std::string &name, unsigned long crc,
struct objfile *parent_objfile,
- std::vector<std::string> *warnings_vector)
+ warnings_vec *warnings_vector)
{
unsigned long file_crc;
int file_crc_p;
@@ -1342,8 +1352,9 @@ separate_debug_file_exists (const std::string &name, unsigned long crc,
" does not match \"%s\" (CRC mismatch).\n"),
name.c_str (), objfile_name (parent_objfile));
if (separate_debug_file_debug)
- gdb_printf (gdb_stdlog, "%s", msg.c_str ());
- warnings_vector->emplace_back (std::move (msg));
+ gdb_printf (gdb_stdlog, "%ps", styled_string (file_name_style. style (),
+ msg.c_str ()));
+ add_warning(warnings_vector, msg);
}
return 0;
@@ -1386,7 +1397,7 @@ 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)
+ warnings_vec *warnings_vector)
{
if (separate_debug_file_debug)
gdb_printf (gdb_stdlog,
@@ -1534,7 +1545,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, warnings_vec *warnings_vector)
{
unsigned long crc32;
diff --git a/gdb/symfile.h b/gdb/symfile.h
index b433e2be31a..0cb12176152 100644
--- a/gdb/symfile.h
+++ b/gdb/symfile.h
@@ -241,6 +241,9 @@ extern struct objfile *symbol_file_add_from_bfd (const gdb_bfd_ref_ptr &,
extern void symbol_file_add_separate (const gdb_bfd_ref_ptr &, const char *,
symfile_add_flags, struct objfile *);
+using warning_cb = std::function<void (void)>;
+using warnings_vec = std::vector<warning_cb>;
+
/* Find separate debuginfo for OBJFILE (using .gnu_debuglink section).
Returns pathname, or an empty string.
@@ -248,7 +251,7 @@ extern void symbol_file_add_separate (const gdb_bfd_ref_ptr &, const char *,
WARNINGS_VECTOR, one std::string per warning. */
extern std::string find_separate_debug_file_by_debuglink
- (struct objfile *objfile, std::vector<std::string> *warnings_vector);
+ (struct objfile *objfile, warnings_vec *warnings_vector);
/* Build (allocate and populate) a section_addr_info struct from an
existing section table. */
--
2.39.1
next reply other threads:[~2023-02-16 19:56 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-16 19:56 Alexandra Hájková [this message]
2023-02-17 9:18 ` Andrew Burgess
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=20230216195604.2685177-1-ahajkova@redhat.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).