From 3d190388382e64e12e7cf501952c98f4e8f71ef8 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Tue, 15 Nov 2011 20:33:26 +0000 Subject: [PATCH] - Fixed bug #55874 (GCC does not provide __sync_fetch_and_add on some archs) patch by: klightspeed at netspace dot net dot au --- configure.in | 7 +++++++ ext/standard/php_crypt_r.c | 3 +-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/configure.in b/configure.in index 074b2bab353..07ff284ed47 100644 --- a/configure.in +++ b/configure.in @@ -737,6 +737,13 @@ if test "$ac_cv_func_getaddrinfo" = yes; then AC_DEFINE(HAVE_GETADDRINFO,1,[Define if you have the getaddrinfo function]) fi +dnl Check for the __sync_fetch_and_add builtin +AC_CACHE_CHECK([for __sync_fetch_and_add], ac_cv_func_sync_fetch_and_add, +[AC_TRY_LINK([],[int x;__sync_fetch_and_add(&x,1);],ac_cv_func_sync_fetch_and_add=yes,ac_cv_func_sync_fetch_and_add=no)]) +if test "$ac_cv_func_sync_fetch_and_add" = yes; then + AC_DEFINE(HAVE_SYNC_FETCH_AND_ADD,1,[Define if you have the __sync_fetch_and_add function]) +fi + AC_REPLACE_FUNCS(strlcat strlcpy getopt) AC_FUNC_UTIME_NULL AC_FUNC_ALLOCA diff --git a/ext/standard/php_crypt_r.c b/ext/standard/php_crypt_r.c index 45ffea9cefc..20868984c04 100644 --- a/ext/standard/php_crypt_r.c +++ b/ext/standard/php_crypt_r.c @@ -94,8 +94,7 @@ void _crypt_extended_init_r(void) if (!initialized) { #ifdef PHP_WIN32 InterlockedIncrement(&initialized); -#elif (defined(__GNUC__) && !defined(__hpux) && !defined(__hppa__) && (__GNUC__ > 4 || \ - (__GNUC__ == 4 && (__GNUC_MINOR__ > 1 || (__GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ > 1))))) +#elif defined(HAVE_SYNC_FETCH_AND_ADD) __sync_fetch_and_add(&initialized, 1); #elif defined(HAVE_ATOMIC_H) /* Solaris 10 defines atomic API within */ membar_producer();