diff options
| author | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2007-10-11 09:57:48 +0100 | 
|---|---|---|
| committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2007-10-11 09:57:48 +0100 | 
| commit | 176738f0f0f57de3f4c8553a411b26b171fdd117 (patch) | |
| tree | ed98d6dd258fc0e65ab2bdff2a335b91910ae330 | |
| parent | 077fb290c57ee937330b22b2ae794fc9967d4722 (diff) | |
Fix detection of i486 atomic ops.
Previously, the attempts to determine support at compile-time on Darwin were
causing the i486 atomic ops to be used on *all* i386 or x86-64 GCC builds
(AH_VERBATIM can't be conditionalized like we were trying to).
| -rw-r--r-- | ChangeLog | 8 | ||||
| -rw-r--r-- | configure.in | 29 | ||||
| -rw-r--r-- | dbus/dbus-sysdeps-unix.c | 6 | ||||
| -rw-r--r-- | dbus/dbus-sysdeps.h | 10 | 
4 files changed, 28 insertions, 25 deletions
| @@ -1,3 +1,11 @@ +2007-10-11  Simon McVittie  <simon.mcvittie@collabora.co.uk> + +	* configure.in, dbus/dbus-sysdeps.h, dbus/dbus-sysdeps-unix.c: Fix +	detection of i486 atomic ops. Previously, the attempts to determine +	support at compile-time on Darwin were causing the i486 atomic ops to +	be used on *all* i386 or x86-64 GCC builds (AH_VERBATIM can't be +	conditionalized like we were trying to). +  2007-10-10  Simon McVittie  <simon.mcvittie@collabora.co.uk>  	* dbus/dbus-errors.c, dbus/dbus-protocol.h: Add new error diff --git a/configure.in b/configure.in index 4ed2e1c0..c9331158 100644 --- a/configure.in +++ b/configure.in @@ -536,7 +536,7 @@ fi  #### Atomic integers (checks by Sebastian Wilhelmi for GLib)  AC_MSG_CHECKING([whether to use inline assembler routines for atomic integers]) -have_atomic_inc=no +have_atomic_inc_cond=0  if test x"$GCC" = xyes; then    if test "x$enable_ansi" = "xyes"; then      AC_MSG_RESULT([no]) @@ -551,18 +551,13 @@ if test x"$GCC" = xyes; then              AC_MSG_RESULT([darwin])              # check at compile-time, so that it is possible to build universal              # (with multiple architectures at once on the compile line) -            AH_VERBATIM([DBUS_USE_ATOMIC_INT_486_DARWIN], [ -              #if (defined(__i386__) || defined(__x86_64__)) -              # define DBUS_USE_ATOMIC_INT_486 1 -              #endif -            ]) +            have_atomic_inc_cond="(defined(__i386__) || defined(__x86_64__))"              ;;            *)              AC_MSG_RESULT([i486]) -            AC_DEFINE_UNQUOTED(DBUS_USE_ATOMIC_INT_486, 1, [Use atomic integer implementation for 486]) +            have_atomic_inc_cond=1              ;;          esac -        have_atomic_inc=yes          ;;        *)          AC_MSG_RESULT([no]) @@ -570,20 +565,10 @@ if test x"$GCC" = xyes; then      esac    fi  fi -if test x$have_atomic_inc = xyes ; then -  case $host_os in -    darwin*) -      AH_VERBATIM([DBUS_HAVE_ATOMIC_INT_DARWIN], [ -        #if (defined(__i386__) || defined(__x86_64__)) -        # define DBUS_HAVE_ATOMIC_INT 1 -        #endif -      ]) -      ;; -    *) -      AC_DEFINE_UNQUOTED(DBUS_HAVE_ATOMIC_INT, 1, [Some atomic integer implementation present]) -      ;; -  esac -fi +AC_DEFINE_UNQUOTED([DBUS_USE_ATOMIC_INT_486_COND], ["$have_atomic_inc_cond"], +                   [Always defined; expands to 1 if we should use atomic integer implementation for 486, else 0]) +AC_DEFINE_UNQUOTED(DBUS_HAVE_ATOMIC_INT_COND, ["$have_atomic_inc_cond"], +                   [Always defined; expands to 1 if we have an atomic integer implementation, else 0])  #### Various functions  AC_CHECK_LIB(socket,socket) diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c index 0ab5e730..2ce7427b 100644 --- a/dbus/dbus-sysdeps-unix.c +++ b/dbus/dbus-sysdeps-unix.c @@ -1741,7 +1741,7 @@ _dbus_parse_uid (const DBusString      *uid_str,  _DBUS_DEFINE_GLOBAL_LOCK (atomic); -#ifdef DBUS_USE_ATOMIC_INT_486 +#if DBUS_USE_ATOMIC_INT_486_COND  /* Taken from CVS version 1.7 of glibc's sysdeps/i386/i486/atomicity.h */  /* Since the asm stuff here is gcc-specific we go ahead and use "inline" also */  static inline dbus_int32_t @@ -1768,7 +1768,7 @@ atomic_exchange_and_add (DBusAtomic            *atomic,  dbus_int32_t  _dbus_atomic_inc (DBusAtomic *atomic)  { -#ifdef DBUS_USE_ATOMIC_INT_486 +#if DBUS_USE_ATOMIC_INT_486_COND    return atomic_exchange_and_add (atomic, 1);  #else    dbus_int32_t res; @@ -1791,7 +1791,7 @@ _dbus_atomic_inc (DBusAtomic *atomic)  dbus_int32_t  _dbus_atomic_dec (DBusAtomic *atomic)  { -#ifdef DBUS_USE_ATOMIC_INT_486 +#if DBUS_USE_ATOMIC_INT_486_COND    return atomic_exchange_and_add (atomic, -1);  #else    dbus_int32_t res; diff --git a/dbus/dbus-sysdeps.h b/dbus/dbus-sysdeps.h index eadfb433..1a52e7fb 100644 --- a/dbus/dbus-sysdeps.h +++ b/dbus/dbus-sysdeps.h @@ -199,6 +199,16 @@ struct DBusAtomic  #endif  }; +/* The value we get from autofoo is in the form of a cpp expression; + * convert that to a conventional defined/undef switch. (We can't get + * the conventional defined/undef because of multiarch builds only running + * ./configure once, on Darwin.) */ +#if DBUS_HAVE_ATOMIC_INT_COND +#   define DBUS_HAVE_ATOMIC_INT 1 +#else +#   undef DBUS_HAVE_ATOMIC_INT +#endif +  dbus_int32_t _dbus_atomic_inc (DBusAtomic *atomic);  dbus_int32_t _dbus_atomic_dec (DBusAtomic *atomic); | 
