Report scripts and libraries searched for ld --trace
authorAlan Modra <amodra@gmail.com>
Mon, 29 Oct 2018 07:40:06 +0000 (18:10 +1030)
committerAlan Modra <amodra@gmail.com>
Mon, 29 Oct 2018 07:51:05 +0000 (18:21 +1030)
The idea of this change is to make -t output useful for users wanting
to package all the object files involved in linking for a bug report.

Something like the following should do the trick.
gcc hello.c -save-temps -Wl,-t | xargs realpath | sort | uniq > files
tar cJf test.tar.xz `cat files`

* ldlang.c (load_symbols): When -t, print file names for script
files and archives.
* ldmain.c (trace_files): Make an int.
(add_archive_element): Print archive elements only with multiple
-t options, or when archive is thin.
* ldmain.h (trace_files): Update.
* ldmisc.c (vfinfo): Don't print both original path and path in
sysroot.
* lexsup.c (parse_args <t>): Increment trace_files.

ld/ChangeLog
ld/ldlang.c
ld/ldmain.c
ld/ldmain.h
ld/ldmisc.c
ld/lexsup.c

index 03b1b15e2150650da6f609d3f7c5266f08a9f1a9..0453e2e8ee8d5734c33d6a617ef120ca0ca7078a 100644 (file)
@@ -1,3 +1,15 @@
+2018-10-29  Alan Modra  <amodra@gmail.com>
+
+       * ldlang.c (load_symbols): When -t, print file names for script
+       files and archives.
+       * ldmain.c (trace_files): Make an int.
+       (add_archive_element): Print archive elements only with multiple
+       -t options, or when archive is thin.
+       * ldmain.h (trace_files): Update.
+       * ldmisc.c (vfinfo): Don't print both original path and path in
+       sysroot.
+       * lexsup.c (parse_args <t>): Increment trace_files.
+
 2018-10-29  Alan Modra  <amodra@gmail.com>
 
        * ldmain.c (main): Print emulation mode and "deleting executable"
index d2b297ce8b912b8c9e5fa4e51f9d89bbd7229b67..e525396668210737bcfce3949a3e49743cda2cb0 100644 (file)
@@ -2935,6 +2935,9 @@ load_symbols (lang_input_statement_type *entry,
   if (entry->flags.missing_file)
     return TRUE;
 
+  if (trace_files || verbose)
+    info_msg ("%pI\n", entry);
+
   if (!bfd_check_format (entry->the_bfd, bfd_archive)
       && !bfd_check_format_matches (entry->the_bfd, bfd_object, &matching))
     {
@@ -3010,8 +3013,6 @@ load_symbols (lang_input_statement_type *entry,
     case bfd_object:
       if (!entry->flags.reload)
        ldlang_add_file (entry);
-      if (trace_files || verbose)
-       info_msg ("%pI\n", entry);
       break;
 
     case bfd_archive:
index 36a6c6033e0351e0c346b41311fb882aea343f87..47cbed1d3d09405d6cbf4b9cf35e13ed4679b29d 100644 (file)
@@ -77,7 +77,7 @@ int ld_canon_sysroot_len;
 int g_switch_value = 8;
 
 /* Nonzero means print names of input files as processed.  */
-bfd_boolean trace_files;
+unsigned int trace_files;
 
 /* Nonzero means report actions taken by the linker, and describe the linker script in use.  */
 bfd_boolean verbose;
@@ -926,7 +926,9 @@ add_archive_element (struct bfd_link_info *info,
        minfo ("(%s)\n", name);
     }
 
-  if (trace_files || verbose)
+  if (verbose
+      || trace_files > 1
+      || (trace_files && bfd_is_thin_archive (orig_input.the_bfd->my_archive)))
     info_msg ("%pI\n", &orig_input);
   return TRUE;
 }
index 34bde0373db26040f63e33c5af45118d9ead336c..cd236224666bd9ba233ea8cca6264e5f0168a75d 100644 (file)
@@ -29,7 +29,7 @@ extern FILE *saved_script_handle;
 extern FILE *previous_script_handle;
 extern bfd_boolean force_make_executable;
 extern char *default_target;
-extern bfd_boolean trace_files;
+extern unsigned int trace_files;
 extern bfd_boolean verbose;
 extern bfd_boolean version_printed;
 extern bfd_boolean demangling;
index 3e2a190f9ac3c0d54ea46ca349f86aca0e2d6db0..fd6a38810b878eb8f33719b5d619908eb520d183 100644 (file)
@@ -476,15 +476,13 @@ vfinfo (FILE *fp, const char *fmt, va_list ap, bfd_boolean is_warning)
                  fmt++;
                  i = (lang_input_statement_type *) args[arg_no].p;
                  ++arg_count;
-                 if (i->the_bfd->my_archive != NULL
+                 if (i->the_bfd != NULL
+                     && i->the_bfd->my_archive != NULL
                      && !bfd_is_thin_archive (i->the_bfd->my_archive))
-                   fprintf (fp, "(%s)",
-                            bfd_get_filename (i->the_bfd->my_archive));
-                 fprintf (fp, "%s", i->local_sym_name);
-                 if ((i->the_bfd->my_archive == NULL
-                      || bfd_is_thin_archive (i->the_bfd->my_archive))
-                     && filename_cmp (i->local_sym_name, i->filename) != 0)
-                   fprintf (fp, " (%s)", i->filename);
+                   fprintf (fp, "(%s)%s", i->the_bfd->my_archive->filename,
+                            i->local_sym_name);
+                 else
+                   fprintf (fp, "%s", i->filename);
                }
              else if (*fmt == 'R')
                {
index 86a033a383f86bea9b480fc43c93b34e1f143c80..1da6a50bcb7ada95c43e4fd77bc74b1bb609a599 100644 (file)
@@ -1233,7 +1233,7 @@ parse_args (unsigned argc, char **argv)
          command_line.symbolic = symbolic_functions;
          break;
        case 't':
-         trace_files = TRUE;
+         ++trace_files;
          break;
        case 'T':
          previous_script_handle = saved_script_handle;