[RFA] Use a distinguishing name for minidebug objfile
Commit Message
This patch was formerly submitted as part of a series to fix PR
cli/19951. I never made the requested changes to that series, but
this patch is useful independently, so I thought I would resubmit it.
One part of PR cli/19951 is that the mini debug info objfile reuses the
name of the main objfile from which it comes. This can be seen because
gdb claims to be reading symbols from the same file two times, like:
Reading symbols from /bin/gdb...Reading symbols from /bin/gdb...(no debugging symbols found)...done.
I think this would be less confusing if the minidebug objfile were given
a different name. That is what this patch implements. It also arranges
for the minidebug objfile to be marked OBJF_NOT_FILENAME.
After this patch the output looks like:
Reading symbols from /bin/gdb...Reading symbols from .gnu_debugdata for /usr/libexec/gdb...(no debugging symbols found)...done.
Tested by the buildbot.
ChangeLog
2018-05-12 Tom Tromey <tom@tromey.com>
PR cli/19551:
* symfile-add-flags.h (enum symfile_add_flags)
<SYMFILE_NOT_FILENAME>: New constant.
* symfile.c (read_symbols): Use SYMFILE_NOT_FILENAME. Get
objfile name from BFD.
(symbol_file_add_with_addrs): Check SYMFILE_NOT_FILENAME.
* minidebug.c (find_separate_debug_file_in_section): Put
".gnu_debugdata" into BFD's file name.
---
gdb/ChangeLog | 11 +++++++++++
gdb/minidebug.c | 5 ++++-
gdb/symfile-add-flags.h | 7 +++++--
gdb/symfile.c | 7 +++++--
4 files changed, 25 insertions(+), 5 deletions(-)
Comments
On 05/12/2018 04:51 PM, Tom Tromey wrote:
> This patch was formerly submitted as part of a series to fix PR
> cli/19951. I never made the requested changes to that series, but
> this patch is useful independently, so I thought I would resubmit it.
I guess you may not be including this paragraph in the final
commit log, but just in case, note that it's cli/19551, not cli/19951.
> One part of PR cli/19951 is that the mini debug info objfile reuses the
Here too.
> name of the main objfile from which it comes. This can be seen because
> gdb claims to be reading symbols from the same file two times, like:
> --- a/gdb/minidebug.c
> +++ b/gdb/minidebug.c
> @@ -269,7 +269,10 @@ find_separate_debug_file_in_section (struct objfile *objfile)
> return NULL;
>
> #ifdef HAVE_LIBLZMA
> - abfd = gdb_bfd_openr_iovec (objfile_name (objfile), gnutarget, lzma_open,
> + std::string filename = (std::string (".gnu_debugdata for ")
> + + objfile_name (objfile));
I guess the "for" should be translatable. And since a language may need
to swap word order, I think that calls for using string_printf:
string_printf (_(".gnu_debugdata for %s"), objfile_name (objfile));
OK with that change.
Thanks,
Pedro Alves
@@ -269,7 +269,10 @@ find_separate_debug_file_in_section (struct objfile *objfile)
return NULL;
#ifdef HAVE_LIBLZMA
- abfd = gdb_bfd_openr_iovec (objfile_name (objfile), gnutarget, lzma_open,
+ std::string filename = (std::string (".gnu_debugdata for ")
+ + objfile_name (objfile));
+
+ abfd = gdb_bfd_openr_iovec (filename.c_str (), gnutarget, lzma_open,
section, lzma_pread, lzma_close, lzma_stat);
if (abfd == NULL)
return NULL;
@@ -40,8 +40,11 @@ enum symfile_add_flag
/* Do not immediately read symbols for this file. By default,
symbols are read when the objfile is created. */
- SYMFILE_NO_READ = 1 << 4
- };
+ SYMFILE_NO_READ = 1 << 4,
+
+ /* The new objfile should be marked OBJF_NOT_FILENAME. */
+ SYMFILE_NOT_FILENAME = 1 << 5,
+ };
DEF_ENUM_FLAGS_TYPE (enum symfile_add_flag, symfile_add_flags);
@@ -808,8 +808,9 @@ read_symbols (struct objfile *objfile, symfile_add_flags add_flags)
virtual section-as-bfd like the bfd filename containing the
section. Therefore use also non-canonical name form for the same
file containing the section. */
- symbol_file_add_separate (abfd.get (), objfile->original_name,
- add_flags, objfile);
+ symbol_file_add_separate (abfd.get (),
+ bfd_get_filename (abfd.get ()),
+ add_flags | SYMFILE_NOT_FILENAME, objfile);
}
}
if ((add_flags & SYMFILE_NO_READ) == 0)
@@ -1079,6 +1080,8 @@ symbol_file_add_with_addrs (bfd *abfd, const char *name,
flags |= OBJF_READNEVER;
add_flags |= SYMFILE_NO_READ;
}
+ if ((add_flags & SYMFILE_NOT_FILENAME) != 0)
+ flags |= OBJF_NOT_FILENAME;
/* Give user a chance to burp if we'd be
interactively wiping out any existing symbols. */