utils: Enable __atomic* built-ins based on the GCC version
This solves a problem with GNAT when compiling charon-tkm as __atomic* built-ins are only provided in GCC 4.7 and newer. Currently GNAT 4.6 and GCC 4.7.2 is shipped with Debian wheezy (stable), as used in the testing environment. So while the configure script correctly detected the __atomic* built-ins, and defined HAVE_GCC_ATOMIC_OPERATIONS, this define turned out to be incorrect when charon-tkm was later built with GNAT.
This commit is contained in:
parent
9be1c8d175
commit
a0c2370ea5
19
configure.ac
19
configure.ac
|
@ -668,25 +668,6 @@ AC_COMPILE_IFELSE(
|
||||||
[AC_MSG_RESULT([no])]
|
[AC_MSG_RESULT([no])]
|
||||||
)
|
)
|
||||||
|
|
||||||
AC_MSG_CHECKING([for GCC __atomic operations])
|
|
||||||
AC_RUN_IFELSE([AC_LANG_SOURCE(
|
|
||||||
[[
|
|
||||||
int main() {
|
|
||||||
int ref = 1, val;
|
|
||||||
__atomic_fetch_add(&ref, 1, __ATOMIC_RELAXED);
|
|
||||||
val = __atomic_sub_fetch(&ref, 1, __ATOMIC_RELAXED);
|
|
||||||
__atomic_compare_exchange_n(&ref, &val, 0, 0, __ATOMIC_RELAXED,
|
|
||||||
__ATOMIC_RELAXED);
|
|
||||||
return ref;
|
|
||||||
}
|
|
||||||
]])],
|
|
||||||
[AC_MSG_RESULT([yes]);
|
|
||||||
AC_DEFINE([HAVE_GCC_ATOMIC_OPERATIONS], [],
|
|
||||||
[have GCC __atomic_* operations])],
|
|
||||||
[AC_MSG_RESULT([no])],
|
|
||||||
[AC_MSG_RESULT([no])]
|
|
||||||
)
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([for GCC __sync operations])
|
AC_MSG_CHECKING([for GCC __sync operations])
|
||||||
AC_RUN_IFELSE([AC_LANG_SOURCE(
|
AC_RUN_IFELSE([AC_LANG_SOURCE(
|
||||||
[[
|
[[
|
||||||
|
|
|
@ -748,6 +748,13 @@ static inline size_t round_down(size_t size, size_t alignment)
|
||||||
*/
|
*/
|
||||||
typedef u_int refcount_t;
|
typedef u_int refcount_t;
|
||||||
|
|
||||||
|
/* use __atomic* built-ins with GCC 4.7 and newer */
|
||||||
|
#ifdef __GNUC__
|
||||||
|
# if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6))
|
||||||
|
# define HAVE_GCC_ATOMIC_OPERATIONS
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_GCC_ATOMIC_OPERATIONS
|
#ifdef HAVE_GCC_ATOMIC_OPERATIONS
|
||||||
|
|
||||||
#define ref_get(ref) __atomic_add_fetch(ref, 1, __ATOMIC_RELAXED)
|
#define ref_get(ref) __atomic_add_fetch(ref, 1, __ATOMIC_RELAXED)
|
||||||
|
|
Loading…
Reference in New Issue