On Jul 28, 2013, at 15:15, Dmitry Morozovsky <marck_at_rinet.ru> wrote: ... > on my builder I have consistent error: > > /usr/obj/i386.i386/FreeBSD/pristine/src.current/usr.bin/svn/svn/../lib/libsvn_subr/libsvn_subr.a(named_atomic.o): > In function `svn_named_atomic__cmpxchg': > named_atomic.c:(.text+0xed): undefined reference to > `__sync_val_compare_and_swap_8' > /usr/obj/i386.i386/FreeBSD/pristine/src.current/usr.bin/svn/svn/../lib/libsvn_subr/libsvn_subr.a(named_atomic.o): > In function `svn_named_atomic__add': > named_atomic.c:(.text+0x193): undefined reference to `__sync_add_and_fetch_8' > /usr/obj/i386.i386/FreeBSD/pristine/src.current/usr.bin/svn/svn/../lib/libsvn_subr/libsvn_subr.a(named_atomic.o): > In function `svn_named_atomic__write': > named_atomic.c:(.text+0x1f3): undefined reference to > `__sync_lock_test_and_set_8' After a bit of private conversation with Dmitry, it turned out he was building using WITHOUT_CLANG, e.g. gcc is used for everything. Now, this is *not* a problem specific to cross-building: head will not build on i386 with gcc at all! It results in exactly the same error shown above. This is because Subversion has a few wrapper routines for atomic operations, and these are implemented in terms of the __sync_xxx compiler builtins, since usr.bin/svn/svn_private_config.h has SVN_HAS_ATOMIC_BUILTINS defined. On i386, gcc apparently cannot inline the 64 bit versions of these builtins, so it inserts a call to an external function instead, leading to a link error. Eventually, we could put such functions in libc, but for now it might be better to turn off the SVN_HAS_ATOMIC_BUILTINS define in case of !clang && i386, e.g.: Index: usr.bin/svn/svn_private_config.h =================================================================== --- usr.bin/svn/svn_private_config.h (revision 254300) +++ usr.bin/svn/svn_private_config.h (working copy) _at__at_ -153,7 +153,9 _at__at_ #define SVN_FS_WANT_DB_PATCH 14 /* Define if compiler provides atomic builtins */ +#if defined(__i386__) && !defined(__clang__) #define SVN_HAS_ATOMIC_BUILTINS 1 +#endif /* Is GNOME Keyring support enabled? */ /* #undef SVN_HAVE_GNOME_KEYRING */ Alternatively, we could attempt to figure out why gcc doesn't want to inline those 64 bit builtins on FreeBSD. It seems to have no problem doing so on the first Linux box I tried... -DimitryReceived on Thu Aug 15 2013 - 16:13:45 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:40 UTC