From f4b83bff60838f677e8c3c448bcd969810346e35 Mon Sep 17 00:00:00 2001 From: Jonathan Gray Date: Sat, 29 Aug 2015 17:32:50 +1000 Subject: [PATCH] configure.ac: rework compiler builtin atomic tests The libdrm autoconf test for atomics uses __sync_val_compare_and_swap with the address of a function argument which triggers a gcc ICE on sparc64 with the OpenBSD system compiler. Mark Kettenis pointed out that while other architectures probably spill the argument onto the stack this is likely not the case on register window architectures like SPARC and suggested passing a pointer as an argument instead which avoids the ICE and allows the drm libraries requiring atomics to build on sparc64 with the autoconf build. Reported-by: Christian Weisgerber Signed-off-by: Jonathan Gray Reviewed-by: Mark Kettenis Reviewed-by: Matthieu Herrb --- configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index cf10ef25..89a3a468 100644 --- a/configure.ac +++ b/configure.ac @@ -210,8 +210,8 @@ AC_CACHE_CHECK([for native atomic primitives], drm_cv_atomic_primitives, [ drm_cv_atomic_primitives="none" AC_LINK_IFELSE([AC_LANG_PROGRAM([[ - int atomic_add(int i) { return __sync_fetch_and_add (&i, 1); } - int atomic_cmpxchg(int i, int j, int k) { return __sync_val_compare_and_swap (&i, j, k); } + int atomic_add(int *i) { return __sync_fetch_and_add (i, 1); } + int atomic_cmpxchg(int *i, int j, int k) { return __sync_val_compare_and_swap (i, j, k); } ]],[[]])], [drm_cv_atomic_primitives="Intel"],[]) if test "x$drm_cv_atomic_primitives" = "xnone"; then -- 2.11.0