Re: building i386 world on amd64 host: failed _at_svn

From: Adrian Chadd <adrian_at_freebsd.org>
Date: Thu, 15 Aug 2013 11:32:22 -0700
Oh, _this_ is the cause! Cool. I wondered about it.

Thanks for chasing this down!



-adrian


On 15 August 2013 11:13, Dimitry Andric <dim_at_freebsd.org> wrote:

> 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...
>
> -Dimitry
>
> _______________________________________________
> freebsd-current_at_freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe_at_freebsd.org"
>
Received on Thu Aug 15 2013 - 16:32:25 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:40 UTC