[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
This commit is contained in:
Joseph Huber 2022-02-04 12:51:10 -05:00
parent b8ec430de7
commit eeb29c8477

View File

@ -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);