summaryrefslogtreecommitdiffstats
path: root/contrib/libc++/src
diff options
context:
space:
mode:
authordim <dim@FreeBSD.org>2015-09-22 17:34:51 +0000
committerdim <dim@FreeBSD.org>2015-09-22 17:34:51 +0000
commit4ddf2ffb8601500c8539027a938565d6bb39a9c7 (patch)
tree9171ad3c31621914a6d38df1554a76ccca734c7f /contrib/libc++/src
parent6acc55879cc5243a86ccf96b8495b26a1f2fa961 (diff)
downloadFreeBSD-src-4ddf2ffb8601500c8539027a938565d6bb39a9c7.zip
FreeBSD-src-4ddf2ffb8601500c8539027a938565d6bb39a9c7.tar.gz
Work around clang emitting libcalls to __atomic_add_fetch() and friends
in libc++, on __ARM_ARCH < 6. Additionally, supply the missing stub __libcpp_relaxed_store(), as proposed in http://reviews.llvm.org/D13051 NOTE: this needs to be fixed properly later on, by supplying library functions implementing atomic operations for arm < v6. We should probably take those from sys/arm/arm/stdatomic.c, and stuff them into either libgcc or compiler-rt.
Diffstat (limited to 'contrib/libc++/src')
-rw-r--r--contrib/libc++/src/support/atomic_support.h10
1 files changed, 9 insertions, 1 deletions
diff --git a/contrib/libc++/src/support/atomic_support.h b/contrib/libc++/src/support/atomic_support.h
index e738a51..b0ff7f6 100644
--- a/contrib/libc++/src/support/atomic_support.h
+++ b/contrib/libc++/src/support/atomic_support.h
@@ -13,7 +13,8 @@
&& defined(__ATOMIC_ACQUIRE) \
&& defined(__ATOMIC_RELEASE) \
&& defined(__ATOMIC_ACQ_REL) \
- && defined(__ATOMIC_SEQ_CST)
+ && defined(__ATOMIC_SEQ_CST) \
+ && defined(__ARM_ARCH) && __ARM_ARCH >= 6
# define _LIBCPP_HAS_ATOMIC_BUILTINS
#elif !defined(__clang__) && defined(_GNUC_VER) && _GNUC_VER >= 407
# define _LIBCPP_HAS_ATOMIC_BUILTINS
@@ -103,6 +104,13 @@ void __libcpp_atomic_store(_ValueType* __dest, _FromType __val,
*__dest = __val;
}
+template <class _ValueType, class _FromType>
+inline _LIBCPP_INLINE_VISIBILITY
+void __libcpp_relaxed_store(_ValueType* __dest, _FromType __val)
+{
+ *__dest = __val;
+}
+
template <class _ValueType>
inline _LIBCPP_INLINE_VISIBILITY
_ValueType __libcpp_atomic_load(_ValueType const* __val,
OpenPOWER on IntegriCloud