[RFA,1/2] Use a distinguishing name for minidebug objfile
Commit Message
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.
gdb/ChangeLog
2017-04-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 | 4 +++-
4 files changed, 23 insertions(+), 4 deletions(-)
Comments
On 04/13/2017 05:15 AM, Tom Tromey wrote:
> 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.
Could you update the commit log to also show how things look
after the patch? I could guess it after staring at the patch for
a bit, but it'd be nice to be explicit.
Otherwise LGTM.
Thanks,
Pedro Alves
>>>>> "Pedro" == Pedro Alves <palves@redhat.com> writes:
Pedro> Could you update the commit log to also show how things look
Pedro> after the patch? I could guess it after staring at the patch for
Pedro> a bit, but it'd be nice to be explicit.
Thanks for suggesting this, as it pointed out that during one of the
rebases I'd apparently regressed the patch, and it no longer printed the
desired thing.
I'll see if I can write a test case.
Tom
@@ -1,3 +1,14 @@
+2017-04-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.
+
2017-04-13 Pedro Alves <palves@redhat.com>
* breakpoint.h (struct breakpoint): Reindent.
@@ -270,7 +270,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);
@@ -876,7 +876,7 @@ read_symbols (struct objfile *objfile, symfile_add_flags add_flags)
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);
+ add_flags | SYMFILE_NOT_FILENAME, objfile);
}
}
if ((add_flags & SYMFILE_NO_READ) == 0)
@@ -1143,6 +1143,8 @@ symbol_file_add_with_addrs (bfd *abfd, const char *name,
flags |= OBJF_READNOW;
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. */