2009/6/30 Andrew Haley <aph at redhat.com>> Nick Lewycky wrote: > > I'm seeing this new build failure, starting some time yesterday on ARM: > > > > make[3]: Entering directory `/home/nlewycky/llvm/tools/llvmc/driver' > > llvm[3]: Linking Debug executable llvmc > > g++ -DLLVMC_BUILTIN_PLUGIN_1=Base -DLLVMC_BUILTIN_PLUGIN_2=Clang > -I/home/nlewycky/llvm/include -I/home/nlewycky/llvm/tools/llvmc/driver > -D_DEBUG -D_GNU_SOURCE -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -g > -fPIC -Woverloaded-virtual -pedantic -Wno-long-long -Wall -W > -Wno-unused-parameter -Wwrite-strings -lCompilerDriver -g -Wl,-R > -Wl,/home/nlewycky/llvm/Debug/bin -Wl,-export-dynamic > -L/home/nlewycky/llvm/Debug/lib -L/home/nlewycky/llvm/Debug/lib -o > /home/nlewycky/llvm/Debug/bin/llvmc > /home/nlewycky/llvm/tools/llvmc/driver/Debug/Main.o -lplugin_llvmc_Base > -lplugin_llvmc_Clang \ > > -lpthread -ldl -lm > > /usr/bin/ld: /home/nlewycky/llvm/Debug/bin/llvmc: hidden symbol > `__sync_val_compare_and_swap_4' in > /usr/lib/gcc/arm-linux-gnueabi/4.3.3/libgcc.a(linux-atomic.o) is referenced > by DSO > > /usr/bin/ld: final link failed: Nonrepresentable section on output > > collect2: ld returned 1 exit status > > make[3]: *** [/home/nlewycky/llvm/Debug/bin/llvmc] Error 1 > > > > This is with LLVM being built by the system compiler (GCC 4.3.3-10 > > Debian). I'm not sure what to make of this. Would it be due to the > > atomics used for mutexes? > > 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. In either case, why is it declared HIDDEN? Nick> > Andrew. > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20090630/c3faa29b/attachment.html>
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/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); Cheers Xerxes 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 >
Andrew Haley wrote:> 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.This is a known bug in gcc: see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40133 We're trying to get it fixed. Andrew.