ld -plugin options when plugins are disabled
authorAlan Modra <amodra@gmail.com>
Sat, 6 Jun 2020 01:58:08 +0000 (11:28 +0930)
committerAlan Modra <amodra@gmail.com>
Sat, 6 Jun 2020 01:58:08 +0000 (11:28 +0930)
This patch makes ld accept and ignore -plugin options when configured
with --disable-plugins.  The idea is to allow using a linker built
without plugin support with a gcc built with plugin support.  Quite
obviously such a combination won't work if using LTO, but gcc has a
habit of passing a bunch of -plugin and -plugin-opt arguments to ld
even when not generating or linking LTO objects.

Why do I want to do this?  Well, it lets me and other binutils
developers answer the question as to whether plugin support breaks
binutils in some areas.  Which it does for some targets.

* lexsup.c (ld_options): Accept -plugin and -plugin-opt when
!ENABLE_PLUGINS.
* testsuite/lib/ld-lib.exp (check_plugin_api_available): Adjust.

ld/ChangeLog
ld/lexsup.c
ld/testsuite/lib/ld-lib.exp

index b40d36b3e7447c9fcec7d85ce97ab9b9f397d529..c3b213f180b025461108a11f2df9bd474183f362 100644 (file)
@@ -1,3 +1,9 @@
+2020-06-06  Alan Modra  <amodra@gmail.com>
+
+       * lexsup.c (ld_options): Accept -plugin and -plugin-opt when
+       !ENABLE_PLUGINS.
+       * testsuite/lib/ld-lib.exp (check_plugin_api_available): Adjust.
+
 2020-06-05  Nelson Chu  <nelson.chu@sifive.com>
 
        * testsuite/ld-riscv-elf/attr-merge-priv-spec.d: Rename to
index 4808f7443d146b5409aa8fb2374f016b7408fef1..d84b334b346e7d2e49d4482422e1173ecc9ab219 100644 (file)
@@ -185,6 +185,11 @@ static const struct ld_option ld_options[] =
   { {"flto-partition=", required_argument, NULL, OPTION_IGNORE},
     '\0', NULL, N_("Ignored for GCC LTO option compatibility"),
     ONE_DASH },
+#else
+  { {"plugin", required_argument, NULL, OPTION_IGNORE},
+    '\0', N_("PLUGIN"), N_("Load named plugin (ignored)"), ONE_DASH },
+  { {"plugin-opt", required_argument, NULL, OPTION_IGNORE},
+    '\0', N_("ARG"), N_("Send arg to last-loaded plugin (ignored)"), ONE_DASH },
 #endif /* ENABLE_PLUGINS */
   { {"fuse-ld=", required_argument, NULL, OPTION_IGNORE},
     '\0', NULL, N_("Ignored for GCC linker option compatibility"),
index 015eda6eb971d6f97905bfa0d55880a8f2131245..6535881dd1f7d0d258b5219dd7cabc37115a0e42 100644 (file)
@@ -1135,7 +1135,8 @@ proc check_plugin_api_available { } {
     if {![info exists plugin_api_available_saved]} {
        # Check if the ld used by gcc supports --plugin.
        set ld_output [remote_exec host $ld "--help"]
-       if { [ string first "-plugin PLUGIN" $ld_output ] >= 0 } {
+       if { [regexp -- "-plugin PLUGIN \[^\n\r\]*" $ld_output line]
+            && ![regexp "ignored" $line] } {
            set plugin_api_available_saved 1
        } else {
            set plugin_api_available_saved 0