diff options
author | Alan Modra <amodra@gmail.com> | 2018-10-29 18:10:06 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2018-10-29 18:21:05 +1030 |
commit | 727a29badd95a68d08b86fec0b98702ce756c660 (patch) | |
tree | 83df8737f89d9e8cee74c6d1e98db4475a7555fb | |
parent | 5c87f94bb85e5b8e715aa7f947ecc602960f20ee (diff) | |
download | gdb-727a29badd95a68d08b86fec0b98702ce756c660.zip gdb-727a29badd95a68d08b86fec0b98702ce756c660.tar.gz gdb-727a29badd95a68d08b86fec0b98702ce756c660.tar.bz2 |
Report scripts and libraries searched for ld --trace
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.
-rw-r--r-- | ld/ChangeLog | 12 | ||||
-rw-r--r-- | ld/ldlang.c | 5 | ||||
-rw-r--r-- | ld/ldmain.c | 6 | ||||
-rw-r--r-- | ld/ldmain.h | 2 | ||||
-rw-r--r-- | ld/ldmisc.c | 14 | ||||
-rw-r--r-- | ld/lexsup.c | 2 |
6 files changed, 27 insertions, 14 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 03b1b15..0453e2e 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,5 +1,17 @@ 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" for --verbose, not --trace. (add_archive_element): Only print "no new IR symbols" for --verbose. diff --git a/ld/ldlang.c b/ld/ldlang.c index d2b297c..e525396 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -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: diff --git a/ld/ldmain.c b/ld/ldmain.c index 36a6c60..47cbed1 100644 --- a/ld/ldmain.c +++ b/ld/ldmain.c @@ -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; } diff --git a/ld/ldmain.h b/ld/ldmain.h index 34bde03..cd23622 100644 --- a/ld/ldmain.h +++ b/ld/ldmain.h @@ -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; diff --git a/ld/ldmisc.c b/ld/ldmisc.c index 3e2a190..fd6a388 100644 --- a/ld/ldmisc.c +++ b/ld/ldmisc.c @@ -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') { diff --git a/ld/lexsup.c b/ld/lexsup.c index 86a033a..1da6a50 100644 --- a/ld/lexsup.c +++ b/ld/lexsup.c @@ -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; |