Report plugin symbols for --verbose=N.

2011-03-04  H.J. Lu  <hongjiu.lu@intel.com>

	* ld.texinfo: Document --verbose[=NUMBER].

	* lexsup.c (ld_options): Update --verbose.
	(parse_args): Set report_plugin_symbols.

	* plugin.c (report_plugin_symbols): New.
	(get_symbols): Report plugin symbols if report_plugin_symbols
	is TRUE.

	* plugin.h (report_plugin_symbols): New.
This commit is contained in:
H.J. Lu 2011-03-04 23:44:01 +00:00
parent 51dc551dc2
commit 1715a13cc2
5 changed files with 46 additions and 13 deletions

View File

@ -1,3 +1,16 @@
2011-03-04 H.J. Lu <hongjiu.lu@intel.com>
* ld.texinfo: Document --verbose[=NUMBER].
* lexsup.c (ld_options): Update --verbose.
(parse_args): Set report_plugin_symbols.
* plugin.c (report_plugin_symbols): New.
(get_symbols): Report plugin symbols if report_plugin_symbols
is TRUE.
* plugin.h (report_plugin_symbols): New.
2011-03-01 H.J. Lu <hongjiu.lu@intel.com>
PR ld/12529

View File

@ -1851,13 +1851,14 @@ Normally the linker will generate an error message for each reported
unresolved symbol but the option @option{--warn-unresolved-symbols}
can change this to a warning.
@kindex --verbose
@cindex verbose
@kindex --verbose[=@var{NUMBER}]
@cindex verbose[=@var{NUMBER}]
@item --dll-verbose
@itemx --verbose
@itemx --verbose[=@var{NUMBER}]
Display the version number for @command{ld} and list the linker emulations
supported. Display which input files can and cannot be opened. Display
the linker script being used by the linker.
the linker script being used by the linker. If the optional @var{NUMBER}
argument > 1, plugin symbol status will also be displayed.
@kindex --version-script=@var{version-scriptfile}
@cindex version script, symbol versions

View File

@ -560,8 +560,9 @@ static const struct ld_option ld_options[] =
" ignore-all, report-all, ignore-in-object-files,\n"
" ignore-in-shared-libs"),
TWO_DASHES },
{ {"verbose", no_argument, NULL, OPTION_VERBOSE},
'\0', NULL, N_("Output lots of information during link"), TWO_DASHES },
{ {"verbose", optional_argument, NULL, OPTION_VERBOSE},
'\0', N_("[=NUMBER]"),
N_("Output lots of information during link"), TWO_DASHES },
{ {"dll-verbose", no_argument, NULL, OPTION_VERBOSE}, /* Linux. */
'\0', NULL, NULL, NO_HELP },
{ {"version-script", required_argument, NULL, OPTION_VERSION_SCRIPT },
@ -1326,6 +1327,14 @@ parse_args (unsigned argc, char **argv)
version_printed = TRUE;
trace_file_tries = TRUE;
overflow_cutoff_limit = -2;
if (optarg != NULL)
{
char *end;
int level = strtoul (optarg, &end, 0);
if (*end)
einfo (_("%P%F: invalid number `%s'\n"), optarg);
report_plugin_symbols = level > 1;
}
break;
case 'v':
ldversion (0);

View File

@ -36,6 +36,9 @@
#include <Windows.h>
#endif
/* Report plugin symbols. */
bfd_boolean report_plugin_symbols;
/* The suffix to append to the name of the real (claimed) object file
when generating a dummy BFD to hold the IR symbols sent from the
plugin. */
@ -463,7 +466,7 @@ get_symbols (const void *handle, int nsyms, struct ld_plugin_symbol *syms)
if (!blhe)
{
syms[n].resolution = LDPR_UNKNOWN;
continue;
goto report_symbol;
}
/* Determine resolution from blhe type and symbol's original type. */
@ -471,7 +474,7 @@ get_symbols (const void *handle, int nsyms, struct ld_plugin_symbol *syms)
|| blhe->type == bfd_link_hash_undefweak)
{
syms[n].resolution = LDPR_UNDEF;
continue;
goto report_symbol;
}
if (blhe->type != bfd_link_hash_defined
&& blhe->type != bfd_link_hash_defweak
@ -516,7 +519,7 @@ get_symbols (const void *handle, int nsyms, struct ld_plugin_symbol *syms)
syms[n].resolution = LDPR_RESOLVED_DYN;
else
syms[n].resolution = LDPR_RESOLVED_EXEC;
continue;
goto report_symbol;
}
/* Was originally def, or weakdef. Does it prevail? If the
@ -529,13 +532,18 @@ get_symbols (const void *handle, int nsyms, struct ld_plugin_symbol *syms)
syms[n].resolution = (ironly
? LDPR_PREVAILING_DEF_IRONLY
: LDPR_PREVAILING_DEF);
continue;
goto report_symbol;
}
/* Was originally def, weakdef, or common, but has been pre-empted. */
syms[n].resolution = is_ir_dummy_bfd (owner_sec->owner)
? LDPR_PREEMPTED_IR
: LDPR_PREEMPTED_REG;
syms[n].resolution = (is_ir_dummy_bfd (owner_sec->owner)
? LDPR_PREEMPTED_IR
: LDPR_PREEMPTED_REG);
report_symbol:
if (report_plugin_symbols)
einfo ("%P: %B: symbol `%s' definition: %d, resolution: %d\n",
abfd, syms[n].name, syms[n].def, syms[n].resolution);
}
return LDPS_OK;
}

View File

@ -21,6 +21,8 @@
#ifndef GLD_PLUGIN_H
#define GLD_PLUGIN_H
/* Report plugin symbols. */
extern bfd_boolean report_plugin_symbols;
/* This is the only forward declaration we need to avoid having
to include the plugin-api.h header in order to use this file. */