From: Aaron Merey <amerey@redhat.com>
To: tom@tromey.com
Cc: gdb-patches@sourceware.org, Aaron Merey <amerey@redhat.com>
Subject: Re: [PATCH] gdb: Try searching for auto-load script using .gnu_debuglink
Date: Tue, 8 Mar 2022 17:41:36 -0500 [thread overview]
Message-ID: <20220308224136.173615-1-amerey@redhat.com> (raw)
In-Reply-To: <87o82lu2xy.fsf@tromey.com>
Hi Tom,
On Fri, Mar 4, 2022 at 10:56 AM Tom Tromey <tom@tromey.com> wrote:
> Aaron> + char *debuglink = bfd_get_debug_link_info (parent->obfd, &crc32);
>
> bfd_get_debug_link_info says it returns a malloc'd pointer, so I think
> this is a memory leak. Using gdb::unique_xmalloc_ptr<char> would solve
> this.
Fixed, thanks.
Aaron
---
gdb/auto-load.c | 64 +++++++++++++++++++++++++++++++++++++++----------
1 file changed, 52 insertions(+), 12 deletions(-)
diff --git a/gdb/auto-load.c b/gdb/auto-load.c
index 9a1ccec87ce..0acf2cee777 100644
--- a/gdb/auto-load.c
+++ b/gdb/auto-load.c
@@ -51,6 +51,9 @@
followed by the path of a python script to load. */
#define AUTO_SECTION_NAME ".debug_gdb_scripts"
+/* The section to look in for the name of a separate debug file. */
+#define DEBUGLINK_SECTION_NAME ".gnu_debuglink"
+
static void maybe_print_unsupported_script_warning
(struct auto_load_pspace_info *, struct objfile *objfile,
const struct extension_language_defn *language,
@@ -823,24 +826,61 @@ auto_load_objfile_script (struct objfile *objfile,
gdb::unique_xmalloc_ptr<char> realname
= gdb_realpath (objfile_name (objfile));
- if (!auto_load_objfile_script_1 (objfile, realname.get (), language))
+ if (auto_load_objfile_script_1 (objfile, realname.get (), language))
+ return;
+
+ /* For Windows/DOS .exe executables, strip the .exe suffix, so that
+ FOO-gdb.gdb could be used for FOO.exe, and try again. */
+
+ size_t len = strlen (realname.get ());
+ const size_t lexe = sizeof (".exe") - 1;
+
+ if (len > lexe && strcasecmp (realname.get () + len - lexe, ".exe") == 0)
{
- /* For Windows/DOS .exe executables, strip the .exe suffix, so that
- FOO-gdb.gdb could be used for FOO.exe, and try again. */
+ len -= lexe;
+ realname.get ()[len] = '\0';
+
+ auto_load_debug_printf
+ ("auto-load: Stripped .exe suffix, retrying with \"%s\".",
+ realname.get ());
+
+ auto_load_objfile_script_1 (objfile, realname.get (), language);
+ return;
+ }
- size_t len = strlen (realname.get ());
- const size_t lexe = sizeof (".exe") - 1;
+ /* If OBJFILE is a separate debug file and its name does not match
+ the name given in the parent's .gnu_debuglink section, try to
+ find the auto-load script using the parent's path and the
+ debuglink name. */
+
+ struct objfile *parent = objfile->separate_debug_objfile_backlink;
+ if (parent != nullptr)
+ {
+ unsigned long crc32;
+ gdb::unique_xmalloc_ptr<char> debuglink
+ (bfd_get_debug_link_info (parent->obfd, &crc32));
- if (len > lexe && strcasecmp (realname.get () + len - lexe, ".exe") == 0)
+ if (debuglink.get () != nullptr
+ && strcmp (debuglink.get (), basename (realname.get ())) != 0)
{
- len -= lexe;
- realname.get ()[len] = '\0';
+ /* Replace the last component of the parent's path with the
+ debuglink name. */
- auto_load_debug_printf
- ("auto-load: Stripped .exe suffix, retrying with \"%s\".",
- realname.get ());
+ std::string p_realname = gdb_realpath (objfile_name (parent)).get ();
+ size_t last = p_realname.find_last_of ('/');
- auto_load_objfile_script_1 (objfile, realname.get (), language);
+ if (last != std::string::npos)
+ {
+ p_realname.replace (last + 1, std::string::npos,
+ debuglink.get ());
+
+ auto_load_debug_printf
+ ("Debug filename mismatch, retrying with \"%s\".",
+ p_realname.c_str ());
+
+ auto_load_objfile_script_1 (objfile,
+ p_realname.c_str (), language);
+ }
}
}
}
--
2.35.1
next prev parent reply other threads:[~2022-03-08 22:41 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-23 3:35 Aaron Merey
2022-03-04 15:56 ` Tom Tromey
2022-03-08 22:41 ` Aaron Merey [this message]
2022-03-09 0:26 ` Tom Tromey
2022-03-09 1:42 ` Aaron Merey
2022-03-10 17:57 ` Pedro Alves
2022-03-10 20:16 ` Aaron Merey
2022-03-10 20:22 ` Aaron Merey
2022-03-10 20:43 ` Tom Tromey
2022-03-11 9:32 ` Pedro Alves
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=20220308224136.173615-1-amerey@redhat.com \
--to=amerey@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=tom@tromey.com \
/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).