Improve "set debug separate-debug-file"
"set debug separate-debug-file" shows which candidates are considered, when trying to find separate debug info. But it's not clear if GDB used a certain candidate, and if not, why not. This patch adds some precision: Before: Looking for separate debug info (debug link) for /lib/x86_64-linux-gnu/libc.so.6 Trying /lib/x86_64-linux-gnu/libc-2.23.so Trying /lib/x86_64-linux-gnu/.debug/libc-2.23.so Trying /usr/lib/debug//lib/x86_64-linux-gnu/libc-2.23.so After: Looking for separate debug info (debug link) for /lib/x86_64-linux-gnu/libc.so.6 Trying /lib/x86_64-linux-gnu/libc-2.23.so... no, same file as the objfile. Trying /lib/x86_64-linux-gnu/.debug/libc-2.23.so... no, unable to open. Trying /usr/lib/debug//lib/x86_64-linux-gnu/libc-2.23.so... yes! gdb/ChangeLog: * build-id.c (build_id_to_debug_bfd): Enhance debug output. * symfile.c (separate_debug_file_exists): Likewise.
This commit is contained in:
parent
5172760036
commit
50794b45a2
3 changed files with 66 additions and 9 deletions
|
@ -1,3 +1,8 @@
|
|||
2018-12-26 Simon Marchi <simon.marchi@ericsson.com>
|
||||
|
||||
* build-id.c (build_id_to_debug_bfd): Enhance debug output.
|
||||
* symfile.c (separate_debug_file_exists): Likewise.
|
||||
|
||||
2018-12-24 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
|
||||
* c-exp.y (field_name): Allow DOUBLE_KEYWORD, INT_KEYWORD, LONG,
|
||||
|
|
|
@ -98,7 +98,10 @@ build_id_to_debug_bfd (size_t build_id_len, const bfd_byte *build_id)
|
|||
link += ".debug";
|
||||
|
||||
if (separate_debug_file_debug)
|
||||
printf_unfiltered (_(" Trying %s\n"), link.c_str ());
|
||||
{
|
||||
printf_unfiltered (_(" Trying %s..."), link.c_str ());
|
||||
gdb_flush (gdb_stdout);
|
||||
}
|
||||
|
||||
/* lrealpath() is expensive even for the usually non-existent files. */
|
||||
gdb::unique_xmalloc_ptr<char> filename;
|
||||
|
@ -106,16 +109,36 @@ build_id_to_debug_bfd (size_t build_id_len, const bfd_byte *build_id)
|
|||
filename.reset (lrealpath (link.c_str ()));
|
||||
|
||||
if (filename == NULL)
|
||||
{
|
||||
if (separate_debug_file_debug)
|
||||
printf_unfiltered (_(" no, unable to compute real path\n"));
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
/* We expect to be silent on the non-existing files. */
|
||||
abfd = gdb_bfd_open (filename.get (), gnutarget, -1);
|
||||
|
||||
if (abfd == NULL)
|
||||
{
|
||||
if (separate_debug_file_debug)
|
||||
printf_unfiltered (_(" no, unable to open.\n"));
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (build_id_verify (abfd.get(), build_id_len, build_id))
|
||||
{
|
||||
if (separate_debug_file_debug)
|
||||
printf_unfiltered (_(" yes!\n"));
|
||||
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (separate_debug_file_debug)
|
||||
printf_unfiltered (_(" no, build-id does not match.\n"));
|
||||
}
|
||||
|
||||
abfd.release ();
|
||||
}
|
||||
|
|
|
@ -1285,12 +1285,20 @@ separate_debug_file_exists (const std::string &name, unsigned long crc,
|
|||
return 0;
|
||||
|
||||
if (separate_debug_file_debug)
|
||||
printf_filtered (_(" Trying %s\n"), name.c_str ());
|
||||
{
|
||||
printf_filtered (_(" Trying %s..."), name.c_str ());
|
||||
gdb_flush (gdb_stdout);
|
||||
}
|
||||
|
||||
gdb_bfd_ref_ptr abfd (gdb_bfd_open (name.c_str (), gnutarget, -1));
|
||||
|
||||
if (abfd == NULL)
|
||||
{
|
||||
if (separate_debug_file_debug)
|
||||
printf_filtered (_(" no, unable to open.\n"));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Verify symlinks were not the cause of filename_cmp name difference above.
|
||||
|
||||
|
@ -1309,7 +1317,12 @@ separate_debug_file_exists (const std::string &name, unsigned long crc,
|
|||
{
|
||||
if (abfd_stat.st_dev == parent_stat.st_dev
|
||||
&& abfd_stat.st_ino == parent_stat.st_ino)
|
||||
{
|
||||
if (separate_debug_file_debug)
|
||||
printf_filtered (_(" no, same file as the objfile.\n"));
|
||||
|
||||
return 0;
|
||||
}
|
||||
verified_as_different = 1;
|
||||
}
|
||||
else
|
||||
|
@ -1318,7 +1331,12 @@ separate_debug_file_exists (const std::string &name, unsigned long crc,
|
|||
file_crc_p = gdb_bfd_crc (abfd.get (), &file_crc);
|
||||
|
||||
if (!file_crc_p)
|
||||
{
|
||||
if (separate_debug_file_debug)
|
||||
printf_filtered (_(" no, error computing CRC.\n"));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (crc != file_crc)
|
||||
{
|
||||
|
@ -1331,17 +1349,28 @@ separate_debug_file_exists (const std::string &name, unsigned long crc,
|
|||
if (!verified_as_different)
|
||||
{
|
||||
if (!gdb_bfd_crc (parent_objfile->obfd, &parent_crc))
|
||||
{
|
||||
if (separate_debug_file_debug)
|
||||
printf_filtered (_(" no, error computing CRC.\n"));
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (verified_as_different || parent_crc != file_crc)
|
||||
warning (_("the debug information found in \"%s\""
|
||||
" does not match \"%s\" (CRC mismatch).\n"),
|
||||
name.c_str (), objfile_name (parent_objfile));
|
||||
|
||||
if (separate_debug_file_debug)
|
||||
printf_filtered (_(" no, CRC doesn't match.\n"));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (separate_debug_file_debug)
|
||||
printf_filtered (_(" yes!\n"));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue