qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 54/66] add a header file for atomic operations


From: Peter Maydell
Subject: Re: [Qemu-devel] [PATCH 54/66] add a header file for atomic operations
Date: Sun, 20 Oct 2013 17:20:51 +0100

On 4 July 2013 16:13, Paolo Bonzini <address@hidden> wrote:
> +#ifndef atomic_xchg
> +#ifdef __ATOMIC_SEQ_CST
> +#define atomic_xchg(ptr, i)    ({                           \
> +    typeof(*ptr) _new = (i), _old;                          \
> +    __atomic_exchange(ptr, &_new, &_old, __ATOMIC_SEQ_CST); \
> +    _old;                                                   \
> +})
> +#elif defined __clang__
> +#define atomic_xchg(ptr, i)    __sync_exchange(ptr, i)
> +#else
> +/* __sync_lock_test_and_set() is documented to be an acquire barrier only.  
> */
> +#define atomic_xchg(ptr, i)    (smp_mb(), __sync_lock_test_and_set(ptr, i))
> +#endif
> +#endif

Hi. I'm afraid this doesn't compile on MacOSX/clang:

  CC    util/qemu-thread-posix.o
util/qemu-thread-posix.c:351:13: error: too many arguments to function
call, expected 3, have 4
        if (atomic_xchg(&ev->value, EV_SET) == EV_BUSY) {
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/pm215/src/qemu/include/qemu/atomic.h:174:42: note: expanded
from macro 'atomic_xchg'
    __atomic_exchange(ptr, &_new, &_old, __ATOMIC_SEQ_CST); \
    ~~~~~~~~~~~~~~~~~                    ^
<built-in>:16:26: note: expanded from macro '__ATOMIC_SEQ_CST'
#define __ATOMIC_SEQ_CST 5
                         ^
1 error generated.
make: *** [util/qemu-thread-posix.o] Error 1


I tried the '#elif defined__clang__' block instead and
that doesn't work either:

  CC    util/qemu-thread-posix.o
util/qemu-thread-posix.c:351:13: warning: implicit declaration of
function '__sync_exchange' is invalid in
      C99 [-Wimplicit-function-declaration]
        if (atomic_xchg(&ev->value, EV_SET) == EV_BUSY) {
            ^
/Users/pm215/src/qemu/include/qemu/atomic.h:179:32: note: expanded
from macro 'atomic_xchg'
#define atomic_xchg(ptr, i)    __sync_exchange(ptr, i)
                               ^
1 warning generated.
  LINK  qemu-nbd
Undefined symbols for architecture x86_64:
  "___sync_exchange", referenced from:
      _qemu_event_set in libqemuutil.a(qemu-thread-posix.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [qemu-nbd] Error 1

It looks like we need to select the '#else' case for MacOSX...
any suggestions about how best to do that?

thanks
-- PMM



reply via email to

[Prev in Thread] Current Thread [Next in Thread]