summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSoujyu Tanaka <soujyu.tanaka@access-company.com>2019-03-27 15:55:32 +0900
committerMatt Caswell <matt@openssl.org>2019-03-29 09:51:24 +0000
commit88ffc8dea4e313b6acfd3a9ef3868bee96717cf9 (patch)
treec8a5f28e885facb308954021faf66c09a7c93e00
parentd69226a3fc8e8448572d175e8d96ff7e817b1ebd (diff)
Avoid linking error on WCE700 for _InterlockedExchangeAdd().
This implementation is referenced to https://www.boost.org/doc/libs/1_69_0/boost/detail/interlocked.hpp Reviewed-by: Richard Levitte <levitte@openssl.org> Reviewed-by: Matt Caswell <matt@openssl.org> (Merged from https://github.com/openssl/openssl/pull/8596)
-rw-r--r--include/internal/refcount.h14
-rw-r--r--include/internal/tsan_assist.h2
2 files changed, 13 insertions, 3 deletions
diff --git a/include/internal/refcount.h b/include/internal/refcount.h
index f8b07789c5..f74f79415d 100644
--- a/include/internal/refcount.h
+++ b/include/internal/refcount.h
@@ -80,7 +80,7 @@ static __inline__ int CRYPTO_DOWN_REF(int *val, int *ret, void *lock)
typedef volatile int CRYPTO_REF_COUNT;
-# if (defined(_M_ARM) && _M_ARM>=7) || defined(_M_ARM64)
+# if (defined(_M_ARM) && _M_ARM>=7 && !defined(_WIN32_WCE)) || defined(_M_ARM64)
# include <intrin.h>
# if defined(_M_ARM64) && !defined(_ARM_BARRIER_ISH)
# define _ARM_BARRIER_ISH _ARM64_BARRIER_ISH
@@ -100,7 +100,17 @@ static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, void *lock)
return 1;
}
# else
-# pragma intrinsic(_InterlockedExchangeAdd)
+# if !defined(_WIN32_WCE)
+# pragma intrinsic(_InterlockedExchangeAdd)
+# else
+# if _WIN32_WCE >= 0x600
+ extern long __cdecl _InterlockedExchangeAdd(long volatile*, long);
+# else
+ // under Windows CE we still have old-style Interlocked* functions
+ extern long __cdecl InterlockedExchangeAdd(long volatile*, long);
+# define _InterlockedExchangeAdd InterlockedExchangeAdd
+# endif
+# endif
static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, void *lock)
{
diff --git a/include/internal/tsan_assist.h b/include/internal/tsan_assist.h
index 5bf30c41d8..0fd2f3e8f5 100644
--- a/include/internal/tsan_assist.h
+++ b/include/internal/tsan_assist.h
@@ -77,7 +77,7 @@
#elif defined(_MSC_VER) && _MSC_VER>=1200 \
&& (defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || \
- defined(_M_ARM64) || (defined(_M_ARM) && _M_ARM >= 7))
+ defined(_M_ARM64) || (defined(_M_ARM) && _M_ARM >= 7 && !defined(_WIN32_WCE)))
/*
* There is subtle dependency on /volatile:<iso|ms> command-line option.
* "ms" implies same semantic as memory_order_acquire for loads and