Skip to content

Commit ead7af7

Browse files
ampandey-AMDronlieb
authored andcommitted
[ASan][OpenMP][Driver] Fix duplicate symbol resolution at llvm-link.
After patch (https://gerrit-git.amd.com/c/lightning/ec/llvm-project/+/1012781) to resolve duplicate symbol resolution for device stubs require overriding of their definitions from ockl.bc with definitions in libomptarget-amdgpu-gfxXXX.bc. Change-Id: Ie538ddf4c630efd92b38f8791efb937dd8b1d9ed
1 parent 9d076b0 commit ead7af7

File tree

1 file changed

+16
-9
lines changed

1 file changed

+16
-9
lines changed

clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -239,22 +239,16 @@ const char *amdgpu::dlr::getLinkCommandArgs(
239239

240240
llvm::SmallVector<std::string, 12> BCLibs;
241241

242+
std::string AsanRTL;
242243
if (Args.hasFlag(options::OPT_fgpu_sanitize, options::OPT_fno_gpu_sanitize,
243244
true) &&
244245
TC.getSanitizerArgs(Args).needsAsanRt()) {
245246
if (!Args.hasArg(options::OPT_nogpulib)){
246-
std::string AsanRTL(RocmInstallation.getAsanRTLPath());
247-
// asanrtl is dependent on ockl so for every asanrtl bitcode linking
248-
// requires ockl but viceversa is not true.
249-
std::string OcklRTL(RocmInstallation.getOCKLPath());
247+
AsanRTL = RocmInstallation.getAsanRTLPath();
250248
if(AsanRTL.empty())
251249
TC.getDriver().Diag(diag::err_drv_no_asan_rt_lib);
252-
else if(OcklRTL.empty())
253-
TC.getDriver().Diag(diag::err_drv_no_rocm_device_lib);
254-
else{
250+
else
255251
BCLibs.push_back(AsanRTL);
256-
BCLibs.push_back(OcklRTL);
257-
}
258252
}
259253
}
260254
StringRef GPUArch = getProcessorFromTargetID(Triple, TargetID);
@@ -264,6 +258,7 @@ const char *amdgpu::dlr::getLinkCommandArgs(
264258
// where it is expected it means we are using the build tree compiler
265259
// not the installed compiler.
266260
std::string LibDeviceName = "/libomptarget-amdgpu-" + GPUArch.str() + ".bc";
261+
267262
SmallString<128> Path(Args.MakeArgString(libpath + LibDeviceName));
268263
if (LibSuffix != "lib" || llvm::sys::fs::exists(Path)) {
269264
BCLibs.push_back(Args.MakeArgString(Path));
@@ -272,6 +267,18 @@ const char *amdgpu::dlr::getLinkCommandArgs(
272267
BCLibs.push_back(Args.MakeArgString(libpath + RtDir + LibDeviceName));
273268
}
274269

270+
if (!AsanRTL.empty()) {
271+
if (!Args.hasArg(options::OPT_nogpulib)) {
272+
// asanrtl is dependent on ockl so for every asanrtl bitcode linking
273+
// requires ockl but viceversa is not true.
274+
std::string OcklRTL(RocmInstallation.getOCKLPath());
275+
if (OcklRTL.empty())
276+
TC.getDriver().Diag(diag::err_drv_no_rocm_device_lib);
277+
else
278+
BCLibs.push_back(OcklRTL);
279+
}
280+
}
281+
275282
// Add the generic set of libraries, OpenMP subset only
276283
BCLibs.append(amdgpu::dlr::getCommonDeviceLibNames(
277284
C.getArgs(), C.getDriver(), GPUArch.str(), /* isOpenMP=*/true,

0 commit comments

Comments
 (0)