Commit 1914fddd authored by Soujyu Tanaka's avatar Soujyu Tanaka Committed by Matt Caswell
Browse files

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: default avatarRichard Levitte <levitte@openssl.org>
Reviewed-by: default avatarMatt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/8596)

(cherry picked from commit 88ffc8dea4e313b6acfd3a9ef3868bee96717cf9)
parent c7ea47b1
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -79,7 +79,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
@@ -99,7 +99,17 @@ static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, void *lock)
    return 1;
}
#  else
#   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)
{
+1 −1
Original line number Diff line number Diff line
@@ -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