From owner-freebsd-current@FreeBSD.ORG Thu Aug 15 18:13:45 2013 Return-Path: Delivered-To: freebsd-current@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 33EF9BF1 for ; Thu, 15 Aug 2013 18:13:45 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from tensor.andric.com (tensor.andric.com [87.251.56.140]) (using TLSv1 with cipher ADH-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id E935B2083 for ; Thu, 15 Aug 2013 18:13:44 +0000 (UTC) Received: from [IPv6:2001:7b8:3a7::9136:b916:3e04:163d] (unknown [IPv6:2001:7b8:3a7:0:9136:b916:3e04:163d]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) by tensor.andric.com (Postfix) with ESMTPSA id 9EF285C43; Thu, 15 Aug 2013 20:13:35 +0200 (CEST) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\)) Subject: Re: building i386 world on amd64 host: failed @svn From: Dimitry Andric In-Reply-To: Date: Thu, 15 Aug 2013 20:13:34 +0200 Content-Transfer-Encoding: quoted-printable Message-Id: <17A40261-A0DA-4070-990F-0D0777A5BE44@FreeBSD.org> References: To: Dmitry Morozovsky X-Mailer: Apple Mail (2.1508) Cc: "freebsd-current@freebsd.org CURRENT" , Peter Wemm X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Aug 2013 18:13:45 -0000 On Jul 28, 2013, at 15:15, Dmitry Morozovsky wrote: ... > on my builder I have consistent error: >=20 > = /usr/obj/i386.i386/FreeBSD/pristine/src.current/usr.bin/svn/svn/../lib/lib= svn_subr/libsvn_subr.a(named_atomic.o):=20 > In function `svn_named_atomic__cmpxchg': > named_atomic.c:(.text+0xed): undefined reference to=20 > `__sync_val_compare_and_swap_8' > = /usr/obj/i386.i386/FreeBSD/pristine/src.current/usr.bin/svn/svn/../lib/lib= svn_subr/libsvn_subr.a(named_atomic.o):=20 > 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/lib= svn_subr/libsvn_subr.a(named_atomic.o):=20 > In function `svn_named_atomic__write': > named_atomic.c:(.text+0x1f3): undefined reference to=20 > `__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 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- usr.bin/svn/svn_private_config.h (revision 254300) +++ usr.bin/svn/svn_private_config.h (working copy) @@ -153,7 +153,9 @@ #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