+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"
 
   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))
     {
     case bfd_object:
       if (!entry->flags.reload)
        ldlang_add_file (entry);
-      if (trace_files || verbose)
-       info_msg ("%pI\n", entry);
       break;
 
     case bfd_archive:
 
 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;
        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;
 }
 
 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;
 
                  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')
                {
 
          command_line.symbolic = symbolic_functions;
          break;
        case 't':
-         trace_files = TRUE;
+         ++trace_files;
          break;
        case 'T':
          previous_script_handle = saved_script_handle;