[clang] eeb29c8 - [OpenMP] Add -Bsymbolic to arguments for GNU linker

Joseph Huber via cfe-commits cfe-commits at lists.llvm.org
Fri Feb 4 12:13:46 PST 2022


Author: Joseph Huber
Date: 2022-02-04T15:13:32-05:00
New Revision: eeb29c8477d96ad821b3283dad8ed060a3426118

URL: https://github.com/llvm/llvm-project/commit/eeb29c8477d96ad821b3283dad8ed060a3426118
DIFF: https://github.com/llvm/llvm-project/commit/eeb29c8477d96ad821b3283dad8ed060a3426118.diff

LOG: [OpenMP] Add -Bsymbolic to arguments for GNU linker

This patch adds the '-Bsymbolic' flag when we perform linking for the
offloading device. We already pass '-fvisibility=protected' but this is
not properly handled when using the bfd linker as is described in
https://maskray.me/blog/2021-05-16-elf-interposition-and-bsymbolic.
Previously this caused linker errors when creating the shared library.

Reviewed By: JonChesterfield

Differential Revision: https://reviews.llvm.org/D119018

Added: 
    

Modified: 
    clang/lib/Driver/ToolChains/Gnu.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
index 12eaf1fb8b514..d0808d061c827 100644
--- a/clang/lib/Driver/ToolChains/Gnu.cpp
+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
@@ -572,6 +572,14 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA,
     }
     CmdArgs.push_back("-lm");
   }
+
+  // If we are linking for the device all symbols should be bound locally. The
+  // symbols are already protected which makes this redundant. This is only
+  // necessary to work around a problem in bfd.
+  // TODO: Remove this once 'lld' becomes the only linker for offloading.
+  if (JA.isDeviceOffloading(Action::OFK_OpenMP))
+    CmdArgs.push_back("-Bsymbolic");
+
   // Silence warnings when linking C code with a C++ '-stdlib' argument.
   Args.ClaimAllArgs(options::OPT_stdlib_EQ);
 


        


More information about the cfe-commits mailing list