From patchwork Thu Feb 16 19:56:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandra Petlanova Hajkova X-Patchwork-Id: 65130 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 1E6A03858281 for ; Thu, 16 Feb 2023 19:56:36 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1E6A03858281 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1676577396; bh=s5B+T9FU6rcqY3AmnwFLMf7LV9H7Eyz5/eYofuAtHq0=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=jg2sxGT/Rd58n5VEMAkdO6EB2C67v7BXTnFg+5S9HhEkvrKT3OlvqMQytew9MboGN 6Hl2KTXNUdD+L+c81iyxjw4TMF1pYHZZ82aDDfXnf0k4h5t/FegX5MzKQiB/6WBXb+ 92haxGjiVX9zkOLbGQjrQmvpDDfQ0pMuWEFIvXMA= X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 732B63858D33 for ; Thu, 16 Feb 2023 19:56:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 732B63858D33 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-382-O7g77VUfO5axduOuTwVrMQ-1; Thu, 16 Feb 2023 14:56:08 -0500 X-MC-Unique: O7g77VUfO5axduOuTwVrMQ-1 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 7FA5D802314 for ; Thu, 16 Feb 2023 19:56:08 +0000 (UTC) Received: from ovpn-208-17.brq.redhat.com (ovpn-208-17.brq.redhat.com [10.40.208.17]) by smtp.corp.redhat.com (Postfix) with ESMTPS id AB3EB492B15 for ; Thu, 16 Feb 2023 19:56:07 +0000 (UTC) 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 Message-Id: <20230216195604.2685177-1-ahajkova@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.10 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-10.1 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: =?utf-8?q?Alexandra_H=C3=A1jkov=C3=A1_via_Gdb-patches?= From: Alexandra Petlanova Hajkova Reply-To: =?utf-8?q?Alexandra_H=C3=A1jkov=C3=A1?= Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" 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 . */ #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 *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; +using warnings_vec = std::vector; + /* 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 *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 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 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 *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 *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 *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; +using warnings_vec = std::vector; + /* 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 *warnings_vector); + (struct objfile *objfile, warnings_vec *warnings_vector); /* Build (allocate and populate) a section_addr_info struct from an existing section table. */