[LLVMdev] build failure on ARM linux

Xerxes Rånby xerxes at zafena.se
Wed Jul 1 00:50:53 PDT 2009

llvm/lib/System/Atomic.cpp contains the call to 
__sync_val_compare_and_swap that lowers to the missing 
__sync_val_compare_and_swap_4 GCC intrinsic.

The same file contains several other __sync_* calls  and all these has 
to be implemented if we want to be able to compile llvm on linux/ARM 
with GCC versions below < 4.4

xerxes at labbserver:~/llvm$ grep _sync lib/*/*
lib/System/Atomic.cpp:  __sync_synchronize();
lib/System/Atomic.cpp:  return __sync_val_compare_and_swap(ptr, 
old_value, new_value);
lib/System/Atomic.cpp:  return __sync_add_and_fetch(ptr, 1);
lib/System/Atomic.cpp:  return __sync_sub_and_fetch(ptr, 1);
lib/System/Atomic.cpp:  return __sync_add_and_fetch(ptr, val);


Andrew Haley skrev:
> Nick Lewycky wrote:
>> 2009/6/30 Andrew Haley <aph at redhat.com <mailto:aph at redhat.com>>
>>     Nick Lewycky wrote:
>>     > I'm seeing this new build failure, starting some time yesterday on
>>     ARM:
>>     Yes.  It's just a matter of defining __sync_val_compare_and_swap_4:
>>     http://gcc.gnu.org/svn/gcc/trunk/gcc/config/arm/linux-atomic.c
>> The program is supposed to define it? LLVM doesn't directly call
>> __sync_val_compare_and_swap_4, so either the system headers #define
>> something else to it or gcc lowers another call to that.
> gcc lowers atomic operations to that.  It's part of libgcc now.
>> In either case, why is it declared HIDDEN?
> I'm not sure.
> Andrew.
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

More information about the llvm-dev mailing list