forked from pool/binutils
84 lines
2.6 KiB
Diff
84 lines
2.6 KiB
Diff
|
From: Markus Trippelsdorf <markus at trippelsdorf dot de>
|
||
|
To: binutils at sourceware dot org
|
||
|
Subject: [PATCH] PR14698: Load gcc's bfd-plugin automatically
|
||
|
|
||
|
Now that gcc has switched to "slim" LTO objects by default, it is
|
||
|
essential that ar, nm and ranlib always use the plugin.
|
||
|
Although gcc provides wrappers for this purpose, they are buggy and
|
||
|
superfluous. Binutils already has the ability to load plugins from the
|
||
|
lib/bfd-plugins directory, but unfortunately this only works if ar, nm
|
||
|
and ranlib are invoked on non-ELF files at the moment (so the LLVM gold
|
||
|
plugin works fine already).
|
||
|
|
||
|
The following patch allows one to place the gcc's liblto_plugin in the
|
||
|
lib/bfd-plugins directory and have it loaded by default (as long as the
|
||
|
--target option isn't used).
|
||
|
|
||
|
Please apply if the patch looks acceptable.
|
||
|
Thanks.
|
||
|
|
||
|
2014-01-20 Markus Trippelsdorf <markus@trippelsdorf.de>
|
||
|
|
||
|
PR binutils/14698
|
||
|
ar.c: Set plugin_target early if plugins are supported.
|
||
|
nm.c: Likewise.
|
||
|
|
||
|
diff --git a/binutils/ar.c b/binutils/ar.c
|
||
|
index a11ed15c86bc..f0feaef5b233 100644
|
||
|
--- a/binutils/ar.c
|
||
|
+++ b/binutils/ar.c
|
||
|
@@ -138,7 +138,11 @@ static int show_version = 0;
|
||
|
|
||
|
static int show_help = 0;
|
||
|
|
||
|
+#if BFD_SUPPORTS_PLUGINS
|
||
|
+static const char *plugin_target = "plugin";
|
||
|
+#else
|
||
|
static const char *plugin_target = NULL;
|
||
|
+#endif
|
||
|
|
||
|
static const char *target = NULL;
|
||
|
|
||
|
@@ -571,7 +575,6 @@ decode_options (int argc, char **argv)
|
||
|
break;
|
||
|
case OPTION_PLUGIN:
|
||
|
#if BFD_SUPPORTS_PLUGINS
|
||
|
- plugin_target = "plugin";
|
||
|
bfd_plugin_set_plugin (optarg);
|
||
|
#else
|
||
|
fprintf (stderr, _("sorry - this program has been built without plugin support\n"));
|
||
|
@@ -632,7 +635,6 @@ ranlib_main (int argc, char **argv)
|
||
|
/* PR binutils/13493: Support plugins. */
|
||
|
case OPTION_PLUGIN:
|
||
|
#if BFD_SUPPORTS_PLUGINS
|
||
|
- plugin_target = "plugin";
|
||
|
bfd_plugin_set_plugin (optarg);
|
||
|
#else
|
||
|
fprintf (stderr, _("sorry - this program has been built without plugin support\n"));
|
||
|
diff --git a/binutils/nm.c b/binutils/nm.c
|
||
|
index 156194f21de7..876bbed7a407 100644
|
||
|
--- a/binutils/nm.c
|
||
|
+++ b/binutils/nm.c
|
||
|
@@ -177,7 +177,11 @@ static char other_format[] = "%02x";
|
||
|
static char desc_format[] = "%04x";
|
||
|
|
||
|
static char *target = NULL;
|
||
|
-static char *plugin_target = NULL;
|
||
|
+#if BFD_SUPPORTS_PLUGINS
|
||
|
+static const char *plugin_target = "plugin";
|
||
|
+#else
|
||
|
+static const char *plugin_target = NULL;
|
||
|
+#endif
|
||
|
|
||
|
/* Used to cache the line numbers for a BFD. */
|
||
|
static bfd *lineno_cache_bfd;
|
||
|
@@ -1648,7 +1652,6 @@ main (int argc, char **argv)
|
||
|
|
||
|
case OPTION_PLUGIN: /* --plugin */
|
||
|
#if BFD_SUPPORTS_PLUGINS
|
||
|
- plugin_target = "plugin";
|
||
|
bfd_plugin_set_plugin (optarg);
|
||
|
#else
|
||
|
fatal (_("sorry - this program has been built without plugin support\n"));
|
||
|
|