[Openmp-commits] [openmp] c24b9ca - [OpenMP] Provide __kmp_unnamed_critical_addr on SPARC (#138517)
via Openmp-commits
openmp-commits at lists.llvm.org
Tue May 6 00:13:09 PDT 2025
Author: Rainer Orth
Date: 2025-05-06T09:13:05+02:00
New Revision: c24b9ca3da1a36c78652f5c2e046a91af1b63aed
URL: https://github.com/llvm/llvm-project/commit/c24b9ca3da1a36c78652f5c2e046a91af1b63aed
DIFF: https://github.com/llvm/llvm-project/commit/c24b9ca3da1a36c78652f5c2e046a91af1b63aed.diff
LOG: [OpenMP] Provide __kmp_unnamed_critical_addr on SPARC (#138517)
`libomp.so` currently fails to link on SPARC, both Solaris/sparcv9 and
Linux/sparc64:
```
Undefined first referenced
symbol in file
__kmp_unnamed_critical_addr projects/openmp/runtime/src/CMakeFiles/omp.dir/kmp_gsupport.cpp.o
ld: fatal: symbol referencing errors
```
This patch provides the necessary definition. While at it, I noticed
that on non-x86 targets the symbol wasn't marked as `@object`, which
this patch corrects, too.
Tested on `sparcv9-sun-solaris2.11`, `sparc64-unknown-linux-gnu`,
`amd64-pc-solaris2.11`, and `x86_64-pc-linux-gnu`.
Added:
Modified:
openmp/runtime/src/z_Linux_asm.S
Removed:
################################################################################
diff --git a/openmp/runtime/src/z_Linux_asm.S b/openmp/runtime/src/z_Linux_asm.S
index 607bfd8e3cb0f..eba7bab371df3 100644
--- a/openmp/runtime/src/z_Linux_asm.S
+++ b/openmp/runtime/src/z_Linux_asm.S
@@ -2470,7 +2470,7 @@ __kmp_invoke_microtask:
#endif /* KMP_ARCH_S390X */
-#if KMP_ARCH_ARM || KMP_ARCH_MIPS || KMP_ARCH_PPC || KMP_ARCH_AARCH64_32
+#if KMP_ARCH_ARM || KMP_ARCH_MIPS || KMP_ARCH_PPC || KMP_ARCH_AARCH64_32 || KMP_ARCH_SPARC32
#ifndef KMP_PREFIX_UNDERSCORE
# define KMP_PREFIX_UNDERSCORE(x) x
#endif
@@ -2482,13 +2482,14 @@ __kmp_invoke_microtask:
KMP_PREFIX_UNDERSCORE(__kmp_unnamed_critical_addr):
.4byte .gomp_critical_user_
#ifdef __ELF__
+ .type KMP_PREFIX_UNDERSCORE(__kmp_unnamed_critical_addr), at object
.size KMP_PREFIX_UNDERSCORE(__kmp_unnamed_critical_addr),4
#endif
-#endif /* KMP_ARCH_ARM || KMP_ARCH_MIPS || KMP_ARCH_AARCH64_32 */
+#endif /* KMP_ARCH_ARM || KMP_ARCH_MIPS || KMP_ARCH_AARCH64_32 || KMP_ARCH_SPARC32 */
#if KMP_ARCH_PPC64 || KMP_ARCH_AARCH64 || KMP_ARCH_MIPS64 || \
KMP_ARCH_RISCV64 || KMP_ARCH_LOONGARCH64 || KMP_ARCH_VE || \
- KMP_ARCH_S390X
+ KMP_ARCH_S390X || KMP_ARCH_SPARC64
#ifndef KMP_PREFIX_UNDERSCORE
# define KMP_PREFIX_UNDERSCORE(x) x
#endif
@@ -2500,11 +2501,12 @@ KMP_PREFIX_UNDERSCORE(__kmp_unnamed_critical_addr):
KMP_PREFIX_UNDERSCORE(__kmp_unnamed_critical_addr):
.8byte .gomp_critical_user_
#ifdef __ELF__
+ .type KMP_PREFIX_UNDERSCORE(__kmp_unnamed_critical_addr), at object
.size KMP_PREFIX_UNDERSCORE(__kmp_unnamed_critical_addr),8
#endif
#endif /* KMP_ARCH_PPC64 || KMP_ARCH_AARCH64 || KMP_ARCH_MIPS64 ||
KMP_ARCH_RISCV64 || KMP_ARCH_LOONGARCH64 || KMP_ARCH_VE ||
- KMP_ARCH_S390X */
+ KMP_ARCH_S390X || KMP_ARCH_SPARC64 */
#if KMP_OS_LINUX
# if KMP_ARCH_ARM || KMP_ARCH_AARCH64
More information about the Openmp-commits
mailing list