From a67ef911afce4566c72ef1e8184e5f04a83d363e Mon Sep 17 00:00:00 2001 From: Rainer Orth Date: Mon, 5 May 2025 14:22:40 +0200 Subject: [PATCH] [OpenMP] Provide __kmp_unnamed_critical_addr on SPARC `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`. --- openmp/runtime/src/z_Linux_asm.S | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) 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),@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),@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