diff options
author | Soujyu Tanaka <soujyu.tanaka@access-company.com> | 2019-03-27 07:55:32 +0100 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2019-03-29 10:51:24 +0100 |
commit | 88ffc8dea4e313b6acfd3a9ef3868bee96717cf9 (patch) | |
tree | c8a5f28e885facb308954021faf66c09a7c93e00 /include/internal | |
parent | Add the FIPS related continuous random number generator (CRNG) testing. (diff) | |
download | openssl-88ffc8dea4e313b6acfd3a9ef3868bee96717cf9.tar.xz openssl-88ffc8dea4e313b6acfd3a9ef3868bee96717cf9.zip |
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)
Diffstat (limited to 'include/internal')
-rw-r--r-- | include/internal/refcount.h | 14 | ||||
-rw-r--r-- | include/internal/tsan_assist.h | 2 |
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 |