[clang] hipcc/ld.lld unable to link separable compilation when dynamic librar… (PR #169551)
David Salinas via cfe-commits
cfe-commits at lists.llvm.org
Tue Dec 2 09:43:04 PST 2025
https://github.com/david-salinas updated https://github.com/llvm/llvm-project/pull/169551
>From 6bfbc089ad15e794249703bef3449e01c15e6ff8 Mon Sep 17 00:00:00 2001
From: david-salinas <dsalinas at amd.com>
Date: Tue, 25 Nov 2025 19:02:20 +0000
Subject: [PATCH 1/7] hipcc/ld.lld unable to link separable compilation when
dynamic library is fully specified
---
clang/lib/Driver/ToolChains/HIPUtility.cpp | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/clang/lib/Driver/ToolChains/HIPUtility.cpp b/clang/lib/Driver/ToolChains/HIPUtility.cpp
index 1af2ae6470f1e..82d84dac9a907 100644
--- a/clang/lib/Driver/ToolChains/HIPUtility.cpp
+++ b/clang/lib/Driver/ToolChains/HIPUtility.cpp
@@ -241,15 +241,16 @@ class HIPUndefinedFatBinSymbols {
bool isUndefined =
FlagOrErr.get() & llvm::object::SymbolRef::SF_Undefined;
+ bool isHidden = FlagOrErr.get() & llvm::object::SymbolRef::SF_Hidden;
bool isFatBinSymbol = Name.starts_with(FatBinPrefix);
bool isGPUBinHandleSymbol = Name.starts_with(GPUBinHandlePrefix);
// Handling for defined symbols
if (!isUndefined) {
- if (isFatBinSymbol) {
+ if ((isFatBinSymbol) && (!isHidden)) {
DefinedFatBinSymbols.insert(Name.str());
FatBinSymbols.erase(Name.str());
- } else if (isGPUBinHandleSymbol) {
+ } else if ((isGPUBinHandleSymbol) && (!isHidden)) {
DefinedGPUBinHandleSymbols.insert(Name.str());
GPUBinHandleSymbols.erase(Name.str());
}
>From a49c2854834c1ac1add67b6d8981073040347558 Mon Sep 17 00:00:00 2001
From: david-salinas <dsalinas at amd.com>
Date: Wed, 26 Nov 2025 19:19:31 +0000
Subject: [PATCH 2/7] remove redundant parenthesis
---
clang/lib/Driver/ToolChains/HIPUtility.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/clang/lib/Driver/ToolChains/HIPUtility.cpp b/clang/lib/Driver/ToolChains/HIPUtility.cpp
index 82d84dac9a907..8e95d37cb63c1 100644
--- a/clang/lib/Driver/ToolChains/HIPUtility.cpp
+++ b/clang/lib/Driver/ToolChains/HIPUtility.cpp
@@ -247,10 +247,10 @@ class HIPUndefinedFatBinSymbols {
// Handling for defined symbols
if (!isUndefined) {
- if ((isFatBinSymbol) && (!isHidden)) {
+ if (isFatBinSymbol && !isHidden) {
DefinedFatBinSymbols.insert(Name.str());
FatBinSymbols.erase(Name.str());
- } else if ((isGPUBinHandleSymbol) && (!isHidden)) {
+ } else if (isGPUBinHandleSymbol && !isHidden) {
DefinedGPUBinHandleSymbols.insert(Name.str());
GPUBinHandleSymbols.erase(Name.str());
}
>From 3ffbf84469d2da76767d3d537a042e94d0d68933 Mon Sep 17 00:00:00 2001
From: David Salinas <dsalinas at amd.com>
Date: Wed, 26 Nov 2025 19:33:08 -0500
Subject: [PATCH 3/7] Apply suggestion from @omor1
Co-authored-by: Omri Mor <omri50 at gmail.com>
---
clang/lib/Driver/ToolChains/HIPUtility.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/clang/lib/Driver/ToolChains/HIPUtility.cpp b/clang/lib/Driver/ToolChains/HIPUtility.cpp
index 8e95d37cb63c1..2c4661b460916 100644
--- a/clang/lib/Driver/ToolChains/HIPUtility.cpp
+++ b/clang/lib/Driver/ToolChains/HIPUtility.cpp
@@ -246,7 +246,7 @@ class HIPUndefinedFatBinSymbols {
bool isGPUBinHandleSymbol = Name.starts_with(GPUBinHandlePrefix);
// Handling for defined symbols
- if (!isUndefined) {
+ if (!isUndefined && !isHidden) {
if (isFatBinSymbol && !isHidden) {
DefinedFatBinSymbols.insert(Name.str());
FatBinSymbols.erase(Name.str());
>From 3fe8f3225d5ad90fccc4fcbf82186863246c178a Mon Sep 17 00:00:00 2001
From: David Salinas <dsalinas at amd.com>
Date: Wed, 26 Nov 2025 19:35:36 -0500
Subject: [PATCH 4/7] Update HIPUtility.cpp
move (!isHidden) to upper level if-statement.
---
clang/lib/Driver/ToolChains/HIPUtility.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/clang/lib/Driver/ToolChains/HIPUtility.cpp b/clang/lib/Driver/ToolChains/HIPUtility.cpp
index 2c4661b460916..54aed880a0393 100644
--- a/clang/lib/Driver/ToolChains/HIPUtility.cpp
+++ b/clang/lib/Driver/ToolChains/HIPUtility.cpp
@@ -247,10 +247,10 @@ class HIPUndefinedFatBinSymbols {
// Handling for defined symbols
if (!isUndefined && !isHidden) {
- if (isFatBinSymbol && !isHidden) {
+ if (isFatBinSymbol) {
DefinedFatBinSymbols.insert(Name.str());
FatBinSymbols.erase(Name.str());
- } else if (isGPUBinHandleSymbol && !isHidden) {
+ } else if (isGPUBinHandleSymbol) {
DefinedGPUBinHandleSymbols.insert(Name.str());
GPUBinHandleSymbols.erase(Name.str());
}
>From a2b0516c9d1c766bc81468b2f2d1e9ac83f462ac Mon Sep 17 00:00:00 2001
From: david-salinas <dsalinas at amd.com>
Date: Mon, 1 Dec 2025 20:15:16 +0000
Subject: [PATCH 5/7] Revert "Update HIPUtility.cpp"
This reverts commit 3fe8f3225d5ad90fccc4fcbf82186863246c178a.
---
clang/lib/Driver/ToolChains/HIPUtility.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/clang/lib/Driver/ToolChains/HIPUtility.cpp b/clang/lib/Driver/ToolChains/HIPUtility.cpp
index 54aed880a0393..2c4661b460916 100644
--- a/clang/lib/Driver/ToolChains/HIPUtility.cpp
+++ b/clang/lib/Driver/ToolChains/HIPUtility.cpp
@@ -247,10 +247,10 @@ class HIPUndefinedFatBinSymbols {
// Handling for defined symbols
if (!isUndefined && !isHidden) {
- if (isFatBinSymbol) {
+ if (isFatBinSymbol && !isHidden) {
DefinedFatBinSymbols.insert(Name.str());
FatBinSymbols.erase(Name.str());
- } else if (isGPUBinHandleSymbol) {
+ } else if (isGPUBinHandleSymbol && !isHidden) {
DefinedGPUBinHandleSymbols.insert(Name.str());
GPUBinHandleSymbols.erase(Name.str());
}
>From b8dc7e2dcb33ddeacb72c6d1243f2df2eb2d91ad Mon Sep 17 00:00:00 2001
From: david-salinas <dsalinas at amd.com>
Date: Mon, 1 Dec 2025 20:27:14 +0000
Subject: [PATCH 6/7] Revert "Apply suggestion from @omor1"
This reverts commit 3ffbf84469d2da76767d3d537a042e94d0d68933.
---
clang/lib/Driver/ToolChains/HIPUtility.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/clang/lib/Driver/ToolChains/HIPUtility.cpp b/clang/lib/Driver/ToolChains/HIPUtility.cpp
index 2c4661b460916..8e95d37cb63c1 100644
--- a/clang/lib/Driver/ToolChains/HIPUtility.cpp
+++ b/clang/lib/Driver/ToolChains/HIPUtility.cpp
@@ -246,7 +246,7 @@ class HIPUndefinedFatBinSymbols {
bool isGPUBinHandleSymbol = Name.starts_with(GPUBinHandlePrefix);
// Handling for defined symbols
- if (!isUndefined && !isHidden) {
+ if (!isUndefined) {
if (isFatBinSymbol && !isHidden) {
DefinedFatBinSymbols.insert(Name.str());
FatBinSymbols.erase(Name.str());
>From 6e0c902c70bca6f40e382f8b2e3fddd878af7219 Mon Sep 17 00:00:00 2001
From: david-salinas <dsalinas at amd.com>
Date: Tue, 2 Dec 2025 16:04:03 +0000
Subject: [PATCH 7/7] rework defined/undefined symbols in hiputility
---
clang/lib/Driver/ToolChains/HIPUtility.cpp | 26 ++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/clang/lib/Driver/ToolChains/HIPUtility.cpp b/clang/lib/Driver/ToolChains/HIPUtility.cpp
index 8e95d37cb63c1..274c5700e9759 100644
--- a/clang/lib/Driver/ToolChains/HIPUtility.cpp
+++ b/clang/lib/Driver/ToolChains/HIPUtility.cpp
@@ -245,6 +245,7 @@ class HIPUndefinedFatBinSymbols {
bool isFatBinSymbol = Name.starts_with(FatBinPrefix);
bool isGPUBinHandleSymbol = Name.starts_with(GPUBinHandlePrefix);
+ /** SALINAS
// Handling for defined symbols
if (!isUndefined) {
if (isFatBinSymbol && !isHidden) {
@@ -264,6 +265,31 @@ class HIPUndefinedFatBinSymbols {
else if (isGPUBinHandleSymbol && DefinedGPUBinHandleSymbols.find(Name) ==
DefinedGPUBinHandleSymbols.end())
GPUBinHandleSymbols.insert(Name.str());
+ ***/
+ // Add undefined symbols if they are not in the defined sets
+ if (isUndefined) {
+ if (isFatBinSymbol &&
+ DefinedFatBinSymbols.find(Name) == DefinedFatBinSymbols.end())
+ FatBinSymbols.insert(Name.str());
+ else if (isGPUBinHandleSymbol &&
+ DefinedGPUBinHandleSymbols.find(Name) ==
+ DefinedGPUBinHandleSymbols.end())
+ GPUBinHandleSymbols.insert(Name.str());
+ continue;
+ }
+
+ // Ignore hidden defined symbols
+ if (isHidden)
+ continue;
+
+ // Handling for non-hidden defined symbols
+ if (isFatBinSymbol) {
+ DefinedFatBinSymbols.insert(Name.str());
+ FatBinSymbols.erase(Name.str());
+ } else if (isGPUBinHandleSymbol) {
+ DefinedGPUBinHandleSymbols.insert(Name.str());
+ GPUBinHandleSymbols.erase(Name.str());
+ }
}
}
More information about the cfe-commits
mailing list