svn commit: r365721 - in releng/12.2: contrib/llvm-project/compiler-rt/lib/builtins lib/libcompiler_rt
Dimitry Andric
dim at FreeBSD.org
Mon Sep 14 14:52:23 UTC 2020
Author: dim
Date: Mon Sep 14 14:52:22 2020
New Revision: 365721
URL: https://svnweb.freebsd.org/changeset/base/365721
Log:
MF12 r365661:
MFC r364753:
Add atomic and bswap functions to libcompiler_rt
There have been several mentions on our mailing lists about missing
atomic functions in our system libraries (e.g. __atomic_load_8 and
friends), and recently I saw __bswapdi2 and __bswapsi2 mentioned too.
To address this, add implementations for the functions from compiler-rt
to the system compiler support libraries, e.g. libcompiler_rt.a and and
libgcc_s.so.
This also needs a small fixup in compiler-rt's atomic.c, to ensure that
32-bit mips can build correctly.
Bump __FreeBSD_version to make it easier for port maintainers to detect
when these functions were added.
Differential Revision: https://reviews.freebsd.org/D26159
MFC r364782:
After r364753, there should be no need to suppress -Watomic-alignment
warnings anymore for compiler-rt's atomic.c. This occurred because the
IS_LOCK_FREE_8 macro was not correctly defined to 0 for mips, and this
caused the compiler to emit a runtime call to __atomic_is_lock_free(),
and that triggers the warning.
MFC r365509:
Follow-up r364753 by enabling compiler-rt's atomic implementation only
for clang, as it uses clang specific builtins, and does not compile
correctly with gcc. Note that gcc packages usually come with their own
libatomic, providing these primitives.
MFC r365588:
Follow-up r364753 by only using arm's stdatomic.c implementation, as it
already covers the functions in compiler-rt's atomic.c, leading to
conflicts when linking.
PR: 230888
Approved by: re (gjb)
Modified:
releng/12.2/contrib/llvm-project/compiler-rt/lib/builtins/atomic.c
releng/12.2/lib/libcompiler_rt/Makefile.inc
Directory Properties:
releng/12.2/ (props changed)
Modified: releng/12.2/contrib/llvm-project/compiler-rt/lib/builtins/atomic.c
==============================================================================
--- releng/12.2/contrib/llvm-project/compiler-rt/lib/builtins/atomic.c Mon Sep 14 14:45:30 2020 (r365720)
+++ releng/12.2/contrib/llvm-project/compiler-rt/lib/builtins/atomic.c Mon Sep 14 14:52:22 2020 (r365721)
@@ -124,8 +124,8 @@ static __inline Lock *lock_for_pointer(void *ptr) {
#define IS_LOCK_FREE_2 __c11_atomic_is_lock_free(2)
#define IS_LOCK_FREE_4 __c11_atomic_is_lock_free(4)
-/// 32 bit PowerPC doesn't support 8-byte lock_free atomics
-#if !defined(__powerpc64__) && defined(__powerpc__)
+/// 32 bit MIPS and PowerPC don't support 8-byte lock_free atomics
+#if defined(__mips__) || (!defined(__powerpc64__) && defined(__powerpc__))
#define IS_LOCK_FREE_8 0
#else
#define IS_LOCK_FREE_8 __c11_atomic_is_lock_free(8)
Modified: releng/12.2/lib/libcompiler_rt/Makefile.inc
==============================================================================
--- releng/12.2/lib/libcompiler_rt/Makefile.inc Mon Sep 14 14:45:30 2020 (r365720)
+++ releng/12.2/lib/libcompiler_rt/Makefile.inc Mon Sep 14 14:52:22 2020 (r365721)
@@ -18,6 +18,8 @@ SRCF+= ashldi3
SRCF+= ashlti3
SRCF+= ashrdi3
SRCF+= ashrti3
+SRCF+= bswapdi2
+SRCF+= bswapsi2
SRCF+= clear_cache
SRCF+= clzdi2
SRCF+= clzsi2
@@ -121,6 +123,13 @@ SRCF+= umoddi3
SRCF+= umodsi3
SRCF+= umodti3
+# Enable compiler-rt's atomic implementation only for clang, as it uses clang
+# specific builtins, and gcc packages usually come with their own libatomic.
+# Exclude arm which has its own implementations of atomic functions, below.
+.if "${COMPILER_TYPE}" == "clang" && ${MACHINE_CPUARCH} != "arm"
+SRCF+= atomic
+.endif
+
# Avoid using SSE2 instructions on i386, if unsupported.
.if ${MACHINE_CPUARCH} == "i386" && empty(MACHINE_CPU:Msse2)
SRCS+= floatdidf.c
@@ -213,12 +222,6 @@ CFLAGS+= -DEMIT_SYNC_ATOMICS
SRCF+= stdatomic
.endif
-.if "${COMPILER_TYPE}" == "clang" && \
- (${MACHINE_ARCH} == "powerpc" || ${MACHINE_ARCH} == "powerpcspe")
-SRCS+= atomic.c
-CFLAGS.atomic.c+= -Wno-atomic-alignment
-.endif
-
.for file in ${SRCF}
.if ${MACHINE_ARCH:Marmv[67]*} && (!defined(CPUTYPE) || ${CPUTYPE:M*soft*} == "") \
&& exists(${CRTSRC}/${CRTARCH}/${file}vfp.S)
@@ -240,18 +243,9 @@ SRCS+= aeabi_memmove.S
SRCS+= aeabi_memset.S
SRCS+= aeabi_uidivmod.S
SRCS+= aeabi_uldivmod.S
-SRCS+= bswapdi2.S
-SRCS+= bswapsi2.S
SRCS+= switch16.S
SRCS+= switch32.S
SRCS+= switch8.S
SRCS+= switchu8.S
SRCS+= sync_synchronize.S
-.endif
-
-# On some archs GCC-6.3 requires bswap32 built-in.
-.if ${MACHINE_CPUARCH} == "mips" || ${MACHINE_CPUARCH} == "riscv" || \
- ${MACHINE_CPUARCH} == "sparc64"
-SRCS+= bswapdi2.c
-SRCS+= bswapsi2.c
.endif
More information about the svn-src-all
mailing list