https://sourceware.org/bugzilla/show_bug.cgi?id=23460

--- Comment #16 from Evangelos Foutras <evangelos at foutrelis dot com> ---
(In reply to zenith432 from comment #15)
> ===== begin patch
> diff --git a/bfd/plugin.c b/bfd/plugin.c
> index d9b9e2f1..3b738c38 100644
> --- a/bfd/plugin.c
> +++ b/bfd/plugin.c
> @@ -274,7 +274,7 @@ have_claim_file:
>      goto err;
>  
>    if (!try_claim (abfd))
> -    goto err;
> +    return 0;
>  
>    abfd->plugin_format = bfd_plugin_yes;
> 
> ===== end patch

The above didn't allow a ThinLTO Chromium build to finish; there were missing
symbols during the final linking of the main binary.

Chromium built successfully with the following change (and unpatched LLVM):

==============================
diff --git a/bfd/plugin.c b/bfd/plugin.c
index d9b9e2f174..e12f37d36a 100644
--- a/bfd/plugin.c
+++ b/bfd/plugin.c
@@ -274,7 +274,7 @@ have_claim_file:
     goto err;

   if (!try_claim (abfd))
-    goto err;
+    goto err_no_dlclose;

   abfd->plugin_format = bfd_plugin_yes;

@@ -283,6 +283,7 @@ have_claim_file:
  err:
   if (plugin_handle)
     dlclose (plugin_handle);
+ err_no_dlclose:
   register_claim_file (NULL);
   return 0;
 }
==============================

The proposed approach seems to skip dlclose for most (all?) plugins. To my
untrained eye, it looks preferable to just do away with dlclose() altogether
instead of selectively skipping it.

The workaround on the LLVM side that builds LLVMgold.so with -Wl,-z,nodelete
has been tentatively merged. [1] Assuming it doesn't cause any regressions, the
use of dlclose() shouldn't be an issue anymore.

Finally, I will say that I don't understand the need to dlclose() plugins if
they don't claim a specific file. Doesn't this create unnecessary overhead of
opening and closing plugins for each member added to an archive (in the case of
ar)? Since previous binutils versions worked fine, I would think that the
problem was with file handles to object files being left open, and not plugins
that remained loaded.

[1] https://reviews.llvm.org/D50416

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
bug-binutils mailing list
bug-binutils@gnu.org
https://lists.gnu.org/mailman/listinfo/bug-binutils

Reply via email to