Message ID | 1440833570-31080-1-git-send-email-jsg@jsg.id.au (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Jonathan, On 29 August 2015 at 08:32, Jonathan Gray <jsg@jsg.id.au> wrote: > 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 <naddy@openbsd.org> > Signed-off-by: Jonathan Gray <jsg@jsg.id.au> > Reviewed-by: Mark Kettenis <kettenis@openbsd.org> > Reviewed-by: Matthieu Herrb <matthieu@openbsd.org> > --- > configure.ac | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/configure.ac b/configure.ac > index f07507b..705ac3e 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"],[]) > Just pushed this patch to master. Sorry that it took so long - must have missed it. Feel free to ping if you catch us 'sleeping on the job'. Thanks Emil
diff --git a/configure.ac b/configure.ac index f07507b..705ac3e 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