From: "H.J. Lu" <hjl.tools@gmail.com>
To: Dave Korn <dave.korn.cygwin@gmail.com>, binutils@sourceware.org
Cc: Alan Modra <amodra@gmail.com>
Subject: Re: PATCH: Report plugin symbol status
Date: Fri, 04 Mar 2011 20:46:00 -0000 [thread overview]
Message-ID: <AANLkTik3ZOTn7qmpZHv1EO+a3-Mv6w2bQ38DQTm+COt9@mail.gmail.com> (raw)
In-Reply-To: <20110304035134.GW13094@bubble.grove.modra.org>
[-- Attachment #1: Type: text/plain, Size: 1226 bytes --]
On Thu, Mar 3, 2011 at 7:51 PM, Alan Modra <amodra@gmail.com> wrote:
> On Wed, Mar 02, 2011 at 07:39:34PM -0800, H.J. Lu wrote:
>> On Wed, Mar 2, 2011 at 4:45 PM, Dave Korn <dave.korn.cygwin@gmail.com> wrote:
>> > On 02/03/2011 19:55, H.J. Lu wrote:
>> >> Hi,
>> >>
>> >> This patch reports plugin symbol status for --verbose. It can
>> >> be used to debug LTO plugin symbol issues. OK for trunk?
>> >
>> > What sort of size inflation in the logfiles of a real-world link is this
>> > likely to cause? I would expect it to be a significant inflation, in which
>> > case maybe a separate option would be more convenient than changing the
>> > existing --verbose behaviour.
>> >
>>
>> I can add a new switch.
>
> Or give --verbose an optional arg, so you get the sym dump with
> --verbose=2.
>
Is this OK for trunk?
Thanks.
--
H.J
---
.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.
---
[-- Attachment #2: ld-plugin-verbose-1.pactch --]
[-- Type: application/octet-stream, Size: 4317 bytes --]
diff --git a/ld/ld.texinfo b/ld/ld.texinfo
index 9957d03..ed79923 100644
--- a/ld/ld.texinfo
+++ b/ld/ld.texinfo
@@ -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
diff --git a/ld/lexsup.c b/ld/lexsup.c
index 4baef3c..8050098 100644
--- a/ld/lexsup.c
+++ b/ld/lexsup.c
@@ -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 },
@@ -1337,6 +1338,13 @@ parse_args (unsigned argc, char **argv)
version_printed = TRUE;
trace_file_tries = TRUE;
overflow_cutoff_limit = -2;
+ if (optarg != NULL)
+ {
+ char *end;
+ report_plugin_symbols = strtoul (optarg, &end, 0);
+ if (*end)
+ einfo (_("%P%F: invalid number `%s'\n"), optarg);
+ }
break;
case 'v':
ldversion (0);
diff --git a/ld/plugin.c b/ld/plugin.c
index 40acbdb..2d915ff 100644
--- a/ld/plugin.c
+++ b/ld/plugin.c
@@ -36,6 +36,9 @@
#include <Windows.h>
#endif
+/* Report plugin symbols. */
+int report_plugin_symbols;
+
/* Stores a single argument passed to a plugin. */
typedef struct plugin_arg
{
@@ -460,7 +463,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. */
@@ -468,7 +471,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
@@ -513,7 +516,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
@@ -526,13 +529,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);
+
+report_symbol:
+ if (report_plugin_symbols > 1)
+ einfo ("%P: %B: symbol `%s' definition: %d, resolution: %d\n",
+ abfd, syms[n].name, syms[n].def, syms[n].resolution);
}
return LDPS_OK;
}
diff --git a/ld/plugin.h b/ld/plugin.h
index 5b340be..ebb8773 100644
--- a/ld/plugin.h
+++ b/ld/plugin.h
@@ -21,6 +21,8 @@
#ifndef GLD_PLUGIN_H
#define GLD_PLUGIN_H
+/* Report plugin symbols. */
+extern int 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. */
next prev parent reply other threads:[~2011-03-04 20:46 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-02 19:56 H.J. Lu
2011-03-03 0:46 ` Dave Korn
2011-03-03 3:40 ` H.J. Lu
2011-03-04 0:16 ` Dave Korn
2011-03-04 3:51 ` Alan Modra
2011-03-04 20:46 ` H.J. Lu [this message]
2011-03-04 22:26 ` Alan Modra
2011-03-04 23:45 ` H.J. Lu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=AANLkTik3ZOTn7qmpZHv1EO+a3-Mv6w2bQ38DQTm+COt9@mail.gmail.com \
--to=hjl.tools@gmail.com \
--cc=amodra@gmail.com \
--cc=binutils@sourceware.org \
--cc=dave.korn.cygwin@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).