summaryrefslogtreecommitdiff
path: root/gdb/symfile.c
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@ericsson.com>2018-12-26 11:49:51 -0500
committerSimon Marchi <simon.marchi@polymtl.ca>2018-12-26 11:49:51 -0500
commit50794b45a2a7330fc32b118bff584a3a2e649ac5 (patch)
tree1ff976fb2cba7808f2ecbfc54bfd167a394f06d8 /gdb/symfile.c
parent5172760036cc706596970b35f106aa5a9093b44b (diff)
downloadbinutils-gdb-50794b45a2a7330fc32b118bff584a3a2e649ac5.tar.gz
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.
Diffstat (limited to 'gdb/symfile.c')
-rw-r--r--gdb/symfile.c39
1 files changed, 34 insertions, 5 deletions
diff --git a/gdb/symfile.c b/gdb/symfile.c
index 8ab6a25de7c..991b71fc772 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -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)
- return 0;
+ {
+ 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)
- return 0;
+ {
+ 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)
- return 0;
+ {
+ if (separate_debug_file_debug)
+ printf_filtered (_(" no, error computing CRC.\n"));
+
+ return 0;
+ }
if (crc != file_crc)
{
@@ -1331,7 +1349,12 @@ separate_debug_file_exists (const std::string &name, unsigned long crc,
if (!verified_as_different)
{
if (!gdb_bfd_crc (parent_objfile->obfd, &parent_crc))
- return 0;
+ {
+ if (separate_debug_file_debug)
+ printf_filtered (_(" no, error computing CRC.\n"));
+
+ return 0;
+ }
}
if (verified_as_different || parent_crc != file_crc)
@@ -1339,9 +1362,15 @@ 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)
+ printf_filtered (_(" no, CRC doesn't match.\n"));
+
return 0;
}
+ if (separate_debug_file_debug)
+ printf_filtered (_(" yes!\n"));
+
return 1;
}