svn commit: r365661 - in stable: 11/contrib/llvm-project/compiler-rt/lib/builtins 11/lib/libcompiler_rt 11/sys/sys 12/contrib/llvm-project/compiler-rt/lib/builtins 12/lib/libcompiler_rt 12/sys/sys

Dimitry Andric dim at FreeBSD.org
Sat Sep 12 16:33:06 UTC 2020


Author: dim
Date: Sat Sep 12 16:33:05 2020
New Revision: 365661
URL: https://svnweb.freebsd.org/changeset/base/365661

Log:
  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

Modified:
  stable/12/contrib/llvm-project/compiler-rt/lib/builtins/atomic.c
  stable/12/lib/libcompiler_rt/Makefile.inc
  stable/12/sys/sys/param.h
Directory Properties:
  stable/12/   (props changed)

Changes in other areas also in this revision:
Modified:
  stable/11/contrib/llvm-project/compiler-rt/lib/builtins/atomic.c
  stable/11/lib/libcompiler_rt/Makefile.inc
  stable/11/sys/sys/param.h
Directory Properties:
  stable/11/   (props changed)

Modified: stable/12/contrib/llvm-project/compiler-rt/lib/builtins/atomic.c
==============================================================================
--- stable/12/contrib/llvm-project/compiler-rt/lib/builtins/atomic.c	Sat Sep 12 15:18:52 2020	(r365660)
+++ stable/12/contrib/llvm-project/compiler-rt/lib/builtins/atomic.c	Sat Sep 12 16:33:05 2020	(r365661)
@@ -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: stable/12/lib/libcompiler_rt/Makefile.inc
==============================================================================
--- stable/12/lib/libcompiler_rt/Makefile.inc	Sat Sep 12 15:18:52 2020	(r365660)
+++ stable/12/lib/libcompiler_rt/Makefile.inc	Sat Sep 12 16:33:05 2020	(r365661)
@@ -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

Modified: stable/12/sys/sys/param.h
==============================================================================
--- stable/12/sys/sys/param.h	Sat Sep 12 15:18:52 2020	(r365660)
+++ stable/12/sys/sys/param.h	Sat Sep 12 16:33:05 2020	(r365661)
@@ -60,7 +60,7 @@
  *		in the range 5 to 9.
  */
 #undef __FreeBSD_version
-#define __FreeBSD_version 1202500	/* Master, propagated to newvers */
+#define __FreeBSD_version 1202501	/* Master, propagated to newvers */
 
 /*
  * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,


More information about the svn-src-all mailing list